找回密码
 立即注册

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");//这里并不能触发,请问是为何?
               
    }

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具

沙发
chrishu 发表于 6 天前 | 只看该作者
接收阈值超时中断,是当RX FIFO里有数据,且数据个数没有达到阈值个数时,超时后产生的中断。
比如设置接收阈值为8字节,一次收到5字节数据后,就不再收到数据就会产生接收阈值超时中断。
回复 支持 反对

使用道具 举报

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

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

使用道具

地板
chrishu 发表于 6 天前 | 只看该作者
UART2的FIFO只有1个字节,所以没有接收阈值超时中断功能。你用UART0/1/4/5。




回复 支持 反对

使用道具 举报

5#
chrishu 发表于 6 天前 | 只看该作者
你可以参考M031BSP\SampleCode\StdDriver\UART_AutoFlow例程
回复 支持 反对

使用道具 举报

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

使用道具

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

本版积分规则

新唐MCU