MPU:STM32F103RCT6 使用正点原子编写的RTT的串口驱动包,工程用到的串口是USART1和UART5,USART1作为控制台输出,UART5作为其他外设的通信。
首先来解释一下下面一句,这句讲的是设置哪个串口作为控制台输出,但是只允许其中一个串口能够使用。
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
rt_console_set_device(RT_CONSOLE_UART1DEVICE_NAME);
#endif
我在调试过程中遇到,当我将UART5也设置成控制台时,发现串口的发送都能成功,但是接收的话,根据设置控制台输出的串口顺序有关系,放在后面设置的能够进入接收中断,放在前面的则不能进入接收中断。这里是不要添加其他设备的。
解决方法,我在rt_hw_usart_init这个函数中这样编写的。
前面的代码省略...
uart5->parent.init = rt_uart_init;
uart5->parent.open = rt_uart_open;
uart5->parent.close = rt_uart_close;
uart5->parent.read = rt_uart_read;
uart5->parent.write = rt_uart_write;
uart5->parent.control = RT_NULL;
uart5->parent.user_data = RT_NULL;
uart5nvic_configuration(uart5);
***rt_device_register(&uart5->parent, "uart5", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX );
//打开串口5
if(rt_device_find("uart5")!=RT_NULL)
{
rt_device_open(rt_device_find("uart5"), RT_DEVICE_OFLAG_RDWR);
}***
关键看这里,其实不过是Linux平台下的所有内容即文件的看法,我们在操作某个设备时第一个动作就是要打开,只有打开才能使用,也不会和控制台输出的串口起冲突。
话语并不太专业,供自我以后参考,有兴趣的伙伴也可以参考,看能不能给你啥解决问题的灵感。