91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32有哪幾種定時(shí)器 STM32高級(jí)定時(shí)器有哪些功能

冬至配餃子 ? 來(lái)源:舊巷聞書 ? 作者:駱駝聽海 ? 2023-07-27 16:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數(shù)字電路時(shí)鐘是整個(gè)電路的心臟,電路的的一舉一動(dòng)都是根據(jù)時(shí)鐘節(jié)拍下進(jìn)行的,隨著信息量逐漸提高,對(duì)硬件信息處理能力提出了更大的需求,時(shí)鐘作為數(shù)字硬件的關(guān)鍵成員,其性能需要我們關(guān)注,尤其在高速電路設(shè)計(jì)中對(duì)模擬轉(zhuǎn)換芯片對(duì)時(shí)鐘性能有很高的需求,因此正確選擇時(shí)鐘是很關(guān)鍵的一步,前提是我們要了解時(shí)鐘的關(guān)鍵參數(shù)咯。在數(shù)字電路中最常見的時(shí)鐘元件有晶振和鎖相環(huán)、時(shí)鐘緩沖器等,本節(jié)對(duì)外部定時(shí)器進(jìn)行重點(diǎn)講解。

STM32 定時(shí)器專題講解

SysTick定時(shí)器的功能比較單一,主要是供給系統(tǒng)使用的,系統(tǒng)默認(rèn)設(shè)置為1ms觸發(fā)一次中斷。而用戶想要使用自己的定時(shí)器,STM32提供的用戶定時(shí)器不但數(shù)量多且功能更加強(qiáng)大。不同型號(hào)的STM32提供的定時(shí)器數(shù)量不同。

STM32F4xx 系列微控制器具有多達(dá)14個(gè)定時(shí)器。其中包括2個(gè)基本定時(shí)器,10 個(gè)通用定時(shí)器2個(gè)高級(jí)定時(shí)器。其中最大定時(shí)器時(shí)鐘可通過(guò) RCC_DCKCFGR 寄存器配置為 84MHz 或者 168MHz。一般是默認(rèn)配置。

圖片

捕獲/比較通道:每一個(gè)通道對(duì)應(yīng)著外部一個(gè)管腳,接收外部的一些信號(hào)或者輸出一些信號(hào)。

基本定時(shí)器TIM6和TIM7:和SysTick定時(shí)器的功能差不多,基板上就是定時(shí)計(jì)數(shù)以及驅(qū)動(dòng)DAC的功能。

通用定時(shí)器TIM2、5、3、4、9、10、11、12、13、14:功能比基本定時(shí)器的功能多,且包含基本定時(shí)器的功能,多出來(lái)的功能包括輸入捕獲(通過(guò)捕獲通道,一個(gè)外接的管腳來(lái)測(cè)量外部信號(hào)的頻率和脈寬等)、輸出比較、PWM輸出(也對(duì)應(yīng)一個(gè)專門的通道)、使用外部信號(hào)控制定時(shí)器和定時(shí)器串連的同步電路的應(yīng)用等一些在特殊場(chǎng)合應(yīng)用的功能。

高級(jí)定時(shí)器TIM1和TIM8:包括了通用定時(shí)器的所有功能,在通用定時(shí)器的基礎(chǔ)上增加了更加特殊更加專業(yè)的功能,主要是用于PWM控制一些工業(yè)上的電機(jī),還有帶一些死區(qū)控制、急剎車等專業(yè)功能。

定時(shí)器計(jì)數(shù)模式:

向上計(jì)數(shù)模式:計(jì)數(shù)器從0計(jì)數(shù)到自動(dòng)加載值(TIMx_ARR,相當(dāng)于SysTick的重載數(shù)值寄存器),然后重新從0開始計(jì)數(shù),達(dá)到設(shè)定的數(shù)值時(shí)產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件。

向下計(jì)數(shù)模式:計(jì)數(shù)器從自動(dòng)裝入的值(TIMx_ARR)開始向下計(jì)數(shù)到0,然后從自動(dòng)裝入的值重新開始,并產(chǎn)生一個(gè)計(jì)數(shù)器向下溢出事件。

