1. 程式人生 > >關於STM32程式模擬時卡死在default_handler的解決方法

關於STM32程式模擬時卡死在default_handler的解決方法

問題描述:在debugger模式下,執行後,串列埠通訊正常,過一會串列埠通訊異常,暫停模擬發現程式死在default_Handler

原因:沒有中斷入口函式,當然了,有些人可能會這麼寫

void USART1_IRQHandler(void)
{

}

以為這樣就算是加了中斷入口函數了,開啟串列埠中斷接收 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE)  時,同時也打開了串列埠ORE中斷。所以,中斷入口函式應該這麼寫

void USART1_IRQHandler(void)
{
   uint8_t value;
   if(USART_GetFlagStatus(USART1,USART_IT_RXNE) == SET) 
    {   

        value = USART_ReceiveData(USART1);
    }
    if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) 
    { 
        /* Clear the USART1 Receive interrupt */ 
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
    }
   if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)   
   {               
       USART_ReceiveData(USART1); 
       USART_ClearFlag(USART1,USART_FLAG_ORE);               
   }
}


個人小結:在除錯個人STM32程式過程時,程式卡死在default_Handler。查詢原因是因為漏掉了中斷處理函式。


問題描述:在debugger模式下,執行後,串列埠通訊正常,過一會串列埠通訊異常,暫停模擬發現程式死在default_Handler

原因:沒有中斷入口函式,當然了,有些人可能會這麼寫

void USART1_IRQHandler(void)
{

}

以為這樣就算是加了中斷入口函數了,開啟串列埠中斷接收 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE)  時,同時也打開了串列埠ORE中斷。所以,中斷入口函式應該這麼寫

void USART1_IRQHandler(void)
{
   uint8_t value;
   if(USART_GetFlagStatus(USART1,USART_IT_RXNE) == SET) 
    {   
        value = USART_ReceiveData(USART1);
    }
    if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET) 
    { 
        /* Clear the USART1 Receive interrupt */ 
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
    }
   if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)   
   {               
       USART_ReceiveData(USART1); 
       USART_ClearFlag(USART1,USART_FLAG_ORE);               
   }
}


個人小結:在除錯個人STM32程式過程時,程式卡死在default_Handler。查詢原因是因為漏掉了中斷處理函式。