牛卧堂MCU技术交流

标题: 请问M031的串口超时中断为何无法触发? [打印本页]

作者: 匿名    时间: 2025-2-28 15:56
标题: 请问M031的串口超时中断为何无法触发?
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");//这里并不能触发,请问是为何?
               
    }

}



作者: chrishu    时间: 7 天前
接收阈值超时中断,是当RX FIFO里有数据,且数据个数没有达到阈值个数时,超时后产生的中断。
比如设置接收阈值为8字节,一次收到5字节数据后,就不再收到数据就会产生接收阈值超时中断。
作者: 匿名    时间: 7 天前
chrishu 发表于 2025-3-3 10:23
接收阈值超时中断,是当RX FIFO里有数据,且数据个数没有达到阈值个数时,超时后产生的中断。
比如设置接收 ...

请问上面的程序,写法有问题吗?
另外是否可以给一个例程的链接?
作者: chrishu    时间: 7 天前
UART2的FIFO只有1个字节,所以没有接收阈值超时中断功能。你用UART0/1/4/5。





作者: chrishu    时间: 7 天前
你可以参考M031BSP\SampleCode\StdDriver\UART_AutoFlow例程
作者: 匿名    时间: 3 天前
我现在用到的是M031做了一批板卡,数据是串口集中、转发的功能;6个串口都用到了。将1-2-3-4-5的串口收到的数据,转发到串口0中;1-2-3-4-5的串口收到的数据是0X0D 0X0A 结尾的,现在比较郁闷的是,如果数据中间夹杂这数据0D 0A 就很麻烦。
不知道该如何解析了。




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2