中央對(duì)齊模式(向上/向下計(jì)數(shù)):計(jì)數(shù)器從0開始計(jì)數(shù)到自動(dòng)裝入的值-1,產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件,然后向下計(jì)數(shù)到1并且產(chǎn)生一個(gè)計(jì)數(shù)器溢出事件;然后再?gòu)?開始重新計(jì)數(shù)。該模式簡(jiǎn)單說(shuō)明為先進(jìn)行向上計(jì)數(shù)模式,當(dāng)達(dá)到數(shù)值寄存器的值時(shí),進(jìn)行中斷服務(wù),而計(jì)數(shù)器的值不會(huì)恢復(fù)為0重新向上計(jì)數(shù),而是保持該值轉(zhuǎn)而采用向下計(jì)數(shù)模式,減到0時(shí)觸發(fā)中斷進(jìn)行中斷服務(wù),再采用向上計(jì)數(shù)模式,周而復(fù)始。

定時(shí)器的時(shí)鐘:

圖片

圖片

APB1和APB2總線上分別掛載的外設(shè)和定時(shí)器的最大時(shí)鐘頻率是不同的。

定時(shí)器的時(shí)基:

圖片

時(shí)鐘源:定時(shí)器時(shí)鐘 TIMxCLK,即內(nèi)部時(shí)鐘 CK_INT,經(jīng) 對(duì)應(yīng)的APB 預(yù)分頻器后分頻提供

計(jì)數(shù)器時(shí)鐘:定時(shí)器時(shí)鐘經(jīng)過(guò) PSC 預(yù)分頻器之后,即 CK_CNT,用來(lái)驅(qū)動(dòng)計(jì)數(shù)器計(jì)數(shù),一般情況下該時(shí)鐘頻率值就是時(shí)鐘源的頻率值,為默認(rèn)配置

計(jì)數(shù)器CNT:是一個(gè) 16 位/32的計(jì)數(shù)器

自動(dòng)重裝載寄存器:這里面裝著計(jì)數(shù)器能計(jì)數(shù)的最大數(shù)值。當(dāng)計(jì)數(shù)到這個(gè)值的時(shí)候,如果使能了中斷的話,定時(shí)器就產(chǎn)生溢出中斷

計(jì)時(shí)中斷時(shí)間:1/(TIMxCLK/(PSC+1)) * (ARR+1) 這里所有的加1是因?yàn)閺?開始

輸入捕獲與輸出比較:

輸入捕獲:可以用來(lái)捕獲外部事件,比如引腳的電平變化(上升沿,下降沿),并記錄下變化的時(shí)間,通常可以用來(lái)測(cè)量外部信號(hào)的頻率或者電平持續(xù)的時(shí)間。

圖片

輸出比較:此項(xiàng)功能是用來(lái)控制一個(gè)輸出波形,當(dāng)計(jì)數(shù)器與捕獲/比較寄存器的內(nèi)容相同時(shí),輸出比較功能做出相應(yīng)動(dòng)作,比如電平的翻轉(zhuǎn)。通常用于生產(chǎn)PWM波形。

圖片

STM32定時(shí)器定時(shí)中斷實(shí)驗(yàn):利用基本定時(shí)器實(shí)現(xiàn)定時(shí)1秒中斷,并在中斷處理函數(shù)中打印輸出字符

使用定時(shí)器必須知道定時(shí)器時(shí)鐘源是多少,本實(shí)驗(yàn)使用基本定時(shí)器TIM6,掛載再APB1總線上,因此時(shí)鐘源大小為84MHz,設(shè)置分頻系數(shù)為8400-1,則計(jì)數(shù)器的時(shí)鐘頻率為10KHz,即一個(gè)CLK的周期為100us,想要實(shí)現(xiàn)1s中斷,則裝載寄存器的大小為1000-1。

第一步先配置時(shí)鐘

圖片

第二步配置定時(shí)器TIM6

圖片

第三步配置中斷

圖片

