赞
踩
STM32 DMA 循环模式DMA_Mode_Circular详解-CSDN博客
推荐以上两个链接。
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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。