[技术问答] 请问M031的串口超时中断为何无法触发?

[复制链接]
1568|5
 楼主| stormwind123 发表于 2025-3-6 12:03 | 显示全部楼层 |阅读模式

9600-N-8-2;


    UART_Open(UART2, 9600);
    /* Set UART line configuration */
    UART2->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_2;



    UART2->FIFO &= ~UART_FIFO_RFITL_4BYTES;
    UART2->FIFO |= UART_FIFO_RFITL_8BYTES;
    UART_SetTimeoutCnt(UART2, 100);


    UART_EnableInt(UART2, UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk);

    NVIC_EnableIRQ(UART02_IRQn);


void UART02_IRQHandler(void)
{
    uint8_t UART2_u8InChar = 0xFF;

    if (UART_GET_INT_FLAG(UART2, UART_INTSTS_RDAINT_Msk))
    {
        while(!UART_GET_RX_EMPTY(UART2))
            UART2_BUF[UART2_cnt++] = UART_READ(UART2);
        printf("UART_INTSTS_RDAINT_Msk!\n");//这里能触发;

    }

    if (UART_GET_INT_FLAG(UART2, UART_INTSTS_RXTOIF_Msk))
    {
        while(!UART_GET_RX_EMPTY(UART2))
            UART2_BUF[UART2_cnt++] = UART_READ(UART2);
        UART2_data_true = 1;
        printf("UART_INTSTS_RXTOIF_Msk!\n");//这里并不能触发,请问是为何?
               
    }

}
奔跑的牛 发表于 2025-3-7 10:42 | 显示全部楼层
参考牛卧堂上有一样问题 已经解答了
与人间浪漫 发表于 2025-8-28 12:35 | 显示全部楼层
可能因超时时间未正确配置、中断使能未开启、串口时钟未使能,或缓冲区状态不符合触发条件导致。
少女诗篇 发表于 2025-9-14 14:14 | 显示全部楼层
M031 串口超时中断无法触发,可能是未正确配置超时计数寄存器(如设置超时时间)、未使能超时中断位,或串口处于错误状态(如帧错、奇偶校验错)。需检查超时参数是否匹配波特率,确保中断使能位和全局中断开启,排查代码中是否误清中断标志。
牛奶秋刀鱼 发表于 2025-9-23 17:49 | 显示全部楼层
M031 串口超时中断无法触发可能原因:1. 未正确配置超时计数器(如超时时间寄存器设置为 0);2. 中断使能位未开启(UART_IER 的超时中断位未置 1);3. 未使能全局中断;4. 数据未满足超时条件(如持续接收数据未停顿)。需检查寄存器配置、中断向量表映射及触发条件是否满足。
玫瑰凋零日记 发表于 2025-10-4 16:19 | 显示全部楼层
M031 串口超时中断无法触发,可能是超时计数器未使能(需配置 UART_TOR 寄存器)、超时时间设置不合理(需大于帧间隔)、未开启对应中断使能位(UART_IER 的 TOIE 位),或串口未处于接收就绪状态。检查寄存器配置和中断向量表映射是否正确。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

605

主题

3747

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部