值得注意的是,STM32有很多片內(nèi)外設(shè),而一般情況下每一種片內(nèi)外設(shè)的數(shù)量不唯一,因此要有啟動(dòng)函數(shù)來(lái)啟動(dòng)用戶想要的啟動(dòng)的目標(biāo)外設(shè)。如本節(jié)中定時(shí)器數(shù)量有很多,需要一定的定時(shí)器啟動(dòng)函數(shù)區(qū)分不同的定時(shí)器,然后啟動(dòng)目標(biāo)定時(shí)器,而系統(tǒng)定時(shí)器只有一個(gè),再整個(gè)工作過(guò)程中一直工作,不需要專門的啟動(dòng)函數(shù)。HAL_TIM_Base_Start(TIM_HandleTypeDef *htim)可以啟動(dòng)定時(shí)器,HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)既可以啟動(dòng)定時(shí)器,又可以使能定時(shí)器中斷。

//mian.c 


int main(void) {  
    HAL_Init();  
    SystemClock_Config();  
    MX_GPIO_Init();  
    MX_TIM6_Init();//定時(shí)器初始化,配置參數(shù)  
    MX_USART1_UART_Init(); 
    printf("this is tim6 int testn"); 
    HAL_TIM_Base_Start_IT(&htim6);//啟動(dòng)定時(shí)器并使能中斷  
    while (1)  
    { } 
}

在定時(shí)器中斷處理函數(shù)中有很多不同類型的事件可以觸發(fā)定時(shí)器中斷,如輸入捕獲,輸出比較,由于向上計(jì)數(shù)到達(dá)指定數(shù)值時(shí),計(jì)數(shù)器會(huì)重新更新數(shù)值,所以我們選擇數(shù)值更新事件。

圖片

圖片

所以在中斷處理中我們只需重寫回調(diào)函數(shù)HAL_TIM_PeriodElapsedCallback(htim);即可

//tim.c 
//重寫回調(diào)函數(shù)完成邏輯功能 
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { 
    if(htim- >Instance == TIM6){ //判斷是不是基本定時(shí)器TIM6  
    printf("tim6 intn"); 
    } 
}

高級(jí)定時(shí)器功能分析

高級(jí)定時(shí)器和通用定時(shí)器在基本定時(shí)器的基礎(chǔ)上引入了外部引腳,可以輸入捕獲和輸出比較功能。高級(jí)控制定時(shí)器比通用定時(shí)器增加了可編程死區(qū)互補(bǔ)輸出、重復(fù)計(jì)數(shù)器、帶剎車(斷路)功能,這些功能都是針對(duì)工業(yè)電機(jī)控制方面。

圖片

圖片

功能分析如下:

①時(shí)鐘源:對(duì)于高級(jí)或者通用定時(shí)器來(lái)說(shuō),時(shí)鐘源不僅僅只有來(lái)自APB總線的內(nèi)部時(shí)鐘,其時(shí)鐘源還可以來(lái)自外部,通過(guò)定時(shí)器連接外部的管腳引入進(jìn)來(lái),一般情況下我們都是使用內(nèi)部時(shí)鐘。

圖片

控制器:包括觸發(fā)控制器、從模式控制器以及編碼器接口。觸發(fā)控制器用來(lái)針對(duì)片內(nèi)外設(shè)輸出觸發(fā)信號(hào),比如為其它定時(shí)器提供時(shí)鐘和觸發(fā) DAC/ADC 轉(zhuǎn)換。編碼器接口專門針對(duì)編碼器計(jì)數(shù)而設(shè)計(jì)。從模式控制器可以控制計(jì)數(shù)器復(fù)位、啟動(dòng)、遞增/遞減、計(jì)數(shù)。

圖片

③時(shí)基單元:定時(shí)計(jì)數(shù)的核心,預(yù)分頻器 PSC:對(duì)輸入時(shí)鐘進(jìn)行分頻得到計(jì)數(shù)器的驅(qū)動(dòng)時(shí)鐘CK_CNT,計(jì)數(shù)器 CNT: 在外部時(shí)鐘的驅(qū)動(dòng)下實(shí)時(shí)的進(jìn)行計(jì)數(shù),自動(dòng)重載寄存器 ARR:用來(lái)存放與計(jì)數(shù)器,CNT 比較的值,如果兩個(gè)值相等就遞減重復(fù)計(jì)數(shù)器。

