stm32f407 6路串口dma配置_FreeRTOS例程4-串口DMA收发不定长数据

v2-85561ea69402d1a7222f0269c840cbd4_1440w.jpg?source=172ae18b

1 基础知识点

DMA

DMA(Direct Memory Access),即直接内存存储,在一些数据的传输中,如串口、SPI等,采用DMA方式,传输过程不需要CPU参与,可用让CPU有更多的时间处理其他的事情。

STM32F4的DMA通道选择如下:

v2-f1a91f6ade6ea97996d442e8eefecc84_b.jpg

接下来的程序思路如下:

v2-e789198da762fbc62df20694b021bf90_b.jpg

2 编程要点

2.1 DMA发送

2.1.1 串口DMA发送配置

由于是发送不定长的数据,先不需要配置发送的长度,在每次的发送时,再配置。

//=======================================

2.1.2 DMA发送完成中断

DMA发送完成后,触发DMA发送完成中断,这里可用释放自定义的DMA发送完成信号量,表明下次的DMA传输可用进行。

//=======================================

2.1.3 DMA发送函数接口

//=======================================

2.2 DMA接收

2.2.1 串口DMA接收配置

需要配置一个接收地址和一个接收长度,用于DMA接收数据的暂存。

//=======================================

2.2.2 串口空闲中断

串口空闲中断的作用与上一篇

码农爱学习:FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用​zhuanlan.zhihu.com
v2-dcf089f1bea515ca456c2db1439671fa_180x120.jpg

介绍的一样,都是在发送完一串字符后被触发,这次由于使用了DMA接收,所以接收的数据在DMA缓冲区,且接收的数据长度可用根DMA接收通道的总长度与剩余长度的差值来计算,将接收的数据复制出来使用即可,同时释放自定义的串口空闲信号量,以便其它任务可用及时获取串口接收到的数据。

//=======================================

2.3 串口配置与测试任务

2.3.1 串口配置

基础的GPIO配置,以及串口空闲中断配置,并调用上面的串口DMA发送与接收配置。

//=======================================

2.3.2 测试任务

创建DMA发送完成信号量和串口空闲信号量,并先释放DMA发送完成信号量,用于第一次DMA发送时获取信号量。然后测试两条DMA发送不定长字符串,最后测试DMA接收不定长字符串。

//打印任务函数(测试任务)

3 实验结果

通过串口助手,可以先接收到DMA发送的两个字符串(第一条hello是测试串口的,不是DMA发的),然后通过串口调试助手发送两次nice to meet you,测试DMA接收。

hello
ma nong ai xue xi
xxpcb.github.io
receive:nice to meet you
receive:nice to meet you

完整工程代码已保存至GitHub:

https://github.com/xxpcb/FreeRTOS-STM32F407-examples​github.com

觉得文章有用,可以关注我哟~

stm32cubemx是一个用于生成STM32微控制器初始化代码的工具,而FreeRTOS是一个实时操作系统,串口DMA(直接存储器访问)是一种在数据传输时减少CPU负荷和提高效率的方式。当使用STM32CubeMX结合FreeRTOS来接收不定数据时,可以按照以下步骤进行操作。 首先,在CubeMX中配置串口DMA的初始化参数,使其支持不定数据接收。可以选择需要的串口和对应的DMA通道,配置串口的波特率、数据位和停止位等参数。然后,配置DMA以支持循环传输和变化长度数据接收。 其次,生成初始化代码并在FreeRTOS中集成。CubeMX可以生成针对FreeRTOS的初始化代码,将配置好的串口DMA初始化函数添加到FreeRTOS任务中,并在任务中实现数据接收的逻辑。可以利用FreeRTOS提供的任务管理和事件控制功能,让串口DMA在后台接收数据,同时不影响其他任务的运行。 最后,根据实际需求处理不定数据。在串口DMA接收到数据后,根据数据长度进行相应的处理,可以通过消息队列或者信号量将数据传递给其他任务进行后续处理,也可以在接收完成后发送一个事件信号通知其他任务进行处理。需要根据具体需求来设计数据处理的流程,确保数据能够被准确地接收和处理。 总之,在使用STM32CubeMX和FreeRTOS进行串口DMA接收不定数据时,需要合理配置串口DMA参数,并在FreeRTOS任务中实现数据接收和处理的逻辑,以实现高效、稳定地数据传输和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值