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

    文章

    5912

    浏览量

    227312
  • 串口
    +关注

    关注

    15

    文章

    1630

    浏览量

    83623
  • dma
    dma
    +关注

    关注

    3

    文章

    584

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    直播预告 | 睿擎派 AD7606 高速采集:FlexBus + DMA 实战,8通道同步采样

    8通道同步采样,CPU占用却几乎为零?FlexBus并行总线怎么配置?DMA如何与ADC配合实现零拷贝?工业数据采集的痛点,我们直播里一次性解决。5月13日(周三)晚8点,我们用睿擎派
    的头像 发表于 05-11 18:40 187次阅读
    直播预告 | 睿擎派 AD7606 高速采集:FlexBus + <b class='flag-5'>DMA</b> 实战,8<b class='flag-5'>通道</b>同步采样

    如何在S32K358中使用软件触发器配置具有DMA的ADC多通道

    我正在开发S32K358,我想将ADC配置为使用DMA读取多个通道。具体来说,我想: 使用软件触发器启动ADC转换。 配置 DMA,以便将来自多个通道的转换结果自动传输到缓冲区。 处理
    发表于 04-28 06:30

    DMA弹性映射功能

    映射模式下,TMR2的overflow事件产生DMA请求只在某固定通道下,通过弹性映射功能,可以将其定义到DMA的任意通道。 6) 下载程序,通过抓取PC口的波形观察结果。
    发表于 12-12 16:04

    CW32L052 DMA直接内存访问介绍

    传输,如FLASH存储器、UART串口、TIM定时器、ADC数模转换器等被配置为DMA通道的触发源时, 可以产生DMA请求(DMA req
    发表于 12-12 07:21

    哪些场景适合使用DMA

    。 串行通信(UART,SPI,I2C等): UART:在大量数据收发时,例如通过串口接收一帧数据或发送一帧数据,可以使用DMA来搬运数据。比如,使用DMA
    发表于 11-12 07:13

    RVMCU课堂「18」: 手把手教你玩转RVSTAR—DMA数据传输篇

    发送功能,让数据不经CPU直接从内存(txbuffer)传输到串口的发送端,然后使用串口DMA接收功能接收10个字节的数据,保存到rxbu
    发表于 10-30 08:29

    rt-thread 在使用串口DMA模式的时候,接收数据接收不到00,为什么?

    硬件为STM32F103ZET6: 在使用串口通讯时,在DMA接收模式下,收不到00数据,遇到00数据,好像DMA模式就认为是数据已经结束了一样。 代码调试部分 换成非0数据就能收
    发表于 10-14 06:20

    串口DMA接收方式打开,为什么在开启IDLE中断的情况下还需要开启DMA中断呢?

    如图,在以 RT_DEVICE_FLAG_DMA_RX 方式打开串口时,底层会配置串口IDLE中断,同时也会打开DMA中断,DMA中断在
    发表于 09-29 08:30

    串口DMA接收数据包丢失怎么解决?

    RTT串口DMA接收数据,超过缓冲区后为什么会吞掉一个数据包呢,不能每次处理完后清除缓冲区数据吗,感觉接收的数据是累计的,累计满之后会重新覆盖,在最后一个包
    发表于 09-29 07:50

    配置了串口DMA,现在是接收可以,发送不行,是什么地方没有设置对吗?

    配置了串口DMA,现在是接收可以,发送不行,是什么地方没有设置对吗?当配置DMA_TX 不能发送数据,默认轮询发送就可以。配置如下图:
    发表于 09-28 07:41

    完全按照rt-thread 里的串口DMA接收写的,接收内存无论怎么扩大还是报错,为什么?

    完全按照rt-thread 里的串口DMA接收写的,还是接收内存无论怎么扩大还是报错. Warning: There is no enough buffer for saving d
    发表于 09-25 07:16

    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

    第十五章 DMA

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