重復(fù)計(jì)數(shù)器 RCR:高級(jí)定時(shí)器特有,在定時(shí)器發(fā)生上溢或下溢事件時(shí)遞減重復(fù)計(jì)數(shù)器的值,只有當(dāng)重復(fù)計(jì)數(shù)器為0 時(shí)才會(huì)生成更新事件。相當(dāng)于有了一個(gè)緩沖,溢出時(shí)不會(huì)直接觸發(fā)中斷,而是時(shí)重復(fù)計(jì)數(shù)器減一,也就是可以延長(zhǎng)計(jì)數(shù)時(shí)間,想要延長(zhǎng)幾倍,重復(fù)計(jì)數(shù)器里的數(shù)值就是幾。

圖片

④輸入捕獲:輸入捕獲可以對(duì)輸入的信號(hào)的上升沿,下降沿或者雙邊沿進(jìn)行捕獲,常用來(lái)測(cè)量輸入信號(hào)的脈寬和頻率,一個(gè)定時(shí)器可能有很多通道,每個(gè)通道對(duì)應(yīng)一個(gè)管腳,但是一個(gè)定時(shí)器不會(huì)擁有超過(guò)4個(gè)通道。

外部通過(guò)管腳將信號(hào)輸入后,信號(hào)會(huì)經(jīng)過(guò)一個(gè)輸入濾波器和邊沿檢測(cè)器。外部輸入的信號(hào)雜亂,使用濾波器進(jìn)行濾波調(diào)整,過(guò)濾出用戶想要的頻率的信號(hào);邊沿檢測(cè)器用來(lái)檢測(cè)輸入波形的頻率,以上升沿為例,第一次檢測(cè)到上升沿,將計(jì)數(shù)器的值CNT放入到捕獲寄存器CCR(捕獲寄存器就是用來(lái)記錄數(shù)值的),捕獲到下一次上升沿后再把計(jì)數(shù)器的值CNT放入到捕獲寄存器CCR,兩次數(shù)值相減就知道中間經(jīng)歷了多少個(gè)上升沿,再根據(jù)中間經(jīng)過(guò)的時(shí)間就可以算出頻率。

這里的預(yù)分頻器的作用是規(guī)定采集多少次上升沿才記錄一次。

圖片

⑤公共部分:公共部分就是CCR(capture compare),捕獲/比較寄存器,用來(lái)記錄特定數(shù)值。

圖片

⑥輸出比較:輸出一些固定頻率,且電平的寬度可以調(diào)節(jié)波形信號(hào)。輸出比較就是通過(guò)定時(shí)器的計(jì)數(shù)比較控制外部引腳對(duì)外輸出高低電平,比較輸出有很多種模式,其中PWM模式是輸出比較中使用的最多的模式。

圖片

圖片

輸出比較的基本原理為:在CCR中記錄一個(gè)值,專門用來(lái)與ARR(裝載寄存器)中的值進(jìn)行比較比較的,因此可以這樣設(shè)定,當(dāng)CNT(計(jì)數(shù)器中的值,不斷變化的)小于CCR中的值時(shí)輸出低電平,當(dāng)CNT的值大于CCR中的值時(shí)輸出高電平。不會(huì)大于ARR中的值,因?yàn)锳RR的值是用戶設(shè)定的最大值,超過(guò)就會(huì)溢出觸發(fā)中斷,CNT變回0重新計(jì)數(shù)。因此通過(guò)設(shè)置CCR中的值就可以調(diào)節(jié)高/低電平的寬度,這就是所謂的PWM波的原理。

互補(bǔ)輸出和死區(qū)控制

高級(jí)控制定時(shí)器比通用定時(shí)器增加了可編程死區(qū)互補(bǔ)輸出功能,常應(yīng)用在工業(yè)電機(jī)控制方面,下面紅框中的寄存器就是用來(lái)實(shí)現(xiàn)此功能的。

圖片

H橋電機(jī)如下圖所示,從上圖中可以看到每個(gè)定時(shí)器通過(guò)DTG寄存器和輸出控制單元連接了CHx和CHxN兩根管腳,正是用來(lái)與H橋電機(jī)的OCx和OCxN相連

圖片

