注册会员
签到天数: 3 天
[LV.2]偶尔看看I
132
0
10
IP:广东省 广电网
调用 rt_device_read() 只能固定接收一个字节 代码如下
if(modbus_serial) { rt_device_open(modbus_serial,RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX); rec_len = rt_device_read(modbus_serial, -1, USART5_RX_BUF, 8); if(rec_len > 6) { modebus_proc(USART5_RX_BUF, rec_len, USART5_TX_BUF); } rt_device_close(modbus_serial); }
用串口助手发送数据 01 02 03 04 05 06 07,调试下发现rec_len永远都是1,if(rec_len > 6)也一直进不去
收藏0回复 显示全部楼层 举报
签到天数: 4 天
IP:中国 中国广播电视网络有限公司
能的原因是您打开设备的函数参数与注册设备函数参数不一致。您需要确保两者的参数是相同的,例如:
/* register UART1 device */
rt_hw_serial_register (& serial1, “uart1”, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_DMA_RX, uart);
/* open UART1 device */
rt_device_open(modbus_serial, RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_DMA_RX);
回复 显示全部楼层 举报
签到天数: 1 天
[LV.1]初来乍到
问题可能出在调用rt_device_read()函数时的参数设置上。rt_device_read()函数的第三个参数是缓冲区指针,表示接收到的数据将被存储在这个缓冲区中。而第二个参数是期望接收的字节数,如果设置为-1,则表示接收任意数量的字节直到超时。所以,可以尝试修改代码如下:
rt_device_read()
rec_len = rt_device_read(modbus_serial, USART5_RX_BUF, sizeof(USART5_RX_BUF));
这样设置后,rt_device_read()函数会一直等待接收到sizeof(USART5_RX_BUF)字节的数据,或者超时。
sizeof(USART5_RX_BUF)
另外,还需要确认一下上位机发送数据的方式和速率是否正确,以及串口配置是否与上位机一致。
发表回复
手机版|小黑屋|国产电子社区 ( 沪ICP备2023018578号-1| 苏公网安备 32011102010465号 )|网站地图
苏公网安备 32011102010465号
GMT+8, 2025-2-13 08:40 , Processed in 0.062118 second(s), 26 queries , MemCached On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.