
一、实验说明 实验平台:STM32F103C8T6 实验内容:使用串口一空闲中断结合DMA 完成不定长数据接收 STM32的串口接收数据的方式 1、轮询接收 所谓轮询,就是在主函数中判断接收完成的标志位。举个不太恰当例子,就比如,此时你正在考试作弊,手机藏在兜里,你的队友再给你发答案,但是你的手机静音,所以你不得不写一会题看一会手机,有的时候答案已经发来了但是你此时在假装写,没有看,导致你没能及时看到答案浪费了时间(仅仅为了举例而已。。。。)。轮询接收数据也是这样。 2、中断接收 串口接收配置为中断模式,当有数据收到时,进入到串口接收中断中读取数据。继续上面的例子(你为了不浪费时间且及时抄到答案,你把手机开了震动,消息一来立马看,这是就比上面好多了,能够及时发现消息。但是又出了一个问题,你的猪队友,写一个选择给你发一次,不停的震动,完全扰乱了你的节奏)。其实也就是,串口接收数据时,一次接收一个字节,当数据量较大时,显然这样频繁的进入中断,打断主程序,严重影响系统性能。 3、空闲中断接收 空闲中断接收,当一帧数据接收完成之后,串口会进入到空闲中断中去,然后在空闲中断中处理收到的数据。这种模式对处理不定长数据帧带来很大的便利,我们不必频繁的进入接收中断处理数据,但是弊端也是明显的,由于每次都要接收完一个完整的数据帧后才空闲中断,所以当一帧数据出错时,我们也不得不接收这帧错误的数据。在通讯可靠的场合,使用空闲中断接收模式接收串口数据,将会大大提高系统的性能。 二、实验步骤 1、基础配置 1)、sys中,选好调试方式,例如jtag-4pin。 2)、RCC时钟,晶振选择。 3)、时钟树配置。 4)、中断分组配置。 以上步骤可以参考串口中断实验。 串口中断实验配置 本实验要配置好printf函数便于演示效果 2、串口和DMA配置 1)、串口一配置。 ![]() 2)、DMA选择 ![]() ![]() 3)、生成工程代码 ![]() 然后生成代码。 4)、添加代码 ![]()
如下图,在usart.c 文件中先把变量定义上,同时把支持printf的函数添加上。
![]() ![]()
![]()
3 烧录调试 添加链接描述 ![]() |
【STM32U3评测】SPIDMA发送
实战经验 | TrustZone应用中串口通信的DMA传输失败问题
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
STM32的DMA双缓冲模式详解
基于STM32的心率计以DMA方式获取传感器数据经验分享
基于STM32利用ADC+DMA采样显示经验分享
【经验分享】STM32使用DMA接收串口数据
基于STM32的DMA经验分享
基于STM32的ADC+DMA采样与板载运放跟随经验分享