互補(bǔ)輸出:兩根管腳一個(gè)輸出高電平,另一個(gè)必須為低電平,在H橋電機(jī)中,OCx為高電平,OCxN必須為低電平,此時(shí)電機(jī)逆時(shí)針逆時(shí)針旋轉(zhuǎn),反之電機(jī)順時(shí)針旋轉(zhuǎn)。倘若兩根管腳同時(shí)為高電平,則會(huì)導(dǎo)致電機(jī)損毀。如圖,互補(bǔ)輸出在一根管腳變?yōu)楦唠娖降乃查g要求另一跟管腳變?yōu)榈碗娖?,但是這屬于理想狀態(tài),實(shí)際上兩根管腳的電平變化一定會(huì)有延時(shí),就會(huì)出現(xiàn)兩根管腳同時(shí)為高電平的情況,于是引入死區(qū)控制。

圖片

死區(qū)控制是當(dāng)一根管腳由高電平變?yōu)榈碗娖綍r(shí),另一管腳不會(huì)立即變?yōu)楦唠娖?,延時(shí)一小段時(shí)間后再變?yōu)楦唠娖?,延時(shí)的這一小段時(shí)間就稱之為死區(qū),插入死去就避免了電機(jī)燒毀的問(wèn)題。DTG寄存器是配置死區(qū)發(fā)生器 (Dead-time generator setup),保存的值為死區(qū)持續(xù)的時(shí)間。

圖片

STM32定時(shí)器輸入捕獲實(shí)驗(yàn)

輸入捕獲可以對(duì)輸入的信號(hào)的上升沿,下降沿或者雙邊沿進(jìn)行捕獲,常用來(lái)測(cè)量輸入信號(hào)的脈寬和頻率。加入我們?cè)O(shè)置捕獲下降沿,可以使能中斷,捕獲到下降沿后產(chǎn)生中斷,在中斷中執(zhí)行用戶程序。捕獲到下降沿后將計(jì)數(shù)器的值保存到捕獲寄存器中,當(dāng)出現(xiàn)下一次下降沿后同樣會(huì)觸發(fā)中斷,也會(huì)把當(dāng)前計(jì)數(shù)器的值保存到捕獲寄存器中。通過(guò)保存到捕獲寄存器中兩次數(shù)值的差值計(jì)信號(hào)頻率或者電平持續(xù)的時(shí)間。

圖片

如果想要捕獲脈寬,捕獲上升沿后應(yīng)該立即設(shè)置為捕獲下降沿。value2-value1就是高電平持續(xù)的時(shí)間,也就是脈寬。

實(shí)驗(yàn):利用定時(shí)器2的輸入捕獲功能測(cè)量按下KEY6鍵后低電平持續(xù)的時(shí)間

說(shuō)明:根據(jù)原理圖可得,按鍵KEY6的管腳為PA0,正常情況下管腳電平為高電平,按下后管腳電平為低電平。所以應(yīng)當(dāng)先設(shè)置捕獲下降沿,當(dāng)捕獲到下降沿后立即設(shè)置未捕獲上升沿。兩簇計(jì)數(shù)器的差值即可得低電平持續(xù)的時(shí)間,但這知識(shí)理想狀態(tài)下,實(shí)際的操作過(guò)程中人有需要考慮的因素。

圖片

如果低電平的持續(xù)時(shí)間很長(zhǎng),那么計(jì)數(shù)器不可能無(wú)限增長(zhǎng),在計(jì)數(shù)時(shí)會(huì)產(chǎn)生N次溢出。所以有如下計(jì)算方法,當(dāng)?shù)谝淮尾东@到下降沿的時(shí)候,在捕獲中斷中我們將計(jì)數(shù)器的值清零并設(shè)置下一次捕獲為上升沿,這樣,低電平持續(xù)的時(shí)間就為T=N*ARR+CCRx2。在第二次捕獲到上升沿時(shí),用戶可在上升沿捕獲中斷中統(tǒng)計(jì)時(shí)間,設(shè)置其他參數(shù)等。

圖片

步驟:

1.配置時(shí)鐘RCC。

2.選擇管腳PA0,配置為TIM2的通道1。

圖片

3.配置TIM2硬件。

圖片

4.TIM2協(xié)議參數(shù)配置。

圖片

5.中斷配置。

圖片

//mian.c 


