找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

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

[复制链接]
匿名  发表于 2025-2-28 15:56:26 |阅读模式
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 发表于 2025-3-3 10:23:21 | 显示全部楼层
接收阈值超时中断,是当RX FIFO里有数据,且数据个数没有达到阈值个数时,超时后产生的中断。
比如设置接收阈值为8字节,一次收到5字节数据后,就不再收到数据就会产生接收阈值超时中断。
回复 支持 反对

使用道具 举报

匿名  发表于 2025-3-3 13:05:27
chrishu 发表于 2025-3-3 10:23
接收阈值超时中断,是当RX FIFO里有数据,且数据个数没有达到阈值个数时,超时后产生的中断。
比如设置接收 ...

请问上面的程序,写法有问题吗?
另外是否可以给一个例程的链接?
回复 支持 反对

使用道具

chrishu 发表于 2025-3-3 17:54:33 | 显示全部楼层
UART2的FIFO只有1个字节,所以没有接收阈值超时中断功能。你用UART0/1/4/5。
微信截图_20250303175652.png



回复 支持 反对

使用道具 举报

chrishu 发表于 2025-3-3 18:01:55 | 显示全部楼层
你可以参考M031BSP\SampleCode\StdDriver\UART_AutoFlow例程
回复 支持 反对

使用道具 举报

匿名  发表于 2025-3-7 15:56:16
我现在用到的是M031做了一批板卡,数据是串口集中、转发的功能;6个串口都用到了。将1-2-3-4-5的串口收到的数据,转发到串口0中;1-2-3-4-5的串口收到的数据是0X0D 0X0A 结尾的,现在比较郁闷的是,如果数据中间夹杂这数据0D 0A 就很麻烦。
不知道该如何解析了。
回复 支持 反对

使用道具

chrishu 发表于 2025-3-10 09:52:36 | 显示全部楼层
数据如果是连续的话,可以判断0d 0a后面是否还有数据来判断是否结束。
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU