一、工具
1、硬件:GD32F30x系列單片機2、編譯環境:KEIL
二、需求分析
如下圖所示,現要求控制單片機同時輸出3路方波,并且每個方波的高低電平持續的時長是可調整的,因為對時長有著嚴格的要求,這就需要在方波開始輸出后就不能再通過軟件進行干預,完全交給單片機的硬件自己去完成。通過觀察要輸出方波的特點,除了LED_PWM波具備PWM波形的特點,其它兩個與PWM波形有著很大的不同,于是乎想使用單片機的定時器的PWM模式輸出剩余兩種波形很顯然行不通。這時候應該想到單片機定時器另一種比較靈活的輸出方波的模式就是“輸出比較模式”,當然PWM模式也是輸出比較模式的一種。
通過分析,似乎找到了輸出以上波形的方法,至于能否實現還需要通過代碼實現并調試去驗證。那么還有一個需求也與以上輸出的波形有關,那就是能夠每次在t4時間段內進行電壓采集,電壓的變化也是受以上三個方波影響的(至于電壓的采集方法我會在另一篇文章中介紹),為了保證采集的電壓穩定,可以適當的在t4時間段內多次采集。熟悉單片機定時器的知道,想要每次都能夠在t4時間段內采集電壓,需要觸發中斷或者事件來實現,而能夠觸發中斷或者事件點除了t4的開始和t4的結束也就是電平發生轉換時,在t4中間是沒法觸發中斷或者事件的,而如果只在t4的開始和t4的結束區采集電壓,很可能采集到的電壓并非所需要的電壓。為了實現在t4時間內采集多次電壓,我就想到了定時器的另一個還沒有用的通道,如果讓它也輸出一個波形,并且使這個波形的電平能夠在t4時間段內發生多次轉換,那么我就可以通過觸發中斷的方式進行多次電壓采集。理想的方式如下圖紫色波形所示(當然也是我已經實現的結果,實際程序是不會輸出紫色波形的,你現在看到的是我通過一個普通的IO引腳在中斷中反轉得到的),黃色波形是上圖MEA_S2的波形。
這里需要指出,雖然我使用了定時器的一個輸出比較通道輸出一個波形用于采集電壓,但這個波形并不占用引腳資源(你可以把這個引腳用作除定時器以外的功能),算是一個抽象出來的波形。如下圖所示,通過對用戶手冊的解讀以及實際驗證,發現是可以屏蔽通道輸出的。
在相關的寄存器中我們也可以找到相關的控制位,比如通道0,如下圖所示,只要我們把該位置0就不要擔心該引腳被用作其它功能了。
-
單片機
+關注
關注
6002文章
43990瀏覽量
621205 -
定時器
+關注
關注
23文章
3148瀏覽量
112170 -
keil
+關注
關注
68文章
1196瀏覽量
165428
發布評論請先 登錄
相關推薦
評論