0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何解决PWM使用的DMA通道与串口接收的DMA通道撞车问题

电子设计 ? 来源:电子设计 ? 作者:电子设计 ? 2022-02-16 11:35 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

项目做到一半,碰到个尴尬问题:PWM使用的DMA通道与串口接收的DMA通道撞车了,咋办?

考虑一下,决定放弃idle中断+dma的串口不定长数据接收方案,回到中断接收去。

中断接收函数HAL_UART_RECEIVE_IT函数是个定长接收函数,除非把接收长度设为1。由于我使用freertos系统,打断系统的时间应尽可能少,频率尽可能低。每个字节都进一次hal库的接收处理函数,进行各种判断实在是不友好,因此考虑跳过hal的串口处理部分,直接判断uart_flag_rxne标志位与uart_flag_idle标志位,存入接收缓冲。触发idle中断后认为不定长数据接收完毕,进行处理。

代码:

中断使能与初始化,不启用hal_uart_receive_it。

100059078-113575-x1.png

中断处理部分,跳过hal中断处理函数

100059078-113576-x2.png

注意:__hal_uart_clear_flag函数不能清除idle标志位,需要用古老的读取方法清空。否则会卡死在中断处理结束之后。

优点:中断处理内容尽可能简化,降低对系统内核的打断;

缺点:只适用于8位数据位,无校验位等最常规通信方式,对于更复杂参数的串口通信有待测试,省掉的hal库会不会造成运行不稳定有待于继续测试。

版权声明:本文转自CSDN,博主fox0815
遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/fox0815/article/details/106461788
审核编辑:何安

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5652

    浏览量

    220486
  • 串口
    +关注

    关注

    15

    文章

    1593

    浏览量

    80487
  • dma
    dma
    +关注

    关注

    3

    文章

    576

    浏览量

    103727
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机,怎么解决?

    NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = DMA2_Stream2_IRQn;//DMA2_Stream2中断占用通道
    发表于 08-04 07:16

    求助,关于stm32H7多DMA数据流问题求解

    情况如下:stm32H7配置了一个adc进行采样,通过dma进行数据传输,串口接收和发送命令,用两个dma数据流通道,采用的空闲中断。 问题
    发表于 07-29 15:02

    STM32407使用串口闲时中断+DMA方式接收最大接收字节是多少?

    使用串口闲时中断+DMA方式接收数据,波特率为460800,DMA接收长度为1024个字节,并开启串口
    发表于 07-22 08:16

    无法配置 ADC1 来触发 DMA 传输,怎么解决?

    SCU->DMAP_ADC.bit.ADC1_SQ1 = 1u;并配置和启用DMA。 考虑通过 SQ1 事件触发 DMA 通道 3,我认为这应该是 SQ1 转换结束事件。 DMA
    发表于 07-21 06:57

    第十五章 DMA

    本章介绍DMA(直接存储器存取),其可在不占用CPU的情况下搬数据,支持多种传输方向,含控制器、通道等配置及相关实验代码。
    的头像 发表于 06-14 16:32 ?739次阅读
    第十五章 <b class='flag-5'>DMA</b>

    Cyusb3014修改DMA大小为大于4KB时,将不会在HOST端接收到任何数据,为什么?

    你好,在官方的slavefifo模式例程中,我想尝试增加DMA大小来提高读取速度。 但是,当我修改DMA大小为大于4KB时,我将不会在HOST端接收到任何数据。 若设置值小于等于4KB则可以正常工作
    发表于 05-09 07:31

    为什么在“PWM Adc Dma 344 S32CT”示例中使用ISR块来读取dma adc通道

    我正在 MBDT 中使用 S32K358 进行一个项目,我正在寻找启用 DMA 传输类型的 ADC 模块。 在 ADC 示例“PWM Adc Dma 344 S32CT”中,我发现要读取配置为
    发表于 04-08 06:39

    STM32G030F6 ADC+DMA通道非连续采样无法正常工作怎么解决?

    配置:使用STM32G030F6 ADC外设时,ADC使用两个通道DMA配置为循环模式,ADC扫描模式+非连续采样。 问题:初始化阶段能进一次DMA传输完成中断,在main函数中再次开启ADC转化
    发表于 03-12 07:10

    STM32H743 UART DMA接收不到数据,为什么?

    failed!\\n\", \"uart3\"); return RT_ERROR; } /* 以 DMA 接收及轮询发送方式打开串口设备
    发表于 02-19 06:14

    CKS32F107xx系列的DMA控制器简介

    直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。两个DMA控制器有12个
    的头像 发表于 02-18 17:24 ?979次阅读
    CKS32F107xx系列的<b class='flag-5'>DMA</b>控制器简介

    如何使用DMA进行USART不定长度接收

    在上一讲中,我们对USART进行了简单介绍,并讲解了如何在不使用DMA的情况下进行不定长度数据接收,本讲将着重讲解如何使用DMA进行USART不定长度接收
    的头像 发表于 02-18 17:01 ?1011次阅读
    如何使用<b class='flag-5'>DMA</b>进行USART不定长度<b class='flag-5'>接收</b>

    ZYNQ基础---AXI DMA使用

    前言 在ZYNQ中进行PL-PS数据交互的时候,经常会使用到DMA,其实在前面的ZYNQ学习当中,也有学习过DMA的使用,那就是通过使用自定义的IP,完成HP接口向内存写入和读取数据的方式。同样
    的头像 发表于 01-06 11:13 ?2671次阅读
    ZYNQ基础---AXI <b class='flag-5'>DMA</b>使用

    雅特力AT32F402/F405 DMA使用指南

    DMA简介DMA控制器的作用不仅在增强系统性能并减少处理器的中断生成,而且还针对32位MCU应用程序专门优化设计。DMA控制器为存储器到存储器,存储器到外设和外设到存储器的传输提供了7个通道
    的头像 发表于 11-20 01:03 ?1096次阅读
    雅特力AT32F402/F405 <b class='flag-5'>DMA</b>使用指南

    DMA是什么?详细介绍

    DMA(Direct Memory Access)是一种允许某些硬件子系统直接访问系统内存的技术,而无需中央处理单元(CPU)的介入。这种技术可以显著提高数据传输速率,减轻CPU的负担,并提高整体
    的头像 发表于 11-11 10:49 ?2w次阅读

    STM32CUBEMX(2)--USART通过DMA方式接收不定长数据

    的不同,有一个或两个DMA模块。 STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访
    发表于 09-04 11:48