關於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)
{
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
{
/* Clear the USART1 Receive interrupt */
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
{
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。查詢原因是因為漏掉了中斷處理函式。