序列槽通信
在實際應用場合中大多數采用中斷收發或DMA收發資料,提高MCU的處理效率。而實際應用的通信幀資料大多數都是不定長的,即每一幀資料的長度不定,若是采用接收中斷的方式來處理資料,若資料幀較長的話,需要多次進入接收中斷,會降低MCU的處理效率;若采用DMA的方式來接收資料,其每次都需要接收完DMA設定的接收長度資料才會觸發中斷,這樣的話短幀資料一幀以接收完但不會觸發中斷,需要在應用程式中提取資料,處理起來稍微麻煩。
序列槽的空閑中斷
為了解決實際應用中高效率的接收不定長資料,STM32的我序列槽提供了一種IDLE中斷,即空閑中斷來實作不定長資料的接收,平時接收信号線無資料的時候,序列槽接收處于空閑狀态下,當序列槽接收到資料後,序列槽接收處于忙狀态,當序列槽在一定時間内沒有接收到資料,即序列槽自動至于空閑狀态,産生空閑中斷。實作一幀資料的完整接收。
這個空閑判斷時間可以采用STM32序列槽自帶的時間來判斷,也可自己設定定時器定時判斷空閑的間隙時間,就好比FreeModbus中的T35us定時器的定時時隙一樣。
空閑中斷實作不定長資料接收
在序列槽初始化的代碼中開啟序列槽空閑中斷後,由于STM32的HAL庫中的序列槽中斷服務函數中沒有相關IDLE中斷處理的代碼,是以需要使用者自己按照HAL庫的風格,添加自己的中斷服務函數以及中斷回調函數,具體實作的過程如下:
序列槽IDLE中斷的服務函數
添加callback回調函數,在回調函數中處理序列槽接收到的資料
序列槽idle中斷的回調函數
主函數中添加實作資料回發的代碼,即将接收到的代碼再發送回去。
序列槽發送回接到的資料
序列槽的基本配置,首先應用Cube MX軟體配置系統時鐘樹,為所有外設配置時鐘。
系統時鐘樹
配置序列槽,使用UART1,并采用DMA收發方式,DMA采用正常模式,Byte對齊模式,記憶體位址遞增,外設位址不變。
序列槽DMA配置
序列槽的時鐘采用采用16周期采用模式,提高序列槽通信資料的準确性。
序列槽通信參數配置