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;文章来源:https://www.toymoban.com/news/detail-834118.html
以下截图来自:STM32 DMA 循环模式DMA_Mode_Circular详解-CSDN博客文章来源地址https://www.toymoban.com/news/detail-834118.html
到了这里,关于GD32或STM32:DMA循环模式与普通模式(串口IDLE)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!