STM32F103C8T6、FreeModbus從站的設計與測試(4)——定時器、中斷初始化

關鍵詞:Modbus FreeModbus STM32F103C8T6 CubeMX

1.串口參數設置

我們選擇UART2來做RS485接口,UART1作爲備用,用來做調試中的串口打印用。串口的參數配置比較簡單,不再贅述。注意要啓用串口中斷,FreeModbus採用中斷的方式接受和發送串口數據。

2.定時器參數設置

採用TIM2來作爲FreeModbus的定時器,孔丙火(微信公衆號:孔丙火)這裏主要實現工業控制中常用的Modbus-RTU功能,RTU協議中是靠時間間隔來判斷一個數據幀是否結束的,所以需要用到定時器。

先上一張時鐘配置圖,如圖1.

圖1

晶振是12M的,APB1和APB2的定時器頻率都是72M。

圖2

圖2是TIM2的參數配置界面,時鐘分頻是3599+1=3600,即:72÷3600=0.02MHz,一個時鐘週期爲:1÷0.02M=50us,之所以這樣設置,是基於Freemodbus協議的需要。熟悉Freemodbus協議的朋友是知道的,在通信速率≥19200pbs時,幀間隔識別時間爲固定的35×50us=1750us,在通信速率<19200pbs時,按照實際的11個bit時間計算。孔丙火(微信公衆號:孔丙火)在這裏暫且把Counter Period設爲35,其實在程序代碼中是根據實際通信速率來賦值的,這個在後面的文章中會詳細介紹。這個地方也是本系列文章與網上大多數文章的不同支出,其他文章多數把這個參數設爲固定值,每次更改通信速率都要手動改這個參數,孔丙火(微信公衆號:孔丙火)感覺不是很方便。

3.中斷說明

圖3

如圖3所示,中斷部分的配置至少要使能TIM2和USART2的中斷。在程序中,實際用到的是TIM2的定時溢出中斷,UART2的接收完成中斷和發送非空中斷。

把這些設置完後,就可以去生成代碼了,這一步比較簡單,不再贅述,不太清楚的朋友,也可以參考孔丙火(微信公衆號:孔丙火)之前的文章。下一節開始詳細介紹代碼的編寫。


單片機、ARM、現場總線、PLC、嵌入式軟硬件的設計經驗分享,秉承點點滴滴皆智慧的理念,一起分享,共同交流。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章