int main(void) {  
    HAL_Init();  
    SystemClock_Config();  
    MX_GPIO_Init();  
    MX_TIM2_Init();//初始化TIM2,配置寄存器參數(shù)  
    MX_USART1_UART_Init();  
    printf("this is tim2 cap testn");  

    HAL_TIM_Base_Start_IT(&htim2);//開啟定時(shí)器2,使能更新溢出中斷  
    HAL_TIM_IC_Start_IT (&htim2, TIM_CHANNEL_1);  
    //開啟定時(shí)器2輸入捕獲功能,使能捕獲中斷,使用通道1    
    while (1)
    {} 
}
//stm32f4xxxit.c 
void TIM2_IRQHandler(void){ //中斷函數(shù)入口   
    HAL_TIM_IRQHandler(&htim2); 
}

展開函數(shù)HAL_TIM_IRQHandler();可得如下

圖片

圖片

重寫回調(diào)函數(shù)

//tim.c 
uint8_t fall_flag = 0;  //下降沿捕獲標(biāo)志位 
uint32_t cap_value = 0; 


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){    
    if(htim- >Instance == TIM2) {        
      if(fall_flag) {            
        cap_value += 1000000;//每次溢出給cap_value增加重裝載寄存器中的值            
        printf("update int n"); 
      }    
     } 
} 




void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {    
    if(htim- >Instance == TIM2) {        
        if(!fall_flag){//當(dāng)前捕獲到的是下降沿            
        printf("捕獲到的是下降沿n");             
        HAL_Delay(20);    //延時(shí)20ms消抖            
        if( HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)  == GPIO_PIN_RESET) {                
            fall_flag = 1;                
            __HAL_TIM_DISABLE(htim);//關(guān)閉定時(shí)器 
            __HAL_TIM_SET_COUNTER(htim,0);//設(shè)置計(jì)數(shù)器的值為0               
            TIM_RESET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1);//清除原來(lái)的設(shè)置 
            //設(shè)置為上升沿捕獲                
            TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);                 
            __HAL_TIM_ENABLE(htim); //使能開啟定時(shí)器    
         } 
     }else{
            printf("捕獲到的是上升n");                 
            fall_flag = 0; //當(dāng)前捕獲的是上升沿,本次捕獲結(jié)束                 
            //最終的時(shí)間=溢出的時(shí)間+當(dāng)前計(jì)數(shù)器的值+延時(shí)時(shí)間                 
            cap_value = cap_value + HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1) + 20000 ; 
            
            printf("低電平持續(xù)的時(shí)間=%d秒:%d毫秒:%d微秒n",                         
            cap_value/1000000,cap_value%1000000/1000,cap_value%1000);                 
            
            cap_value = 0; __HAL_TIM_DISABLE(htim);//關(guān)閉定時(shí)器 
            TIM_RESET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1);//清除原來(lái)的設(shè)置 
            
            //設(shè)置為下降沿捕獲                 
            TIM_SET_CAPTUREPOLARITY(htim,TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);                 
            __HAL_TIM_ENABLE(htim); //打開定時(shí)器         
            HAL_Delay(20); 
        }
     } 
}

關(guān)鍵功能函數(shù)說(shuō)明:

圖片

STM32定時(shí)器輸入捕之PWM呼吸燈實(shí)驗(yàn)

PWM(Pulse Width Modulation):脈沖寬度調(diào)制.

占空比:就是輸出的PWM中,高電平保持的時(shí)間與該P(yáng)WM的時(shí)鐘周期的時(shí)間之比 .

圖片

輸出一個(gè)波形,該波形的脈寬和頻率均可調(diào)節(jié),把這種波形叫做PWM波。通過(guò)調(diào)節(jié)脈寬可以控制電機(jī)的速度,燈的亮滅,舵機(jī)的角度等多種應(yīng)用,整個(gè)波形的平均電壓取決于占空比,占空比越大,平均電壓越高,則電機(jī)越快。

PWM應(yīng)用:它是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用于測(cè)量,通信,功率控制與變換等許多領(lǐng)域。脈沖寬度調(diào)制(PWM)是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過(guò)高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來(lái)對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。常見應(yīng)用有:電機(jī)控制,DAC輸出等。

圖片

