打印
[技术问答]

为什么NUC123单片机无法进入串口接收中断处理程序

[复制链接]
891|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
flycamelaaa|  楼主 | 2021-4-6 11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我参考NUC123Z的BSP使用串口中断接收功能,但是不知道为什么串口有数据过来但是一直如法进入串口中断处理函数UART1_IRQHandler()。我的串口初始化函数和串口中断处理函数如下。
确认单片机发送数据是正常的。,但是接收不能进入UART1_IRQHandler()。因为我在UART1_IRQHandler()中加了一条LED闪灯的语句LEDG_INVERSE();但是用PC无论怎么发数据灯就是不闪,用示波器测量单片机RX端有数据过来,说明硬件没有问题。为什么不能进入UART1_IRQHandler(),请高人指点迷津,谢谢!
void UartInit(void)
{
    STR_UART_T sParam;

    SYS_RESET_IP2(SYS_RST_UART1);
       
    outpw(&SYS->GPB_MFP, inpw(&SYS->GPB_MFP) | (0x2<<4));
    outpw(&SYS->ALT_MFP, inpw(&SYS->ALT_MFP) & ~(0x2<<15));
       
    sParam.u32ClkSrc              = CLK_UART_HXT;
    sParam.u32ClkDiv              = 1;
    sParam.u32ClkFreq              = __XTAL;               
    sParam.u32BaudRate               = 115200;
    sParam.u32cDataBits       = UART_WORD_LEN_8;
    sParam.u32cStopBits       = UART_STOP_BIT_1;
    sParam.u32cParity                   = UART_PARITY_NONE;
    sParam.u32cRxTriggerLevel = UART_FCR_RFITL_1BYTE;
    sParam.u32BaudMode        = UART_BAUD_MODE2;
    sParam.u8RxTimeOut              = 0;
    DrvUART_Init(UART1, &sParam);

        DrvUART_EnableInt(UART1, UART_IER_RDA_IEN | UART_IER_RTO_IEN |UART_IER_RLS_IEN);
        NVIC_EnableIRQ(UART1_IRQn);
}

void UART1_IRQHandler(void)
{
        uint8_t rx_data = 0;
        uint32_t u32IntSts = UART1->ISR;
       
        LEDG_INVERSE();
       
        if(u32IntSts & UART_ISR_RDA_INT_Msk)
        {
                while(UART_GET_RDA_IF(UART1))

                {
                        rx_data = UART_READ(UART1);
                }
       
        }       
}

使用特权

评论回复
沙发
duo点| | 2021-4-6 16:47 | 只看该作者
代码看起来,没有把apb 上面 uart1 clock source 打开
也没有选择时钟来源

使用特权

评论回复
板凳
伊桑黑| | 2021-4-6 23:49 | 只看该作者
还需要再确认一下相关的寄存器设置

使用特权

评论回复
地板
二次圆根| | 2021-4-6 23:57 | 只看该作者
额对的 时钟来源貌似是不太明朗 可以再确认一下

使用特权

评论回复
5
Jobs的梨子| | 2021-4-8 23:52 | 只看该作者
楼主解决了吗 确实想了解一下楼主怎么解决这个问题的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

667

主题

2844

帖子

0

粉丝