计算机系统应用教程网站

网站首页 > 技术文章 正文

30天学会STM32的HAL库使用——第五天串口进阶篇使用DMA

btikc 2024-10-12 11:44:52 技术文章 5 ℃ 0 评论

前言

之前由于学习了串口的基本发送和接收功能,实现了轮询发送和接收,中断接收等功能,但是使用HAL库自带的中断接收功能只能接收固定长度的数据,这在实际使用的过程中是比较不太方便的,实际上收到的数据大都数是不固定长度的,所以我们在HAL库的基础上进行一些修改实现不定长数据的接收。

工程配置

我们还是使用MXCube库先对时钟、使用的串口通信参数等信息进行配置,配置好后,直接生成所需的工程,然后在工程的基础上进行添加我们自己的代码。具体步骤如下

  1. 配置RCC和调试方式

2.配置串口通信参数

3.配置DMA参数和中断

生成工程和添加用户代码

生成工程后,我们需要添加一些代码,来实现不定长的数据接收。

首先在Usart.c的文件中添加如下代码开启DMA数据传输和使能串口的IDLE中断。具体代码如下:

第一行代码开启串口的数据接收DMA传输,第二行代码开启串口的空闲中断。

然后我们需要构建一个空闲中断回调函数,实现数据接收。具体如下

该函数主要是在空闲中断产生后,先清楚空闲中断标志,然后停止本次串口DMA数据传输,记录本次收到数据的长度,再重新开启串口DMA数据接收。最后在串口中断中调用该函数。

完成上述代码的添加后,即已经实现了不定长数据的接收,为了检查代码的有效性,我们再将收到的数据发回给电脑,我们再main函数中添加发送代码。

实验结果

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表