完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
平台: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工作。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1780 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1081 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1679 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
596浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
556浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 16:34 , Processed in 1.004781 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号