STM32 ZET6 144P 串口4 串口5,死在中断里,不出来,哪位大神帮我看一下。全部积分奉送

2024年11月30日 05:39
有2个网友回答
网友(1):

USART_IT_RXNE 是接收中断. 


USART_IT_TXE 才是发生中断.

static char DTs[512];//发送缓冲空间
static volatile uint16_t DTCursorTop=0;
static volatile uint16_t DTCursorEnd=0;
void UART5_IRQHandler(void)
{     
    //接收寄存器非空
     if(USART_GetITStatus(UART5, USART_IT_RXNE  ) != RESET)
    {
        char Data = UART5->DR;//抱歉不喜欢用函数调用.中断的地方能节省运行时间就节省运行时间
     }
     
     
    //发送寄存器为空
     if(USART_GetITStatus(UART5, USART_IT_TXE ) != RESET)
    {
    
        if(DTCursorTop == DTCursorEnd){
        
       Open_USARTx->CR1 &= 0xff7f;//发送完成清除中断发送标志位
       
       
       }
else{


        UART5->DR  = DTs[(DTCursorTop++)&0x1ff];//= 0x03;
       //USART_SendData(UART5, 0x03);
       //两条语句是一样的功能,下面的会产生多余的指令和占用更多的堆栈空间
       
}


     }       
 }
 int sendchar(int ch){
     while((((DTCursorTop-DTCursorEnd)&0x1ff) ==1)){
// UART5->CR1 |= 0x80;//ÖÃλ·¢ËÍÖжÏ;//µ½´ï»·Ðνáβ
}

DTs[(DTCursorEnd++)&0x1ff] = ch;
UART5->CR1 |= USART_CR1_TXEIE;//置位触发发送中断

return 0;

}  /* in Serial.c */

你用错参数了. 纯手工编写,不是网上复制粘贴的.

网友(2):

关注这个问题