找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3134|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

飛控開(kāi)發(fā)基礎(chǔ)-[2] STM32定時(shí)器(LED航情燈、指示燈閃爍)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主

定時(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í)器是TIM2TIM3、TIM4、TIM5,基本定時(shí)器是TIM6TIM7。
而飛控的主核心STM32F103CBT6則有416位定時(shí)器分別是高級(jí)定時(shí)器TIM1、通用定時(shí)器TIM2TIM3以及TIM4。

二、定時(shí)器寄存器
STM32F103定時(shí)器相關(guān)的寄存器眾多,這里只講解重要的幾個(gè)寄存器。
(1)TIMx_CR1:使能寄存器,最低位控制寄存器的開(kāi)關(guān),如下圖所示
TIM_CR1寄存器主要配置定時(shí)器的循環(huán)計(jì)數(shù)、使能等操作,例如CEN位為1是使能計(jì)數(shù),為0是關(guān)閉計(jì)數(shù)。
(2)TIMx_DIER 定時(shí)器中斷使能寄存器, 最低位控制事件更新中斷的開(kāi)關(guān), 如下圖所示
該寄存的主要功能是配置定時(shí)器是定時(shí)器的中斷使能位,主要使用的是UIE位,UIE1是使能中斷,為0時(shí)關(guān)閉中斷。
(3)TIMx_PSC:定時(shí)器時(shí)鐘分頻寄存器,如下圖所示:
該寄存器負(fù)責(zé)把定時(shí)器時(shí)鐘分頻之后,再輸出給計(jì)數(shù)器,PSC[15:0]為分頻系數(shù)。
(4)TIMx_ARR:定時(shí)器自動(dòng)重裝載寄存器,如下圖所示:
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)志位,如下圖所示:
該寄存器主要用于查看定時(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)燈分別接在了PC13PC14上。


關(guān)于GPIO這部分的驅(qū)動(dòng)代碼可以沿襲保留,不同的是需要加入定時(shí)器的初始化以及配置定時(shí)器中斷,編寫(xiě)代碼的思路如下表所示。
編程思路
1
管腳配置
1、定義結(jié)構(gòu)體;
2、使能時(shí)鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體。
2
定時(shí)器配置
1、定義結(jié)構(gòu)體;
2、使能時(shí)鐘;
3、填充結(jié)構(gòu)體;
4、裝載結(jié)構(gòu)體;
5、使能時(shí)鐘;
6、使能定時(shí)器。
3
中斷管理配置
1、定義結(jié)構(gòu)體;
2、填充結(jié)構(gòu)體;
3、裝載結(jié)構(gòu)體。
4
中斷邏輯處理
1、判斷是否觸發(fā)中斷;
2、清除標(biāo)志位;
3、其它邏輯。
按照代碼思路,編寫(xiě)代碼(通過(guò)調(diào)用官方庫(kù))如下圖所示為GPIO相關(guān)驅(qū)動(dòng)代碼:


完成配置GPIO后,便是對(duì)定時(shí)器進(jìn)行配置,我們的STM32是外接了8MHz的晶振的,主頻是72MHz先來(lái)看一下時(shí)鐘樹(shù)圖,如下圖所示。

定時(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ù),FtAPB的主頻,也就是72MHz。那么要定時(shí)1s則只需要把arr設(shè)置為載值9999,psc設(shè)置為7199即可,即:
Tout=((9999+1)*(7199+1))/72000000
=10000*7200/72000000
=72000000/72000000
=1s
所以可以得到定時(shí)器初始化代碼如下圖所示。

配置完成后便會(huì)1s周期進(jìn)入一次定時(shí)器中斷,在定時(shí)器中斷里對(duì)無(wú)人機(jī)的航情燈以及指示燈的GPIO端口進(jìn)行翻轉(zhuǎn)即可實(shí)現(xiàn),周期性點(diǎn)亮,代碼如下圖所示。

寫(xiě)好代碼后保存、編譯、下載,然后就可以看到飛控的LED指示燈以及四個(gè)螺旋槳下面的航情燈周期1S閃爍,如下圖所示。


2.飛控開(kāi)發(fā)基礎(chǔ)-【2】定時(shí)器(LED航情燈、指示燈閃爍).pdf

940.51 KB, 下載次數(shù): 19, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表