STM32
登录
直播中
李超
7年用户
1349经验值
私信
关注
[问答]
串口接收接收不定长数据的具体编程要点是什么?
开启该帖子的消息推送
串口接收
如何利用IDLE判断一帧数据是否接收成功?
串口接收接收不定长数据的具体编程要点是什么?
回帖
(1)
陈舒斌
2021-12-9 11:04:34
平台:STM32ZET6(核心板)+ST-LINK/V2+USB串口线+SIM800C+杜邦线(用于连接SIM800C和STM32开发板)
串口接收不定长数据采取的思路是:在STM32内存中设置一个缓存区(数组),在中断中将数据逐个放入到缓存区中,然后判断一帧数据是否接收完成。
关键点:如何判断一帧数据是否接收成功?
思路:利用IDLE中断判断接收一帧数据完成,其中IDLE中断是串口接收到一帧数据之后发生的中断,这里的一帧数据就是一次发送来的数据,可以是一个字节或者更多字节,也称一包数据。
用到中断就需要配置中断,然后再在其中断处理函数中进行处理。IDLE中断和RXNE中断的区别是接收到一字节数据就发生RXNE中断,而接收到一帧数据就发生IDLE中断。RXNE接收数据中断的清除,只要将接收到的一个字节读出来即可,IDLE中断的清除,F1系列的单片机,需要先读SR寄存器,再读DR寄存器。具体内容以手册为准。
串口接收接收不定长数据的具体编程要点:
1. 使能帧接收中断(位于串口配置函数USART_Config中):
2.编写中断处理函数,其中DEBUG_ReceiveState,记录是否接收到一帧数据完成,如果为1,代表接收完一帧数据,如果为0,代表尚未接收完一帧数据。DEBUG_RxCounter,记录接收的一帧数据的字节数。USART_MAX_RECV_LEN,是一个代表接收最大字节数的宏(这里设置为1024)。缓存数组DEBUG_USART_RX_BUF[USART_MAX_RECV_LEN],存放接收到的数据。
3.处理接收到的数据,其中DEBUG_ReceiveState,记录是否接收到一帧数据完成,如果为1,代表接收完一帧数据,如果为0,代表尚未接收完一帧数据。因此,在主函数里,我们可以循环测试该标记是否为1,查询接收状态,如果接受完成,再做进一步处理,这里的处理是先回显,输出到调试助手,再将内容发送到SIM800C。效果:电脑通过直接串口1发送AT指令,单片机接收串口1的AT指令到缓存数组DEBUG_USART_RX_BUF[USART_MAX_RECV_LEN]中,单片机将AT指令发送给串口2,即SIM800C工作串口,从而控制SIM800C工作。
平台:STM32ZET6(核心板)+ST-LINK/V2+USB串口线+SIM800C+杜邦线(用于连接SIM800C和STM32开发板)
串口接收不定长数据采取的思路是:在STM32内存中设置一个缓存区(数组),在中断中将数据逐个放入到缓存区中,然后判断一帧数据是否接收完成。
关键点:如何判断一帧数据是否接收成功?
思路:利用IDLE中断判断接收一帧数据完成,其中IDLE中断是串口接收到一帧数据之后发生的中断,这里的一帧数据就是一次发送来的数据,可以是一个字节或者更多字节,也称一包数据。
用到中断就需要配置中断,然后再在其中断处理函数中进行处理。IDLE中断和RXNE中断的区别是接收到一字节数据就发生RXNE中断,而接收到一帧数据就发生IDLE中断。RXNE接收数据中断的清除,只要将接收到的一个字节读出来即可,IDLE中断的清除,F1系列的单片机,需要先读SR寄存器,再读DR寄存器。具体内容以手册为准。
串口接收接收不定长数据的具体编程要点:
1. 使能帧接收中断(位于串口配置函数USART_Config中):
2.编写中断处理函数,其中DEBUG_ReceiveState,记录是否接收到一帧数据完成,如果为1,代表接收完一帧数据,如果为0,代表尚未接收完一帧数据。DEBUG_RxCounter,记录接收的一帧数据的字节数。USART_MAX_RECV_LEN,是一个代表接收最大字节数的宏(这里设置为1024)。缓存数组DEBUG_USART_RX_BUF[USART_MAX_RECV_LEN],存放接收到的数据。
3.处理接收到的数据,其中DEBUG_ReceiveState,记录是否接收到一帧数据完成,如果为1,代表接收完一帧数据,如果为0,代表尚未接收完一帧数据。因此,在主函数里,我们可以循环测试该标记是否为1,查询接收状态,如果接受完成,再做进一步处理,这里的处理是先回显,输出到调试助手,再将内容发送到SIM800C。效果:电脑通过直接串口1发送AT指令,单片机接收串口1的AT指令到缓存数组DEBUG_USART_RX_BUF[USART_MAX_RECV_LEN]中,单片机将AT指令发送给串口2,即SIM800C工作串口,从而控制SIM800C工作。
举报
更多回帖
rotate(-90deg);
回复
相关问答
串口接收
不定长
数据
接收
的原理是什么?怎么实现
串口
数据
的
不定长
接收
?
2021-11-16
1821
串口
DMA+中断的形式如何
接收
不定长
的
数据
2021-12-08
758
如何利用IDLE中断进行
串口
不定长
数据
的
接收
呢
2021-12-08
1286
如何实现
串口
DMA+中断的形式
接收
不定长
的
数据
接收
?
2022-02-18
878
DMA如何
接收
不定长
的
数据
?
2020-12-21
1888
stm32
串口
怎么用DMA
接收
不定长
数据
?
2018-08-21
4095
cube库
串口
接收
不定长
数据
2019-04-18
3072
请问STM32 DMA
串口
接收
不定长
数据
的过程是怎样的?
2022-02-18
856
stm32如何使用两路
串口
及
接收
不定长
数据
?
2021-12-13
719
串口
怎么才能实现
接收
不定长
数据
?
2023-10-24
192
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分