輸出比較的基本原理為:在CCR中記錄一個(gè)值(一定比ARR中的值?。?,專門用來(lái)與ARR(裝載寄存器)中的值進(jìn)行比較比較的,因此可以這樣設(shè)定,當(dāng)CNT(計(jì)數(shù)器中的值,不斷變化的)小于CCR中的值時(shí)輸出低電平,當(dāng)CNT的值大于CCR中的值時(shí)輸出高電平。不會(huì)大于ARR中的值,因?yàn)锳RR的值是用戶設(shè)定的最大值,超過(guò)就會(huì)溢出觸發(fā)中斷,CNT變回0重新計(jì)數(shù)。因此通過(guò)設(shè)置CCR中值的大小就可以調(diào)節(jié)高/低電平的寬度,這就是所謂的PWM波的原理。

PWM輸出模式:

圖片

PWM輸出極性:1.高電平有效 2.低電平有效

輸出高電平和輸出低電平都叫做通道有效,至于是哪一種,需要用戶自己去配置他的輸出極性。例如配置PWM輸出極性為低電平有效,且計(jì)數(shù)器采用PWM1模式下遞增方式,則計(jì)數(shù)器的值小于CCR時(shí),輸出低電平,計(jì)數(shù)器的值大于CCR時(shí),輸出高電平。

呼吸燈是由亮逐漸變暗,再由暗逐漸變亮的過(guò)程,而不是瞬間亮,瞬間滅。因?yàn)殡娖阶兓乃俣群芸?,微觀實(shí)際上燈就是瞬間亮,瞬間滅,但是人眼無(wú)法分辨。宏觀上就是通過(guò)平均電壓來(lái)表現(xiàn),在單位時(shí)間內(nèi)通過(guò)配置多個(gè)有規(guī)律變化的占空比的大小就可以實(shí)現(xiàn)呼吸燈。

圖片

由上述LED燈的電器原理圖可知,PF7管腳的低電平持續(xù)時(shí)間越長(zhǎng),燈越亮,也就是占空比越小,燈越亮。本實(shí)驗(yàn)采用采用PWM1模式下遞增方式低電平有效。

步驟:

1.配置時(shí)鐘RCC.

2.選擇管腳PF7,配置為TIM11的通道1。

圖片

3.配置TIM11硬件。

圖片

4.TIM11協(xié)議參數(shù)配置。

圖片

//mian.c 


#include "main.h" 
#include "stm32f4xx_hal.h" 
#include "tim.h" 
#include "usart.h" 
#include "gpio.h" 


void SystemClock_Config(void); 


//此函數(shù)用來(lái)調(diào)節(jié)TIM11比較寄存器的大小 
void TIM11_Set_Compare(uint32_t compare) { 
    TIM11- >CCR1 = compare; 
} 


