标题: STM32F103C8T6采集不到modbus温湿度数据 [打印本页]

作者: blackgrape2012    时间: 2024-12-9 18:21
标题: STM32F103C8T6采集不到modbus温湿度数据
本帖最后由 blackgrape2012 于 2024-12-11 16:21 编辑

将温湿度传感器通过485转USB连接到PC用自带的测试软件可以测量到温湿度,发送请求码是8字节16进制01 04 00 00 00 02 71 CB,能够获得返回值。
用串口调试助手发送01 04 00 00 00 02 71 CB请求码也可以获得传感器上传的数据。
想用STM32F103C8T6串口接ttl转485然后接温湿度传感器,发送8字节请求码后收到返回的9字节16进制只有第一个字节是0x01,其它都是0,弄了好几天不知道什么地方出问题了,烦请帮忙看看。

附件里有源程序,用STM32CubeMX生成的,不胜感谢!








USART_TEST.7z (293.67 KB, 下载次数: 0)







作者: 小屋忆流年    时间: 2024-12-11 15:30
用空闲中断去接收数据看看
作者: blackgrape2012    时间: 2024-12-11 16:21
小屋忆流年 发表于 2024-12-11 15:30
用空闲中断去接收数据看看

好的,谢谢!
作者: lose2836    时间: 2024-12-11 22:17
说下个人看法。先确认你发出的数据时正确的,然后再确认接收数据。建议接上逻辑分析仪,看看485总线上的数据究竟是个啥。简单可以用modbus slave+usb485模拟从机,可以监测单片机实际发出的请求数据。
作者: xzh5508    时间: 2024-12-12 08:17
中间等待100ms,肯定接收不到,改成中断接收,应该就没我问题了
作者: 123321355    时间: 2024-12-13 17:10
我也做了  用串口中断接收就行啊
作者: 123321355    时间: 2024-12-13 17:11
我也做了啊   单片机发完通信码 延时一下  用串口中断接收就行
作者: blackgrape2012    时间: 2024-12-14 17:26
谢谢各位指点,问题解决了。就是接收也用HAL_MAX_DELAY
HAL_UART_Transmit(&huart1,dataTrnd,8,HAL_MAX_DELAY);//请求                       
HAL_UART_Receive(&huart1,dataRcyd,9,HAL_MAX_DELAY);//接收
HAL_Delay(500);
其实之前也用HAL_MAX_DELAY接收过,但当时没接显示屏不知道结果,用调试模式一直停在接收的那行不往下运行,观察器变量也没有数值。
       

作者: blackgrape2012    时间: 2024-12-15 13:24
之后又试了不同参数,发送和接收超时时间可以设定30以上,如果是30以下,有的数据就接收不全。


作者: blackgrape2012    时间: 2024-12-15 13:26
数据处理后效果







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1