關於STM32串列埠空閒中斷的問題
1.空閒中斷是接受資料後出現一個byte的高電平(空閒)狀態,就會觸發空閒中斷.並不是空閒就會一直中斷,準確的說應該是上升沿(停止位)後一個byte,如果一直是低電平是不會觸發空閒中斷的(會觸發break中斷)。
2.關於第二點有要鋪墊的三個情況,datasheet中
"當一空閒幀被檢測到時,其處理步驟和接收到普通資料幀一樣,但如果IDLEIE位被設定將產生一箇中斷"
"空閒符號被視為完全由'1'組成的一個完整的資料幀,後面跟著包含了資料的下一幀的開始位'1'的位數也包括了停止位的位數” 空閒符號的配圖後面跟這一個低電平.
有人理解為只有收到下一個資料的起始位才會觸發中斷,這樣理解是不對的,應該是資料後有空閒了一幀就會觸發.
3.清中斷的方式感覺奇怪,使用函式USART_ClearITPendingBit( USART1, USART_IT_IDLE )清除不了中斷的.我用的是3.5的庫,檢視函式說明,裡面的@param引數並沒有IDLE,後面的@note中,這樣說:
"PE(Parity error),FE(Framing error),NE(Noise error),ORE(OverRun error) and IDLE(Idle line detected) pending bits are cleared by software sequence: a read operation to USART_SR register (USART_GetITStatus()) followed by a read operation to USART_DR register (USART_ReceiveData())."
我是通過語句"USART1->DR;"來清除IDLE中斷的.