嵌入式学习小组
直播中

话多显蠢

9年用户 818经验值
擅长:479461
私信 关注

UART5接收超时无效是为什么?

UART5参考规格描述确认超时是否有效,配置TOIC时间(这里选择80(即80个波特率时间)),TOCNTEN计数使能,RXTOIEN中断使能,发送5个BYTE的数据,均能正常中断并读取成功,但5个BYTE之后并未看看接收超时中断置位,为什么?
参数函数设置如下:
UART_SettimeoutCnt(UART5,80); // 配置时间并使能计数功能
void UART_SetTimeoutCnt(UART_T* uart, uint32_t u32TOC)//底层库函数
{
    uart->TOUT = (uart->TOUT & ~UART_TOUT_TOIC_Msk)| (u32TOC);
    uart->INTEN |= UART_INTEN_TOCNTEN_Msk;
}

UART_ENABLE_INT(UART5, (UART_INTEN_RDAIEN_Msk|UART_INTEN_RXTOIEN_Msk )); // 使能接收中断,接收超时中断
NVIC_EnableIRQ(UART5_IRQn);// 使能总中断

void UART5_IRQHandler(void)
{
  u8 Readbuffer=0;
   u32IntSts= UART5->INTSTS;
   if(u32IntSts&UART_INTSTS_RXTOIF_Msk)//超时判断
   {
        UART_WRITE(UART5,0x88);
   }
   
   if(u32IntSts & UART_INTSTS_RDAINT_Msk)
   {   
     Readbuffer=UART_READ(UART5);   //读取数据,清标志
     UART_WRITE(UART5,Readbuffer);  
   }
}






回帖(1)

李静

2024-1-16 09:58:24
在您的代码中,我注意到您只配置了接收超时的计数和使能,但没有在相应的中断标志中使能接收超时中断。

要使接收超时中断有效,您需要在UART设置中使能接收超时中断中断,示例代码如下:

UART_EnableInt(UART5, UART_INTEN_RXTOIEN_Msk);

此函数将使能UART5的接收超时中断。这应该解决您的问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分