当前位置:   article > 正文

GD32或STM32:DMA循环模式与普通模式(串口IDLE)_gd32e230串口dma循环队列

gd32e230串口dma循环队列

USART+DMA+循环队列接收不定长数据-CSDN博客

STM32 DMA 循环模式DMA_Mode_Circular详解-CSDN博客

推荐以上两个链接。

Normal(普通)模式的DMA+串口IDLE中断,流程如下:

1、初始化时:开启串口IDLE中断;dma_circulation_disable,失能DMA的循环;

2、在串口IDLE中断里面:

(1) 清除idle的flag;dma_channel_disable关闭DMA,dma_interrupt_flag_clear清除标记;

(2) 获取串口接收数据的长度,设置标记(在main的while里面会识别标记,解析数据);

(3) dma_transfer_number_config重新配置dma,dma_channel_enable使能DMA;

3、在while里面识别接收成功标记后解析数据;

使用DMA减少了cpu的参与(数据搬移),IDLE(即帧与帧之间的空缺时间会触发idle)解决了频繁的串口中断,又可以处理不定长的数据帧;

normal模式即:到达设定的传输长度(dma_init_struct.number = UART_DMA_SIZE;),或者人为的认为一次传输完成(例如在idle里面关闭DMA),DMA就不能再工作,必须重新配置dma_transfer_number_config,再开启dma_channel_enable;

以下截图来自:STM32 DMA 循环模式DMA_Mode_Circular详解-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/584443
推荐阅读
相关标签
  

闽ICP备14008679号