圖片1.png (290.15 KB, 下載次數(shù): 45)
下載附件
2020-3-26 15:02 上傳
GPIO(LED航情燈、信號(hào)燈控制)一、LED1.1 LED簡(jiǎn)介LED(Light Emitting Diode)即為發(fā)光二極管的縮寫。LED是一種在生活中非常常見(jiàn)的照明發(fā)光器件。LED的在我們生活中形態(tài)種類非常的多,如下圖所示。
2.png (243.72 KB, 下載次數(shù): 51)
下載附件
2020-3-26 15:05 上傳
|
|
盡管LED在我們生活中形態(tài)非常地多,但這所有的LED在電路里均使用如下圖所示的符號(hào)來(lái)表示。
圖片3.png (30.28 KB, 下載次數(shù): 41)
下載附件
2020-3-26 15:09 上傳
1.2 LED發(fā)光原理LED最重要的一個(gè)發(fā)光結(jié)構(gòu)就是燈內(nèi)如綠豆大小般的燈珠。雖然它的體積很小,但它卻內(nèi)有乾坤,如下圖所示為LED內(nèi)部構(gòu)造。
圖片4.png (915.87 KB, 下載次數(shù): 48)
下載附件
2020-3-26 15:10 上傳
這個(gè)結(jié)構(gòu)極其復(fù)雜,一共分為好幾層:最上層叫做P型半導(dǎo)體層、中間層為發(fā)光層、最下層叫做N型半導(dǎo)體層。 從物理學(xué)角度來(lái)理解:當(dāng)電流通過(guò)晶片時(shí),N型半導(dǎo)體內(nèi)的電子與P型半導(dǎo)體內(nèi)的空穴在發(fā)光層劇烈地碰撞復(fù)合產(chǎn)生光子,以光子的形式發(fā)出能量(即大家看見(jiàn)的光)。 二、GPIO2.1 GPIO簡(jiǎn)介GPIO(General-purpose input/output),通用的輸入輸出的簡(jiǎn)稱,單片機(jī)的引腳可以供使用者自由使用,可以配置為輸出,也可以配置為輸入。其中輸出又可以是輸出“高電平”或者“低電平”。在電子電路中“高電平”是電壓高的狀態(tài),用邏輯來(lái)表示即為1,“低電平”是電壓低的狀態(tài),用邏輯來(lái)表示即為0。 STM32F103系列是意法半導(dǎo)體基于ARM Cortex M3內(nèi)核的32位單片機(jī),飛控上用的主核心是48腳的STM32F103CBT6,其引腳如下圖所示。
5.png (74.38 KB, 下載次數(shù): 50)
下載附件
2020-3-26 15:26 上傳
STM32F103CBT6的GPIO的功能較多,有A、B、C、D等四組GPIO,每組每個(gè)GPIO口都可以作為輸出輸出口使用之外, 還能作為復(fù)用引腳使用, 比如串口、I2C、SPI 等特殊接口的引腳。 但是需要注意的是每個(gè)引腳的復(fù)用功能是有限制的, 所以硬件連接時(shí)需要注意每個(gè)引腳有哪些復(fù)用功能, 這個(gè)可以在 STM32F103的數(shù)據(jù)手冊(cè)中查看。GPIO 口一共有 8 種模式,分別為:浮空輸入,上拉輸入,下拉輸入,模擬輸入,開(kāi)漏輸出,推挽輸出,推挽式復(fù)用功能,開(kāi)漏式復(fù)用功能,如下表所示。 STM32F103GPIO工作模式 GPIO的工作模式 | | | | (1)GPIO_Mode_IN_FLOATING 浮空輸入
(2)GPIO_Mode_IPU 上拉輸入
(3)GPIO_Mode_IPD 下拉輸入
(4)GPIO_Mode_AIN 模擬輸入 | (1)GPIO_Mode_Out_OD 開(kāi)漏輸出(帶上拉或者下拉)
(2)GPIO_Mode_AF_OD 復(fù)用開(kāi)漏輸出(帶上拉或者下拉)
(3)GPIO_Mode_Out_PP 推挽輸出(帶上拉或者下拉)
(4)GPIO_Mode_AF_PP 復(fù)用推挽輸出(帶上拉或者下拉) | (1)10MHZ
(2)2MHZ
(3)50MHZ
|
這8種功能我們就不一一介紹了, 有興趣可以上網(wǎng)搜索了解一下,這里主要講解一下開(kāi)漏輸出和推挽輸出的區(qū)別。
(1)開(kāi)漏輸出:
輸出端相當(dāng)于三極管的集電極. 需要上拉電阻才能得到高電平, 利用外部上拉電阻的驅(qū)動(dòng)能力,減少IC內(nèi)部的驅(qū)動(dòng),驅(qū)動(dòng)能力強(qiáng),適合于做電流型的驅(qū)動(dòng),可達(dá)到20mA。
(2)推挽輸出:
可以輸出高,低電平,連接數(shù)字器件,是由兩個(gè)參數(shù)相同的三極管或 MOSFET以推挽方式連接,各負(fù)責(zé)正負(fù)半周的波形放大任務(wù)。電路工作時(shí),兩只對(duì)稱的功率開(kāi)關(guān)管每次只有一個(gè)導(dǎo)通,所以導(dǎo)通損耗小、效率高,既提高電路的負(fù)載能力,又提高開(kāi)關(guān)速度。 總結(jié)一下:推挽輸出可以輸出強(qiáng)高低電平,連接數(shù)字器件;而開(kāi)漏輸出只可以輸出低電平,高電平得靠外部電阻拉高。輸出端相當(dāng)于三極管的集電極,要得到高電平狀態(tài)需要上拉電阻才行,適合于做電流型的驅(qū)動(dòng),其吸收電流的能力相對(duì)強(qiáng)(一般20ma以內(nèi))。 2.2 GPIO相關(guān)寄存器STM32F103的每個(gè)GPIO端口有:兩個(gè)32位配置寄存器(GPIOx_CRL和GPIOx_CRH)、兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR)、一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR)、一個(gè)16位復(fù)位寄存器(GPIOx_BRR)、一個(gè)32位鎖定寄存器(GPIOx_LCKR)。 (1)GPIOx_CRL寄存器(x=A~G)
6.png (14.61 KB, 下載次數(shù): 51)
下載附件
2020-3-26 15:27 上傳
該寄存器用于配置IO0~7的輸入輸出模式以及速率設(shè)置。 (2)GPIOx_CRH寄存器(x=A~G)
7.png (18.45 KB, 下載次數(shù): 58)
下載附件
2020-3-26 15:27 上傳
該寄存器用于配置IO8~15的輸入輸出模式以及速率設(shè)置。 (3)GPIOx_IDR寄存器(x=A~G)
8.png (11.16 KB, 下載次數(shù): 44)
下載附件
2020-3-26 15:28 上傳
IDR是GPIO的輸入數(shù)據(jù)寄存器。通過(guò)IDR寄存器可以讀出IO的狀態(tài)。需要注意的是IDR寄存器只能以字(16位)的形式讀出。 (4)GPIOx_ODR寄存器(x=A~G)
9.png (12.08 KB, 下載次數(shù): 40)
下載附件
2020-3-26 15:28 上傳
ODR是GPIO的輸出數(shù)據(jù)寄存器。通過(guò)ODR寄存器可以輸出高低電平。 (5)GPIOx_BSRR寄存器(x=A~G)
10.png (14.65 KB, 下載次數(shù): 44)
下載附件
2020-3-26 15:29 上傳
BSRR是GPIO的端口位設(shè)置/清除寄存器。BSRR寄存器的高16位是清除IO位,低16位是置位IO位。需要注意的是BSRR只有在寫入1的時(shí)候,相應(yīng)的功能才有作用,寫入0是無(wú)效的。 (6)GPIOx_BRR寄存器(x=A~G)
11.png (639.23 KB, 下載次數(shù): 41)
下載附件
2020-3-26 15:31 上傳
BRR是GPIO的端口位清除寄存器。BRR基礎(chǔ)只有在寫入1的時(shí)候,相應(yīng)的功能才有作用,寫入0無(wú)效。 (7)GPIOx_LCKR寄存器(x=A~G)
13.png (12.7 KB, 下載次數(shù): 48)
下載附件
2020-3-26 15:32 上傳
LCKR是GPIO的端口配置鎖定寄存器。LCKR寄存器用來(lái)鎖定IO口的配置,設(shè)置后,除了復(fù)位后不能再配置IO的狀態(tài)。 2.3 GPIO實(shí)驗(yàn)本節(jié)實(shí)驗(yàn)的內(nèi)容是周期性點(diǎn)亮無(wú)人機(jī)的航情燈以及信號(hào)燈,其中航情燈在四個(gè)螺旋槳底下,而信號(hào)燈則在開(kāi)關(guān)兩側(cè)。 查看原理圖可以得知無(wú)人機(jī)的航情燈同一接在NPN三極管Q1上,而三極管的基極又接在了單片機(jī)的PA8上;兩個(gè)信號(hào)燈分別接在了PC13和PC14上。
14.png (552.55 KB, 下載次數(shù): 43)
下載附件
2020-3-26 15:33 上傳
15.png (9.43 KB, 下載次數(shù): 61)
下載附件
2020-3-26 15:33 上傳
16.png (84.6 KB, 下載次數(shù): 38)
下載附件
2020-3-26 15:33 上傳
編寫代碼的思路如下表所示 1 | | 1、定義結(jié)構(gòu)體; 2、使能時(shí)鐘; 3、填充結(jié)構(gòu)體; 4、裝載結(jié)構(gòu)體。 | | | |
按照代碼思路,編寫代碼(通過(guò)調(diào)用官方庫(kù)) 如下圖所示:
17.png (22.46 KB, 下載次數(shù): 50)
下載附件
2020-3-26 15:34 上傳
18.png (28.25 KB, 下載次數(shù): 46)
下載附件
2020-3-26 15:34 上傳
完成配置后只需要周期點(diǎn)亮以及關(guān)閉LED即可。
19.png (554.68 KB, 下載次數(shù): 44)
下載附件
2020-3-26 15:35 上傳
其中延時(shí)如下圖所示。
20.png (513.01 KB, 下載次數(shù): 49)
下載附件
2020-3-26 15:35 上傳
保存、編譯、下載,如下圖所示,1為保存,2為編譯,3為下載。
21.png (97.72 KB, 下載次數(shù): 46)
下載附件
2020-3-26 15:36 上傳
下載代碼到飛控上,就可以看到飛控的LED指示燈以及四個(gè)螺旋槳下面的航情燈周期閃爍的現(xiàn)象了,如下圖所示。
22.png (2.25 MB, 下載次數(shù): 42)
下載附件
2020-3-26 15:36 上傳
2.飛控開(kāi)發(fā)基礎(chǔ)-【1】GPIO.pdf
(1.09 MB, 下載次數(shù): 18)
2020-3-26 15:24 上傳
點(diǎn)擊文件名下載附件
1 下載積分: 黑幣 -5
|