完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
STM32F407ZGT6使用串口通信发送指令给传感器,让传感器返回测得的数据。 1.过程 大家看我这个程序,在main函数前面我定义了一个read_instruction数组,存放读取传感器的指令,在while循环中有一个按键检测,当按下key0的时候,单片机发送这个指令给传感器,理论上传感器接收到指令会返回测量的数据,但switch下面的这个if语句跳过了,说明if(USART_RX_STA&0x8000)没满足条件,也就是USART_RX_STA没有变成1。 首先确认我传感器没问题,如下图: 用串口助手发送16进制11 02 07 DB给传感器返回这串数据(共56个数据),所以传感器没问题。 其次是代码有没有问题,如下图: 按下单片机key0,串口助手接收到单片机发送的11 02 0B 07 DB,说明发送代码没问题。 下面看接收代码: 单片机RX接收到串口助手发的11 02 0B 07 DB会触发中断,这个USART_RX_STA寄存器就置1了(当然发送任何数USART_RX_STA都会被置1,因为只要接收就触发中断),所以LED1就被点亮了。 总结:1、传感器被我用串口助手验证了没问题; 2、单片机的发送程序也用串口助手验证了,能发送; 3、单片机接收函数用串口助手验证了,只要接收到就点亮LED1; 所以就是单片机RX接收传感器发送的数据USART_RX_STA寄存器不会置1,这到底是什么原因? 2.看串口中断函数 打开usart.c文件,找到下图这个函数: 函数就是RX有数据进来就中断,开始读数据,但是这串数据必须要以0x0d和0x0a结尾,用串口助手发的数据默认被加上了0x0d 0x0a,所以你用串口助手发任意的数这个函数都会把USART_RX_STA寄存器置1,而传感器发送给单片机RX的数据不是以0x0d 0x0a结尾就不会置1(虽然触发中断了,但数据不是0x0d 0x0a结尾呀)。 因此,想让USART_RX_STA寄存器置1,就需要在RX接收到的数据后面加上0x0d 0x0a,但传感器返回的数据不是我能定的呀,结尾没法加呀。 所以只能改这个中断函数: 我就直接把这个函数注释掉,自己写判断让USART_RX_STA寄存器置1,由于传感器返回的数据是56个,所以定义个标志flag2,当它等于56的时候就把USART_RX_STA寄存器置1,说明数据接收完了。然后下面的用液晶显示的函数也就实现了hhh.。。. 总结 以上是在调代码的时候遇到的问题,第一次发博客,希望对大家有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 09:20 , Processed in 0.861877 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号