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
    +关注

    关注

    114

    文章

    5191

    浏览量

    214166
  • 串口
    +关注

    关注

    14

    文章

    1555

    浏览量

    76622
  • dma
    dma
    +关注

    关注

    3

    文章

    563

    浏览量

    100639
收藏 人收藏

    评论

    相关推荐

    ZYNQ基础---AXI DMA使用

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

    ESP32是否支持双通道ADC_DMA

    在IDF里看到ESP32支持ADC_DMA了, 1,是否支持双通道ADC_DMA, 2,以后能支持DAC_DMA通道吗,
    发表于 06-19 08:11

    【GD32F303红枫派开发板使用手册】第十六讲 USART-DMA串口收发实验

    在前面ADC章节中,我们介绍了DMA的工作原理,这里就不多做介绍。从GD32F303用户手册中可以查到,各串口的TX和RX分别对应DMA的不同通道,比如USART0的TX对应
    的头像 发表于 06-15 09:54 1126次阅读
    【GD32F303红枫派开发板使用手册】第十六讲 USART-<b class='flag-5'>DMA</b><b class='flag-5'>串口</b>收发实验

    FX3使用DMA模式的话,有什么方法可以让我获得串口接收到的数据?

    你好,我想问一下,串口如果使用DMA模式的话,有什么方法可以让我获得串口接收到的数据,除了函数getbuffer以及DMA
    发表于 05-28 07:28

    CW32使用DMA通道、定时器触发ADC实现了多路AD采集

    本测试样例基于CW32F030C8T6MCU,使用DMA通道、定时器触发ADC实现了12路AD采集。
    的头像 发表于 05-24 09:29 852次阅读
    CW32使用<b class='flag-5'>DMA</b>单<b class='flag-5'>通道</b>、定时器触发ADC实现了多路AD采集

    如何在STM32F439 DMA流中断中区分是哪个通道产生的中断?

    STM32F439有两个DMA控制器DMA1和DMA2,每个控制器有8个流,每个流有8个通道,我做的是采用串口1
    发表于 05-17 08:20

    STM32串口DMA通讯接收不到数据的原因?

    //STM32串口DMA通讯接收不到数据 //请各位大神帮忙看看,下面的DMA配置问题出在哪里 //程序编写思路是:用串口助手发数据给STM
    发表于 05-09 06:40

    STM8L151 ADC采用DMA通道连续采集遇到通道数据滚动怎么解决?

    STM8L151 ADC 采用DMA8通道连续采集,通过ST_LINK仿真发现:通道数据滚动问题,比如第一通道的数据本应该在数组0通道,一会
    发表于 04-30 08:22

    求助,STM32F103C8T6的外设DMA共用通道冲突怎么解决?

    我是用I2C和串口都用到了DMA,结果通道冲突了,然后我就加了互斥锁,且在串口或I2C外设使用DMA时就把所有用到这个
    发表于 03-29 09:15

    STM32G030F ADC-DMA1通道3,串口收发-DMA1的通道1和通道2,同一个DMA的不同通道为什么会相互影响呢?

    同一个DMA的不同通道为什么会相互影响呢,关闭ADC,串口工作正常,串口波形正常。打开ADC,串口虽然也能工作,但是波形在跳动,好像是ADC
    发表于 03-26 07:01

    STM32F411 SPI能用的DMA通道,IIS不能用是为什么?

    使用STM32F411RET6在开发,使用了IIS功能,将SPI1作为IIS1使用,同时启用接收DMA,但是发现在STM32CubeMX中IIS1的DMA设置中无法设置RX,仅有TX的DMA
    发表于 03-15 06:29

    Xilinx高性能PCIe DMA控制器IP,8个DMA通道

    基于PCI Express Integrated Block,Multi-Channel PCIe QDMA Subsystem实现了使用DMA地址队列的独立多通道、高性能Continous或
    的头像 发表于 02-22 11:11 1491次阅读
    Xilinx高性能PCIe <b class='flag-5'>DMA</b>控制器IP,8个<b class='flag-5'>DMA</b><b class='flag-5'>通道</b>

    什么是DMADMA究竟有多快!

    助于提高数据传输速度和系统效率。 那么,DMA究竟有多快呢? 实践出真知 恰好,最近有个多通道数据采集的项目,受限于通道数多、分辨率高,而系统带宽有限,为了尽可能充分利用有限带宽,就得想办法优化时序,把时间都留给数据采集和传输。
    的头像 发表于 02-22 10:43 2071次阅读
    什么是<b class='flag-5'>DMA</b>?<b class='flag-5'>DMA</b>究竟有多快!

    雅特力AT32F423 DMA使用指南

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

    dma串口直接发送的区别

    DMA(Direct Memory Access)和串口直接发送是两种不同的数据传输方式,它们在实现上有着明显的区别和优劣势。本文将详细介绍DMA串口直接发送的原理、优缺点以及适用场
    的头像 发表于 01-07 17:43 2961次阅读