关于RT-Thread多串口,不能使用或中断冲突卡死的问题

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平台下的所有内容即文件的看法,我们在操作某个设备时第一个动作就是要打开,只有打开才能使用,也不会和控制台输出的串口起冲突。

话语并不太专业,供自我以后参考,有兴趣的伙伴也可以参考,看能不能给你啥解决问题的灵感。

你可能感兴趣的:(关于RT-Thread多串口,不能使用或中断冲突卡死的问题)