圖片1.png (290.15 KB, 下載次數(shù): 60)
下載附件
2020-3-26 15:39 上傳
定時(shí)器(LED航情燈、指示燈閃爍)一、定時(shí)器簡(jiǎn)介
定時(shí)器具有定時(shí)功能,類(lèi)似于生活中的“鬧鐘”,可以用定時(shí)器產(chǎn)生精確的定時(shí)時(shí)間,用來(lái)延時(shí)或者處理一些實(shí)時(shí)事件。 STM32系列的定時(shí)器分為基本定時(shí)器、通用定時(shí)器、高級(jí)控制定時(shí)器。后者包括前者的全部功能。通常地,STM32高級(jí)定時(shí)器是TIM1、TIM8,通用定時(shí)器是TIM2、TIM3、TIM4、TIM5,基本定時(shí)器是TIM6、TIM7。 而飛控的主核心STM32F103CBT6則有4路16位定時(shí)器分別是高級(jí)定時(shí)器TIM1、通用定時(shí)器TIM2、TIM3以及TIM4。
二、定時(shí)器寄存器STM32F103定時(shí)器相關(guān)的寄存器眾多,這里只講解重要的幾個(gè)寄存器。 (1)TIMx_CR1:使能寄存器,最低位控制寄存器的開(kāi)關(guān),如下圖所示:
圖片1.png (9.36 KB, 下載次數(shù): 66)
下載附件
2020-3-26 15:40 上傳
TIM_CR1寄存器主要配置定時(shí)器的循環(huán)計(jì)數(shù)、使能等操作,例如CEN位為1是使能計(jì)數(shù),為0是關(guān)閉計(jì)數(shù)。 (2)TIMx_DIER: 定時(shí)器中斷使能寄存器, 最低位控制事件更新中斷的開(kāi)關(guān), 如下圖所示:
圖片2.png (8.27 KB, 下載次數(shù): 54)
下載附件
2020-3-26 15:40 上傳
該寄存的主要功能是配置定時(shí)器是定時(shí)器的中斷使能位,主要使用的是UIE位,UIE為1是使能中斷,為0時(shí)關(guān)閉中斷。 (3)TIMx_PSC:定時(shí)器時(shí)鐘分頻寄存器,如下圖所示:
圖片3.png (5.77 KB, 下載次數(shù): 54)
下載附件
2020-3-26 15:40 上傳
該寄存器負(fù)責(zé)把定時(shí)器時(shí)鐘分頻之后,再輸出給計(jì)數(shù)器,PSC[15:0]為分頻系數(shù)。 (4)TIMx_ARR:定時(shí)器自動(dòng)重裝載寄存器,如下圖所示:
圖片4.png (5.56 KB, 下載次數(shù): 53)
下載附件
2020-3-26 15:41 上傳
ARR[15:0]為自動(dòng)重裝載值,當(dāng)定時(shí)器采用向上計(jì)數(shù)時(shí),計(jì)數(shù)值等于ARR時(shí),產(chǎn)生一個(gè)更新事件;當(dāng)定時(shí)器采用向下計(jì)數(shù)時(shí),最開(kāi)始將ARR的值賦給計(jì)數(shù)值,計(jì)數(shù)值向下累減為0時(shí),產(chǎn)生一個(gè)更新事件,再次將ARR的值賦給計(jì)數(shù)值,進(jìn)行新一輪的向下計(jì)數(shù)。 (5)TIMx_SR: 狀態(tài)寄存器,標(biāo)記當(dāng)前與定時(shí)器相關(guān)的各種事件/中斷是否發(fā)生,我們只用到最低位表示事件更新中斷的標(biāo)志位,如下圖所示:
圖片5.png (10.49 KB, 下載次數(shù): 60)
下載附件
2020-3-26 15:41 上傳
該寄存器主要用于查看定時(shí)器的更新中斷標(biāo)志位,當(dāng)計(jì)數(shù)發(fā)生上溢或者下溢時(shí),UIF位將被置1,標(biāo)志一次計(jì)數(shù)完成。 三、定時(shí)器實(shí)驗(yàn)本節(jié)實(shí)驗(yàn)的內(nèi)容是主要是針對(duì)GPIO中的周期性點(diǎn)亮無(wú)人機(jī)的航情燈以及信號(hào)燈,對(duì)其進(jìn)行變形,使用通用定時(shí)器TIM3精確定時(shí)周期性點(diǎn)亮及關(guān)閉無(wú)人機(jī)的航情燈以及信號(hào)燈。 同樣也是查看原理圖可以得知無(wú)人機(jī)的航情燈同一接在NPN三極管Q1上,而三極管的基極又接在了單片機(jī)的PA8上;兩個(gè)信號(hào)燈分別接在了PC13和PC14上。
圖片6.png (552.55 KB, 下載次數(shù): 59)
下載附件
2020-3-26 15:42 上傳
圖片7.png (9.43 KB, 下載次數(shù): 60)
下載附件
2020-3-26 15:42 上傳
圖片8.png (84.6 KB, 下載次數(shù): 55)
下載附件
2020-3-26 15:43 上傳
關(guān)于GPIO這部分的驅(qū)動(dòng)代碼可以沿襲保留,不同的是需要加入定時(shí)器的初始化以及配置定時(shí)器中斷,編寫(xiě)代碼的思路如下表所示。 編程思路 1 | | 1、定義結(jié)構(gòu)體; 2、使能時(shí)鐘; 3、填充結(jié)構(gòu)體; 4、裝載結(jié)構(gòu)體。 | | | 1、定義結(jié)構(gòu)體; 2、使能時(shí)鐘; 3、填充結(jié)構(gòu)體; 4、裝載結(jié)構(gòu)體; 5、使能時(shí)鐘; 6、使能定時(shí)器。 | | | 1、定義結(jié)構(gòu)體; 2、填充結(jié)構(gòu)體; 3、裝載結(jié)構(gòu)體。 | | | 1、判斷是否觸發(fā)中斷; 2、清除標(biāo)志位; 3、其它邏輯。 |
按照代碼思路,編寫(xiě)代碼(通過(guò)調(diào)用官方庫(kù))如下圖所示為GPIO相關(guān)驅(qū)動(dòng)代碼:
圖片9.png (22.46 KB, 下載次數(shù): 57)
下載附件
2020-3-26 15:44 上傳
圖片10.png (28.25 KB, 下載次數(shù): 52)
下載附件
2020-3-26 15:44 上傳
完成配置GPIO后,便是對(duì)定時(shí)器進(jìn)行配置,我們的STM32是外接了8MHz的晶振的,主頻是72MHz先來(lái)看一下時(shí)鐘樹(shù)圖,如下圖所示。
圖片11.png (2.55 MB, 下載次數(shù): 53)
下載附件
2020-3-26 15:44 上傳
定時(shí)器是掛載在APB1時(shí)鐘總線下的(從手冊(cè)可知),從時(shí)鐘樹(shù)圖中可知APB1用于定時(shí)器的時(shí)鐘頻率在未分頻的是情況下72MHz,根據(jù)定時(shí)器時(shí)鐘分頻寄存器(TIMx_PSC)以及定時(shí)器自動(dòng)重裝載寄存器(TIMx_ARR)之間的關(guān)系,可以得出,定時(shí)時(shí)間: Tout=((arr+1)*(psc+1))/Ft s 其中Tout為定時(shí)時(shí)間單位為s,arr為自動(dòng)重裝載寄存器的初值,psc為分頻系數(shù),Ft為APB的主頻,也就是72MHz。那么要定時(shí)1s則只需要把arr設(shè)置為載值9999,psc設(shè)置為7199即可,即: Tout=((9999+1)*(7199+1))/72000000 =10000*7200/72000000 =72000000/72000000 =1s 所以可以得到定時(shí)器初始化代碼如下圖所示。
圖片12.png (64.09 KB, 下載次數(shù): 61)
下載附件
2020-3-26 15:46 上傳
配置完成后便會(huì)1s周期進(jìn)入一次定時(shí)器中斷,在定時(shí)器中斷里對(duì)無(wú)人機(jī)的航情燈以及指示燈的GPIO端口進(jìn)行翻轉(zhuǎn)即可實(shí)現(xiàn),周期性點(diǎn)亮,代碼如下圖所示。
圖片13.png (32.52 KB, 下載次數(shù): 56)
下載附件
2020-3-26 15:47 上傳
寫(xiě)好代碼后保存、編譯、下載,然后就可以看到飛控的LED指示燈以及四個(gè)螺旋槳下面的航情燈周期1S閃爍,如下圖所示。
圖片14.png (330.16 KB, 下載次數(shù): 62)
下載附件
2020-3-26 15:47 上傳
|