系列索引:《嵌入式系統原理與應用》 | 嵌入式系統 重點知識梳理
目錄
STM32 F103中的基本定時器、通用定時器及高級定時器的區別(包括所在總線及功能區別)
定時器相關庫函數的使用(arr,psc及ccr值的設置,定時器中斷的使用)
嵌入式系統中延時實現的方式及其優缺點
嵌入式系統中延時的實現
1. 完全硬件實現
使用電容及電阻即可完成特定的振盪延時作用
延時時間無法改變
2. 純軟件方式(不精確,佔用CPU)
3. 微控制器中的可編程定時/計數器
STM32 F103中的基本定時器、通用定時器及高級定時器的區別(包括所在總線及功能區別)
功能: 計數 = 基本定時器 + 輸入輸出,捕獲 = 通用定時器 + 剎車信號輸入,7路信號互補輸出 = 高級定時器
定時器的時鐘源有哪些?
- 內部時鐘(系統時鐘),來自於輸入爲APB1或APB2的一個倍頻器
- 外部時鐘模式 1: 外部輸入引腳 ;2:外部觸發輸入ETR
- 內部引腳
- 其他定時器
定時器的工作模式
計數模式(以普通定時器爲例)
輸出比較模式
輸入捕獲模式
先設置輸入捕獲爲上升沿檢測,記錄發生上升沿時TIMx_CNT的值。然後配置捕獲信號爲下降沿捕獲,當下降沿到來的時候發生捕獲,並記錄此時的TIMx_CNT的值。這樣,前後兩次TIMx_CNT的值之差就是高電平的脈寬。同時根據TIM的計數頻率,我們就能知道高電平脈寬的準確時間。
單脈衝模式
PWM模式
PWM的作用及其實現方式
PWM(脈衝寬度調製),簡稱脈衝調製,顧名思義,指對脈衝寬度的控制,它是一種利用微控制器的數字輸出來對模擬電路進行控制的非常有效的技術
實現方式
(1)傳統的數字電路方式。用傳統的數字電路實現PWM,電路設計較複雜,體積大,抗干擾能力差,系統的控制週期較長。
(2)微控制器普通I/O模擬方式。對於微控制器中無PWM輸出功能的情況,可以通過CPU操控普通1/O口來實現PWM輸出。但這樣實現PWM將消耗大量的時間,大大降低了CPU的效率,而且得到的PWM信號精度不太高。
(3)微控制器的PWM直接輸出方式。對於具有PWM輸出功能的微控制器,在進行簡單的配置後即可在微控制器的指定引腳上輸出PWM脈衝。這也是目前使用最多的PWM實現方式。
PWM和輸出比較模式的區別
PWM模式爲輸出比較模式的特殊形式,pwm模式在對應定時器上的四個通道產生的頻率是同步的(即相同的),而輸出比較模式在四個通道可以產生的頻率不同,但他們都輸出佔空比不同的信號。
定時器中預分頻、自動重裝載、捕獲/比較寄存器的初始值的設置
CCR:捕獲/比較寄存器,包括捕獲輸入(測量脈衝頻率)和比較輸出(比較兩個脈衝)兩部分
初始化輸入捕獲通道。調用函數:TIM_ICInit();
ARR:自動重裝載寄存器
PSC:預分頻寄存器作用:
在更新事件(UEV)之前,預分頻係數爲1,一個時鐘週期一個計數;UEV之後,預分頻係數爲2,兩個始終週期一個計數
定時器延時時間的計算
延時時間=(Timx_ARR+1)*(TIMx_PSC+1)/TIMxCLK
例:
以時鐘頻率72MHZ爲例,要計數500us,則預分頻值和計數值爲多少?
解:時鐘頻率72MHZ,其時鐘週期爲1/72000000 s,500us則需要500*72個時鐘週期。若預分頻值爲71,則計數器時鐘頻率爲1MHZ,時鐘週期爲1/1000000s, 500us需要500個時鐘週期,則計數值爲499.
定時器相關庫函數的使用(arr,psc及ccr值的設置,定時器中斷的使用)
TIM_TimeBaseInit:根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx。
TIM_OC1Init:根據TIM_OCInitStruct中指定的參數初始化外設 TIMx的通道1。
TIM_OC2Init:根據TIM_OCInitStruct中指定的參數初始化外設 TIMx的通道2。
TIM_OC3Init:根據TIM_OCInitStruct中指定的參數初始化外設 TIMx的通道3。
TIM_OC4Init:根據TIM_OCInitStruct中指定的參數初始化外設 TIMx的通道4。
TIM_OC1PreloadConfig:使能或者禁止TIMx在CCR1上的預裝載寄存器。
TIM_OC2PreloadConfig:使能或者禁止TIMx在CCR2上的預裝載寄存器。
TIM_OC3PreloadConfig:使能或者禁止TIMx在CCR3上的預裝載寄存器。
TIM_OC4PreloadConfig:使能或者禁止TIMx在CCR4上的預裝載寄存器。
TIM_ARRPreloadConfig:使能或者禁止TIMx在ARR上的預裝載寄存器。
TIM_CtrlPWMOutputs:使能或禁止TIMx的主輸出。
TIM_Cmd:使能或者禁止TIMx。
初始化輸入捕獲通道。調用函數:TIM_ICInit();
TIM_GetFlagStatus:檢查指定的TIMx標誌位的狀態。
TIM_ClearFlag:清除 TIMx 的待處理標誌位。
TIM_ITConfig:使能或者禁止指定的TIMx中斷。
TIM_GetITStatus:檢查指定的TIMx中斷是否發生。
TIM_ClearITPendingBit:清除TIMx的中斷掛起位。