嵌入式学习小组
直播中

周棠亨

9年用户 1161经验值
擅长:可编程逻辑 电源/新能源
私信 关注

uart中断需要启动NVIC IRQn是为什么?如何解决?

NUC230_240_Series_BSP_CMSIS_V3.01.004\SampleCode\StdDriver\UART_TxRx_Function官方范例中

此范例最后只启动uart的中断,没启动NVIC的IRQ 中断请求,中断功能正常,想问看看各位大大为何可以如此写?谢谢大家!

    /* Enable Interrupt and install the call back function */

    UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk | UART_IER_TOUT_IEN_Msk));

    while(g_bWait);
/* Enable Interrupt and install the call back function */

    UART_EnableInt(UART0, (UART_IER_RDA_IEN_Msk | UART_IER_THRE_IEN_Msk | UART_IER_TOUT_IEN_Msk));

    NVIC_EnableIRQ(UART02_IRQn);

    while(g_bWait);




回帖(1)

niu!kf

2024-5-21 17:30:03
在使用 UART 中断的时候,需要启动 NVIC IRQn 是因为需要将 UART 中断的优先级设置为高于其他中断。这是因为当多个中断同时触发时,优先级较高的中断会被先响应。

解决方法是在代码中添加启动 NVIC IRQn 的语句。在 NUC230_240_Series_BSP_CMSIS_V3.01.004SampleCodeStdDriveruART_TxRx_Function 官方范例中没有启动 NVIC 中断请求,是因为该范例中主要演示 UART 的传输和接收功能,没有涉及多个中断同时触发的情况,因此可以不需要启动 NVIC 中断请求。

但是建议在实际应用中启动 NVIC 中断请求,以确保程序的稳定性和正确性。启动 NVIC IRQn 的语句可以参考如下代码:

NVIC_EnableIRQ(UART0_IRQn);  //启动UART0中断请求

其中 UART0_IRQn 是 UART0 的中断号。需要根据具体的情况选择正确的中断号,确保启动的是对应的中断。
举报

更多回帖

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