微控制器中斷能夠及時響應外部觸發事件,在中斷函式中處理外部事件,處理完成之後退回到中斷點。中斷服務函式應該能最快速的解決觸發事件,快速退出中斷,不宜在中斷中處理複雜的執行演算法。所以中斷函式的編寫盡量簡單明瞭快速,下面以串列埠接收中斷為例來說明中斷處理函式的寫法。
1.設定乙個全域性標誌,觸發中斷之後在中斷函式內把該標誌設定為1,清除中斷標誌位,然後退出中斷。在主函式內判斷該標誌位是否置1,如果置1就處理中斷事件,最後把該標誌位清除。該方式適合中斷處理的事件比較耗時,執行大量計算時使用。
uint8_t flag=0;//全域性變數標誌位初始置0
//中斷服務函式
void usart3_irqhandler(void)
}//主函式
int main(void)
}}
2.串列埠接收資料發生中斷時,接收完資料幀第乙個位元組之後,關閉串列埠接收中斷。迴圈判定接收暫存器非空標誌是否置位,讀取剩餘資料,直到資料接收完成。最後,清除中斷標誌,重新開啟串列埠接收中斷,退出中斷等待下次中斷觸發。該方式適合接收固定長度少量資料的情況。
//中斷服務函式
void usart3_irqhandler(void)
if(gps_rx[gps_cnt-1]==0x0a)break;
}while(i--);
usart_clearitpendingbit(usart2, usart_it_rxne);
}gps_iint();//重新開啟串列埠中斷
}
STM32串列埠中斷方式接收
經過除錯在stm32f101cbt6中實現通訊。注意還要配乙個ttl轉usb介面,才能進行通訊。實現字串回發 include stm32f10x it.h include stm32f10x conf.h void rcc configuration void 時鐘配置 void usart con...
STM32串列埠中斷接收方式詳細比較
串列埠除錯,以前也調過,只是沒這麼深入的琢磨過,最近又在弄,感覺串列埠很基本,也很有學問,要是出現bug可能導致系統奔潰。現在貼出來,歡迎拍磚指正!本例程通過pc機的串列埠除錯助手將資料傳送至stm32,stm32通過sp3232晶元採用中斷接收方式完成,然後接收資料後將所接收的資料又傳送至pc機,...
STM32串列埠中斷接收方式詳細比較
本例程通過pc機的串列埠除錯助手將資料傳送至stm32,stm32通過sp3232晶元採用中斷接收方式完成,然後接收資料後將所接收的資料又傳送至pc機。例項一 c view plain copy print?void usart1 irqhandler u8 getdata 這是最基本的,將資料接收...