零、參考
STM32-定時(shí)器詳解
STM32個(gè)人筆記-定時(shí)器
一、引言
本文針對(duì)STM32F103系列單片機(jī)的定時(shí)器進(jìn)行介紹。
主要是其常用功能的工作流程、以及寄存器的對(duì)應(yīng)配置。
該圖清晰的表明了各種定時(shí)器的參數(shù)與功能。其中,基礎(chǔ)定時(shí)器基本上就只有最簡(jiǎn)單的計(jì)數(shù)到了然后觸發(fā)中斷的功能;通用和高級(jí)定時(shí)器,在其基礎(chǔ)上還有PWM輸出、捕獲/比較、剎車、死區(qū)設(shè)置等功能。圖片來(lái)源
二、功能以及寄存器說(shuō)明
1、最基本的定時(shí)功能(時(shí)基單元)
1.1 框圖
這是截取了參考手冊(cè)中三種定時(shí)器的款圖,對(duì)于下半部分該功能涉及不到。
對(duì)于定時(shí)器的始終來(lái)源CK_INT,大家可以根據(jù)RCC時(shí)鐘樹,查看時(shí)鐘源頻率是多少。
從CK_INT到CK_PSC,三種類型的定時(shí)器基本都是一致的;從CK_PSC到最后的中斷觸發(fā),不同的是高級(jí)定時(shí)器還有一個(gè)重復(fù)數(shù)據(jù)定時(shí)器。也就是說(shuō)高級(jí)定時(shí)器,并不是當(dāng)計(jì)數(shù)器溢出之后就立即觸發(fā)中斷,其還會(huì)經(jīng)過(guò)重復(fù)計(jì)數(shù)器的操作才會(huì)被觸發(fā)。
影子寄存器
:框圖中帶有陰影的寄存器,除了自己本體外,還有一個(gè)一模一樣的影子寄存器。我們可以將本體理解為用來(lái)當(dāng)作緩沖的,影子才是真正起作用的。為什么這樣設(shè)計(jì)呢?比如,當(dāng)定時(shí)器正在運(yùn)行當(dāng)中,此時(shí)ARR=36,CNT計(jì)數(shù)到32,就在這時(shí),我們修改ARR為30,如果沒(méi)有影子,那么CNT此時(shí)來(lái)說(shuō)已經(jīng)溢出了,會(huì)直接觸發(fā)中斷,但是很明顯,由于我們的修改,怕破壞了當(dāng)前定時(shí)器輸出的周期,如果是PWM輸出的話,在要求及其嚴(yán)格的場(chǎng)景下,可能會(huì)產(chǎn)生某些誤差。所以增加了影子寄存器,當(dāng)我們修改重要寄存器的時(shí)候會(huì)先放到本體寄存器,然后當(dāng)當(dāng)前周期結(jié)束時(shí),才會(huì)由UEV事件觸發(fā),將本體中的設(shè)置放到影子中起作用。
從圖中可以看出,當(dāng)新值寫入時(shí),是先寫入到本體,并未起作用。當(dāng)當(dāng)前運(yùn)行周期結(jié)束后,才會(huì)將新值加載到影子中。
1.2 工作流程
對(duì)于基本和通用定時(shí)器:
PSC預(yù)分頻器,根據(jù)設(shè)置的分頻數(shù),將CK_INT傳遞過(guò)來(lái)的時(shí)鐘頻率分頻后,驅(qū)動(dòng)CNT計(jì)數(shù)器計(jì)數(shù)。即計(jì)一個(gè)數(shù)的時(shí)間t是1/(TIMxCLK/(PSC+1))=(PSC+1)/TIMxCLK;那么將CNT中的數(shù)據(jù)計(jì)完,需要的時(shí)間為(ARR+1)*(PSC+1)/TIMxCLK。然后觸發(fā)中斷,ARR會(huì)將數(shù)據(jù)重新裝到CNT中,然后執(zhí)行中斷服務(wù)函數(shù)。
例如,TIMXCLK=72MHz,PSC=7199,ARR=4999。則中斷事件為t=(4999+1)*(7199+1)/ 72 * 1000000 = 0.5s,即500ms產(chǎn)生一次中斷。注意時(shí)間與頻率的關(guān)系。
而對(duì)于高級(jí)定時(shí)器:
當(dāng)上述CNT計(jì)數(shù)溢出之后,并不是直接觸發(fā)中斷,而是觸發(fā)重復(fù)計(jì)數(shù)器(RCR)計(jì)數(shù),當(dāng)RCR計(jì)數(shù)溢出之后,才會(huì)觸發(fā)中斷服務(wù)函數(shù)。
1.3 寄存器介紹
根據(jù)stm32固件庫(kù),我們可以看出,只需要對(duì)
時(shí)基初始化結(jié)構(gòu)體 TIM_TimeBaseInitTypeDef
結(jié)構(gòu)體進(jìn)行配置能,就能實(shí)現(xiàn)最基本的定時(shí)器功能。
先看該結(jié)構(gòu)體中有哪些東西:
再看初始化函數(shù):
不難發(fā)現(xiàn),使用的寄存器有:CR1、PSC、ARR、CNT、RCR、EGR。
其中CNT寄存器,在框圖中出現(xiàn)了。
1.3.1 CR1寄存器
位0:計(jì)數(shù)器使能,必須開啟
位1:是否允許中斷差觸發(fā)UEV,進(jìn)而更新影子寄存器
位2:設(shè)置哪些事件能觸發(fā)中斷
位4-位6:5:計(jì)數(shù)方式的設(shè)置
位7:是否使用ARR的影子寄存器
1.3.2 CNT、PSC、ARR寄存器
這三個(gè)沒(méi)什么好說(shuō)的,知道如何計(jì)算中斷時(shí)間就行。PSC和ARR的范圍為1-65535。
1.3.3 EGR寄存器
對(duì)于高級(jí)和通用定時(shí)器,EGR寄存器還有很多其他功能,但是就對(duì)基本的使用來(lái)說(shuō),僅需設(shè)置這一位。
這一位什么意思呢?中斷的產(chǎn)生都是硬件自動(dòng)控制的(溢出等)。而這個(gè)是用來(lái)通過(guò)軟件的方式觸發(fā)中斷或者事件更新的,進(jìn)而將本體寄存器中的值放入到影子寄存器中。
例如,在固件庫(kù)中,初始化的時(shí)候,這一位是設(shè)置為1的。即初始化的時(shí)候,立馬觸發(fā)一個(gè)中斷,將該放的數(shù)據(jù)放到該放的位置。
1.3.4 RCR寄存器
該寄存器只有高級(jí)定時(shí)器才有。
所以,當(dāng)用高級(jí)定時(shí)器來(lái)實(shí)現(xiàn)定時(shí)功能的時(shí)候,該位應(yīng)該設(shè)置為0,否則,定時(shí)事件會(huì)感覺(jué)很長(zhǎng)。固件庫(kù)配置默認(rèn)為0。
關(guān)于其最后兩句話,通過(guò)下圖很好理解。
1.3.5 DIER寄存器
在定時(shí)功能下,只需要設(shè)置最后一位。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-606359.html
在庫(kù)函數(shù)中,TIM_ITConfig函數(shù)就是用來(lái)是遏制允許中斷的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-606359.html
到了這里,關(guān)于【STM32學(xué)習(xí)】定時(shí)器寄存器配置、功能工作過(guò)程詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!