天天看點

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽通信

在實際應用場合中大多數采用中斷收發或DMA收發資料,提高MCU的處理效率。而實際應用的通信幀資料大多數都是不定長的,即每一幀資料的長度不定,若是采用接收中斷的方式來處理資料,若資料幀較長的話,需要多次進入接收中斷,會降低MCU的處理效率;若采用DMA的方式來接收資料,其每次都需要接收完DMA設定的接收長度資料才會觸發中斷,這樣的話短幀資料一幀以接收完但不會觸發中斷,需要在應用程式中提取資料,處理起來稍微麻煩。

序列槽的空閑中斷

為了解決實際應用中高效率的接收不定長資料,STM32的我序列槽提供了一種IDLE中斷,即空閑中斷來實作不定長資料的接收,平時接收信号線無資料的時候,序列槽接收處于空閑狀态下,當序列槽接收到資料後,序列槽接收處于忙狀态,當序列槽在一定時間内沒有接收到資料,即序列槽自動至于空閑狀态,産生空閑中斷。實作一幀資料的完整接收。

這個空閑判斷時間可以采用STM32序列槽自帶的時間來判斷,也可自己設定定時器定時判斷空閑的間隙時間,就好比FreeModbus中的T35us定時器的定時時隙一樣。

空閑中斷實作不定長資料接收

在序列槽初始化的代碼中開啟序列槽空閑中斷後,由于STM32的HAL庫中的序列槽中斷服務函數中沒有相關IDLE中斷處理的代碼,是以需要使用者自己按照HAL庫的風格,添加自己的中斷服務函數以及中斷回調函數,具體實作的過程如下:

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽IDLE中斷的服務函數

添加callback回調函數,在回調函數中處理序列槽接收到的資料

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽idle中斷的回調函數

主函數中添加實作資料回發的代碼,即将接收到的代碼再發送回去。

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽發送回接到的資料

序列槽的基本配置,首先應用Cube MX軟體配置系統時鐘樹,為所有外設配置時鐘。

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

系統時鐘樹

配置序列槽,使用UART1,并采用DMA收發方式,DMA采用正常模式,Byte對齊模式,記憶體位址遞增,外設位址不變。

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽DMA配置

序列槽的時鐘采用采用16周期采用模式,提高序列槽通信資料的準确性。

cubemx序列槽的發送與接收_STM32F103程式設計學習——序列槽接收不定長資料序列槽通信序列槽的空閑中斷空閑中斷實作不定長資料接收

序列槽通信參數配置

繼續閱讀