int main(void) {    
    int32_t compare = 0;   
    uint8_t dir = 0;//計(jì)數(shù)模式標(biāo)志位  

    HAL_Init();  
    SystemClock_Config();  
    MX_GPIO_Init();  
    MX_TIM11_Init();  
    MX_USART1_UART_Init();  
    printf("this is pwm led testn");  

    //啟動(dòng)PWM定時(shí)器  
    HAL_TIM_PWM_Start(&htim11, TIM_CHANNEL_1);    

    while (1)  {      
        if(!dir){ //向上計(jì)數(shù) 
            compare += 10;        
            if(compare >=1000) {            
                compare = 1000-1;            
                dir = 1;
             }      
         }else{ //向下計(jì)數(shù)          
             compare -= 10;          
             if(compare<=0) {        
                 compare = 0;                
                 dir = 0;  
             }       
         }    
     TIM11_Set_Compare(compare);//設(shè)置不同CCR值調(diào)節(jié)呼吸燈亮度    
     HAL_Delay(20);    //沒有延時(shí)的話現(xiàn)象看不到,必須有一個(gè)電平的持續(xù)時(shí)間    
     //這20ms內(nèi)亮度不變,但是肉眼不可見    
     //燈緩慢亮緩慢滅  
  } 
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    8375

    瀏覽量

    164543
  • 中斷處理
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    11477
  • PWM波
    +關(guān)注

    關(guān)注

    0

    文章

    101

    瀏覽量

    17724
  • 定時(shí)器中斷
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    11755
  • stm32定時(shí)器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2530
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32定時(shí)器功能以及應(yīng)用

    STM32哪幾種定時(shí)器?STM32定時(shí)器
    發(fā)表于 09-30 08:19

    stm32 定時(shí)器的編碼模式哪幾種

    stm32 定時(shí)器的編碼模式哪幾種呢?STM32固件庫(kù)中編碼
    發(fā)表于 11-15 06:11

    STM32常見的定時(shí)器哪幾種?

    STM32常見的定時(shí)器哪幾種?
    發(fā)表于 11-18 07:10

    STM32通用定時(shí)器的從模式哪幾種

    STM32通用定時(shí)器的從模式哪幾種呢?其代碼程序該怎樣去編寫呢?
    發(fā)表于 11-22 07:33

    STM32定時(shí)器與外部觸發(fā)的同步哪幾種模式呢

    STM32定時(shí)器與外部觸發(fā)的同步哪幾種模式呢?STM32定時(shí)器同步是怎樣的?
    發(fā)表于 11-22 07:54

    stm32定時(shí)器哪幾種?

    stm32定時(shí)器哪幾種?
    發(fā)表于 11-23 06:48

    STM32F10ZET6通用定時(shí)器的計(jì)數(shù)模式哪幾種

    STM32F10ZET6內(nèi)部哪幾種定時(shí)器呢?STM32F10ZET6通用定時(shí)器的特點(diǎn)
    發(fā)表于 11-23 06:33

    STM32F4定時(shí)器的計(jì)數(shù)模式哪幾種

    STM32F4的定時(shí)器功能有哪些?STM32F4定時(shí)器的計(jì)數(shù)模式
    發(fā)表于 11-23 06:09

    STM32定時(shí)器的同步模式哪幾種

    STM32定時(shí)器的同步模式哪幾種呢?分別有何功能?
    發(fā)表于 11-23 06:52

    STM32定時(shí)器同步模式哪幾種

    STM32定時(shí)器同步模式哪幾種?
    發(fā)表于 11-24 06:11

    STM32高級(jí)定時(shí)器-PWM簡(jiǎn)單學(xué)習(xí)案例

    高級(jí)定時(shí)器與通用定時(shí)器比較類似,下面是一個(gè)TIM1 的PWM 程序,TIM1是STM32唯一的高級(jí)定時(shí)器
    發(fā)表于 04-21 14:47 ?6092次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>高級(jí)</b><b class='flag-5'>定時(shí)器</b>-PWM簡(jiǎn)單學(xué)習(xí)案例

    STM32定時(shí)器-基本定時(shí)器

    目錄定時(shí)器分類基本定時(shí)器功能框圖講解基本定時(shí)器功能時(shí)鐘源計(jì)數(shù)時(shí)鐘計(jì)數(shù)
    發(fā)表于 11-23 18:21 ?32次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b>-基本<b class='flag-5'>定時(shí)器</b>

    STM32——高級(jí)定時(shí)器、通用定時(shí)器、基本定時(shí)器的區(qū)別

    STM32——高級(jí)定時(shí)器、通用定時(shí)器、基本定時(shí)器的區(qū)別
    發(fā)表于 11-26 15:21 ?110次下載
    <b class='flag-5'>STM32</b>——<b class='flag-5'>高級(jí)</b><b class='flag-5'>定時(shí)器</b>、通用<b class='flag-5'>定時(shí)器</b>、基本<b class='flag-5'>定時(shí)器</b>的區(qū)別

    STM32---定時(shí)器知多少

    14,15,16章節(jié),里面對(duì)定時(shí)器的知識(shí)詳細(xì)的介紹。STM32F1系列的開發(fā)板一共有8個(gè)定時(shí)器,按照功能的不同可以分為:
    發(fā)表于 11-30 14:36 ?19次下載
    <b class='flag-5'>STM32</b>---<b class='flag-5'>定時(shí)器</b>知多少

    定時(shí)器會(huì)阻塞線程嗎 定時(shí)器指令哪幾種

    定時(shí)器會(huì)阻塞線程嗎 定時(shí)器指令哪幾種? 定時(shí)器一般不會(huì)阻塞線程,但具體是否會(huì)阻塞取決于所使用的定時(shí)器
    的頭像 發(fā)表于 12-19 14:03 ?1751次閱讀