天命风流 发表于 2021-12-2 15:35

STM32F767单片机使用串口2死机问题

我使用的单片机是STM32F767,使用了串口1,然后又使用了串口2,但我一使用串口2,就容易死机,死机后卡死在下图函数中,串口2的初始化如下:

unsigned char UART2_aRxBuffer;//HAL库使用的串口接收缓冲

UART_HandleTypeDef UART2_Handler; //UART句柄

//串口输出
int USART2_putc(int ch)
{        
        while((USART2->ISR&0X40)==0);//循环发送 直到发送完毕   
        USART2->TDR=(unsigned char)ch;      
        return ch;
}
void Drv_Usart2_Sendx(rt_uint8_t *data, rt_uint16_t size)
{
    rt_uint16_t i = 0;
    rt_interrupt_enter();
    for(i=0; i<size; i++)
    {
      USART2_putc(data);
    }
    rt_interrupt_leave();
}


void uart2_init(unsigned int bound)
{       
    //UART 3?ê??ˉéè??
    UART2_Handler.Instance=USART2;                                          //USART1
    UART2_Handler.Init.BaudRate=bound;                                            //波特率
    UART2_Handler.Init.WordLength=UART_WORDLENGTH_8B;                     //字长为8位格式
    UART2_Handler.Init.StopBits=UART_STOPBITS_1;                            //停止位为1
    UART2_Handler.Init.Parity=UART_PARITY_NONE;                                    //无奇偶校验位
    UART2_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;                     //无硬件流控
    UART2_Handler.Init.Mode=UART_MODE_TX_RX;                                    //收发模式
    HAL_UART_Init(&UART2_Handler);                                          //HAL_UART_Init()会使能UART1

    HAL_UART_Receive_IT(&UART2_Handler, (unsigned char *)UART2_aRxBuffer, USART2_RXBUFFERSIZE);//开启接收中断

}


//串口1中断服务程序
unsigned int USART2_timeout=0;
unsigned long USART2_Rec_rt_tick = 0;
//void USART2_IRQHandler(void)                       
//{
//   
//    //unsigned int maxDelay=0x1FFFF;
//   unsigned int maxDelay=0x1F;
//
//    rt_interrupt_enter();
//   
//    USART2_Rec_rt_tick = rt_tick_get();
//    HAL_UART_IRQHandler(&UART2_Handler);        //调用HAL库中断处理公用函数
//   
//    USART2_timeout=0;
//    while (HAL_UART_GetState(&UART2_Handler)!=HAL_UART_STATE_READY)//等待就绪
//    {
//      USART2_timeout++;//超时处理
//      if(USART2_timeout>maxDelay) break;               
//    }
//
//    USART2_timeout=0;
//    //一次处理完成后,重新开启中断并设置RxXferCount为1
//    while(HAL_UART_Receive_IT(&UART2_Handler,(unsigned char *)UART2_aRxBuffer, USART2_RXBUFFERSIZE)!=HAL_OK)
//    {
//      USART2_timeout++; //超时处理
//      if(USART2_timeout>maxDelay) break;       
//    }
//    rt_interrupt_leave();
//
//}

死机后卡死在这里


天命风流 发表于 2021-12-2 15:37

我把串口2 的中断函数都屏蔽了,然后还是死机求指点

天命风流 发表于 2021-12-2 15:46

把串口2的初始化屏蔽后,立马不死机了

l4157 发表于 2021-12-3 08:25

我调试F767的时候也碰到过,当时是接收错误中断没处理,你看下是不是和我一样的问题

天命风流 发表于 2021-12-6 08:55

l4157 发表于 2021-12-3 08:25
我调试F767的时候也碰到过,当时是接收错误中断没处理,你看下是不是和我一样的问题 ...

接收错误中断怎么处理?

天命风流 发表于 2021-12-6 11:39

l4157 发表于 2021-12-6 15:06

我只是简单的禁止错误中断,并清除中断错误标志:
void HAL_UART_IRQHandler_User(UART_HandleTypeDef *huart,uint16_tp)
{
uint32_t isrflags   = READ_REG(huart->Instance->ISR);
uint32_t cr1its   = READ_REG(huart->Instance->CR1);

       
/* UART in mode Receiver ---------------------------------------------------*/
if(((isrflags & USART_ISR_RXNE) != RESET) && ((cr1its & USART_CR1_RXNEIE) != RESET))
{
    UART_Receive_IT_User(huart,p);
    return;
}

/* UART in mode Transmitter ------------------------------------------------*/
if(((isrflags & USART_ISR_TXE) != RESET) && ((cr1its & USART_CR1_TXEIE) != RESET))
{
    UART_Transmit_IT_User(huart);
    return;
}

/* UART in mode Transmitter (transmission end) -----------------------------*/
if(((isrflags & USART_ISR_TC) != RESET) && ((cr1its & USART_CR1_TCIE) != RESET))
{
    UART_EndTransmit_IT_User(huart,p);
    return;
}
        //No error process is needed!
        //Clear ORECF: Overrun error clear flag
        //Clear NCF: Noise detected clear flag
        //Clear FECF: Framing error clear flag
        //Clear PECF: Parity error clear flag       
        //        __HAL_UART_CLEAR_IT(huart, UART_CLEAR_OREF);
        READ_REG(huart->Instance->ISR);
        READ_REG(huart->Instance->RDR);               

        huart->Instance->CR3        =        0;                //Error interrupt is inhibited
        //huart->Instance->ICR        =        0x000f;
}

l4157 发表于 2021-12-6 15:07

最后十几行

天命风流 发表于 2021-12-13 15:15

天命风流 发表于 2021-12-13 15:16

页: [1]
查看完整版本: STM32F767单片机使用串口2死机问题