嵌入式技术论坛
直播中

lalajie

8年用户 1153经验值
擅长:模拟技术 存储技术
私信 关注
[经验]

RS485组件无法正常接收数据的原因是什么?如何解决

RT-Thread-rt_device.user_data 分析: 大部分uart驱动都不安全
问题描述:在使用该组件的时候,不能正常发送数据
硬件GD32F303

问题:在接收数据的时候,不能正常接收数据。但是在发送数据的时候可以正常发送。
原因定位:

int rs485_config(rs485_inst_t * hinst, int baudrate, int databits, int parity, int stopbits)
{
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
if (hinst == RT_NULL)
{
LOG_E("rs485 config fail. hinst is NULL.");
return(-RT_ERROR);
}
hinst->byte_tmo = rs485_cal_byte_tmo(baudrate);
config.baud_rate = baudrate; //9600
config.data_bits = databits; //8
config.parity = parity; //0
config.stop_bits = STOP_BITS_1; //1
config.bufsz = 128; //修改缓冲区 buff size 为 128
rt_device_control(hinst->serial, RT_DEVICE_CTRL_CONFIG, &config);
// rt_kprintf("baudrate=%d,databits=%d,parity=%d,stopbits=%d",baudrate,databits,parity,stopbits);
// /* step2:修改串口配置参数 */
// config.baud_rate = BAUD_RATE_9600; //修改波特率为 9600
// config.data_bits = DATA_BITS_8; //数据位 8
// config.stop_bits = STOP_BITS_1; //停止位 1
// config.bufsz = 128; //修改缓冲区 buff size 为 128
// config.parity = PARITY_NONE; //无奇偶校验位
//
// /* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
// rt_device_control(hinst->serial, RT_DEVICE_CTRL_CONFIG, &config);
return(RT_EOK);
}
在该函数里面,其中原来的stop_bits停止位为1位,但是使用GD32的芯片的时候,停止位为1位的值为0,而STM32的值为1,所以接收数据错误。
下面注释的是正常值。

原作者:于周斐

更多回帖

发帖
×
20
完善资料,
赚取积分