STM32F103 USART2/USART3 中断设置问题
在STM32F10x的BSP中的usart.c里面:
static void NVIC_Configuration(struct stm32_uart* uart)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = uart->irq;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
注释说的是: Enable the USART1 Interrupt
但是据我分析,调用这个函数同样可以使能USART2及USART3,就如同rt_hw_usart_init()这个函数里面调用的那样:
NVIC_Configuration(&uart2);
NVIC_Configuration(&uart3);
但结果却是只有USART1能响应中断,USART2与USART3均不能响应中断。
三个串口都有选择使用:
/* USART driver select. */
#define RT_USING_UART1
#define RT_USING_UART2
#define RT_USING_UART3
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
有看到是没有使能这个中断,但是在RTT中,这个函数封装到了stm32_control(struct rt_serial_device *serial, int cmd, void *arg)这个函数中。
stm32_control又在stm32_uart_ops结构体里面。
到底该用那个函数来设置才符合RTT编程规范呢? dalarang 发表于 2016-1-8 10:23
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
有看到是没有使能这个中断,但是在RTT中,这个函数封装到了stm32_control(struct rt_serial_device *serial, int cmd, void *arg)这个函数中。
stm32_control又在stm32_uart_ops结构体里面。
到底该用那个函数来设置才符合RTT编程规范呢? 本帖最后由 yangwc 于 2016-1-8 10:49 编辑
应该是用:stm32_control(&serial2, RT_DEVICE_CTRL_SET_INT, 0); 奇怪,为什么在注册这个设备的时候没有将中断打开呢?
/* register UART1 device */
rt_hw_serial_register(&serial2, "uart2",
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
uart);
页:
[1]