rt_err_t thread;
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; //初始化配置参数
rt_sem_init(&rx485_sem, “rx485_sem”, 0, RT_IPC_FLAG_FIFO); //初始化信号量
config.baud_rate = BAUD_RATE_9600;
config.data_bits = DATA_BITS_9;
config.parity = PARITY_EVEN;
config.bufsz = 128;
dev_rs485 = rt_device_find(UART485_NAME);
if(rt_device_control(dev_rs485,RT_DEVICE_CTRL_CONFIG,&config) == RT_EOK)
rt_kprintf(“控制成功
“);
//drv_485_bsp_set(device_set_parameter.RS485_bsp);
rt_device_open(dev_rs485,RT_DEVICE_FLAG_INT_RX);
rt_device_set_rx_indicate(dev_rs485, uart485_callback); //设置接收回调函数
这是我初始化的串口波特率 9600,对的!
然后
void drv_485_bsp_set(uint8_t mode)
{
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; //初始化配置参数
config.data_bits = DATA_BITS_9;
config.baud_rate = BAUD_RATE_9600;
config.parity = PARITY_EVEN;
config.bufsz = 128;
dev_rs485 = rt_device_find(UART485_NAME);
if(rt_device_close(dev_rs485) == RT_EOK)
rt_kprintf(“关闭成功
“);
dev_rs485 = rt_device_find(UART485_NAME);
if(mode == 0)
config.baud_rate = BAUD_RATE_9600;
else if(mode == 1)
config.baud_rate = BAUD_RATE_4800;
else if(mode == 2)
config.baud_rate = BAUD_RATE_19200;
else if(mode == 3)
config.baud_rate = BAUD_RATE_38400;
else if(mode == 4)
config.baud_rate = BAUD_RATE_57600;
else if(mode == 5)
config.baud_rate = BAUD_RATE_115200;
if(rt_device_control(dev_rs485,RT_DEVICE_CTRL_CONFIG,&config) == RT_EOK)
rt_kprintf(“控制成功
“);
rt_device_open(dev_rs485,RT_DEVICE_FLAG_INT_RX);
rt_device_set_rx_indicate(dev_rs485, uart485_callback); //设置接收回调函数
}
我修改了波特率,但是无效,串口还是好的,波特率还是9600!
这是什么情况啊,哪里没设置对吗? 操作前也先关闭了设备!
drv_485_bsp_set函数中调用顺序:
rt_device_find
rt_device_close
rt_device_find
rt_device_control
rt_device_open
顺序错了吧,close之后find,open了才能control
close之后,前面对位,校验的操作在后面就丢失了,如果你只是修改波特率,为什么不如下操作:
void drv_485_bsp_set(uint8_t mode)
{
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; //初始化配置参数
config.data_bits = DATA_BITS_9;
config.baud_rate = BAUD_RATE_9600;
config.parity = PARITY_EVEN;
config.bufsz = 128;
if(mode == 0)
config.baud_rate = BAUD_RATE_9600;
else if(mode == 1)
config.baud_rate = BAUD_RATE_4800;
else if(mode == 2)
config.baud_rate = BAUD_RATE_19200;
else if(mode == 3)
config.baud_rate = BAUD_RATE_38400;
else if(mode == 4)
config.baud_rate = BAUD_RATE_57600;
else if(mode == 5)
config.baud_rate = BAUD_RATE_115200;
dev_rs485 = rt_device_find(UART485_NAME);
if(rt_device_control(dev_rs485,RT_DEVICE_CTRL_CONFIG,&config) == RT_EOK)
rt_kprintf(“控制成功\n”);
rt_device_open(dev_rs485,RT_DEVICE_FLAG_INT_RX);
rt_device_set_rx_indicate(dev_rs485, uart485_callback); //设置接收回调函数
}
这样不就可以了,为什么要先close了呢?
open串口设备之后,缓冲区大小不可再进行更改。但除过缓冲区之外的其他参数,在 open 设备前 / 后,均可进行更改。请查阅文档:https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/