单片机学习小组
登录
直播中
刀马旦
11年用户
702经验值
私信
关注
如何实现串口DMA+中断的形式接收不定长的数据接收?
开启该帖子的消息推送
单片机
串口通信
物联网
如何实现串口DMA+中断的形式接收不定长的数据接收?
回帖
(1)
席毖庸
2022-2-18 10:58:40
stm32cube mx作为ST官方生成固件极大的帮助了我们,不再为移植底层寄存器而浪费太多时间,但是在提高效率的同时,HAL库中还有一些莫名其妙的坑,需要我们自行解决的。对于只用中断接收数据不定长数据,作者还未使用过,还望大家能分享一下,本文只做简单的串口DMA+中断的形式接收不定长的数据接收,至于应用的话可以在这个的基础上自行发挥。
一目了然,这里开启RCC基本的高/低速外部时钟(HSE/LSE),调试的话使用的是SWO调试接口,接着就是使能我们所需要使用到的串口啦,这里使用的是USART2。
这里只需要注意两点:
1.串口要设置DMA接收
2.打开串口中断
然后直接生成KEIL文件就可以了。
首先第一步申请所需要使用的变量,第一个是接收缓冲区,接收缓冲区大小可以自己定义。第二个是串口串口接收完成标记,第三个是串口接收数据长度,注意程序放置的位置,否则在重新生成的时候配置工具会将不符合规范的程序段给删除。
usart.c文件uint8_t rx_buffer[BUFFER_SIZE]={0};/*串口接收缓冲区*/uint8_t recv_end_flag=0;/*串口接收完成标记*/uint16_t rx_len=0;/*串口接收数据长度*/ usart.h文件#define BUFFER_SIZE 256extern uint8_t rx_buffer[];extern uint8_t recv_end_flag;extern uint16_t rx_len;
然后第二步是在串口的中断函数中添加自己的代码。注意这里的读取串口剩余数量寄存器NDTR,不同的芯片这个寄存器是不同的,需要注意区分,有的芯片是CNDTR。这个结构体在stm32f405.h中的DMA控制器结构体函数。
最后一步,在main函数中添加上述的程序段,可以通过串口2接收串口工具发送的数据并将数据发送回去。
这样就完成啦!这只是个基础的程序,作者将这个作为基础开发过定位模块的数据读取和解析。DMA+中断的方式在串口需要在短时间内频繁的接收大量数据上还是非常好用的。
stm32cube mx作为ST官方生成固件极大的帮助了我们,不再为移植底层寄存器而浪费太多时间,但是在提高效率的同时,HAL库中还有一些莫名其妙的坑,需要我们自行解决的。对于只用中断接收数据不定长数据,作者还未使用过,还望大家能分享一下,本文只做简单的串口DMA+中断的形式接收不定长的数据接收,至于应用的话可以在这个的基础上自行发挥。
一目了然,这里开启RCC基本的高/低速外部时钟(HSE/LSE),调试的话使用的是SWO调试接口,接着就是使能我们所需要使用到的串口啦,这里使用的是USART2。
这里只需要注意两点:
1.串口要设置DMA接收
2.打开串口中断
然后直接生成KEIL文件就可以了。
首先第一步申请所需要使用的变量,第一个是接收缓冲区,接收缓冲区大小可以自己定义。第二个是串口串口接收完成标记,第三个是串口接收数据长度,注意程序放置的位置,否则在重新生成的时候配置工具会将不符合规范的程序段给删除。
usart.c文件uint8_t rx_buffer[BUFFER_SIZE]={0};/*串口接收缓冲区*/uint8_t recv_end_flag=0;/*串口接收完成标记*/uint16_t rx_len=0;/*串口接收数据长度*/ usart.h文件#define BUFFER_SIZE 256extern uint8_t rx_buffer[];extern uint8_t recv_end_flag;extern uint16_t rx_len;
然后第二步是在串口的中断函数中添加自己的代码。注意这里的读取串口剩余数量寄存器NDTR,不同的芯片这个寄存器是不同的,需要注意区分,有的芯片是CNDTR。这个结构体在stm32f405.h中的DMA控制器结构体函数。
最后一步,在main函数中添加上述的程序段,可以通过串口2接收串口工具发送的数据并将数据发送回去。
这样就完成啦!这只是个基础的程序,作者将这个作为基础开发过定位模块的数据读取和解析。DMA+中断的方式在串口需要在短时间内频繁的接收大量数据上还是非常好用的。
举报
更多回帖
rotate(-90deg);
回复
相关问答
单片机
串口通信
物联网
串口
DMA+
中断
的
形式
如何
接收
不定长
的
数据
2021-12-08
684
stm32
串口
怎么用
DMA
接收
不定长
数据
?
2018-08-21
4000
不定长
数据
接收
的原理是什么?怎么
实现
串口
数据
的
不定长
接收
?
2021-11-16
1633
DMA
如何
接收
不定长
的
数据
?
2020-12-21
1796
可以用
串口
空闲
中断
+
DMA
来
实现
串口
接收
不定长
数据
吗?
2023-03-07
445
STM32HAL库
串口
空闲
中断
+
DMA
是如何去
实现
串口
接收
不定长
数据
的
2021-11-16
1371
如何利用IDLE
中断
进行
串口
不定长
数据
的
接收
呢
2021-12-08
1202
请问
串口
DMA+
环形缓冲区如何
实现
不定长
度的
数据
收发?
2021-12-08
642
如何利用STM32的空闲
中断
来
实现
不定长
数据
的
接收
?
2021-12-06
1012
stm32
串口
怎么用
DMA
接收
不定长
数据
,求大神点拨
2018-08-16
4514
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分