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

    文章

    5847

    浏览量

    223719
  • 串口
    +关注

    关注

    15

    文章

    1607

    浏览量

    81909
  • dma
    dma
    +关注

    关注

    3

    文章

    577

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    哪些场景适合使用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接收数据包丢失怎么解决?

    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 1104次阅读
    第十五章 <b class='flag-5'>DMA</b>

    为什么在“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

    CKS32F107xx系列的DMA控制器简介

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

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

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