|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机系列 GPIO(LED 航情灯、信号灯控制)
5 e( D( o% X9 V& C' e+ C0 p: O+ v/ X) ^: R6 f% h
5 S4 Z% D, f( `8 X% u7 L% `) q/ o- \
; O* `% i; \/ j0 G: D" M. N
图11 v" @. b- f9 X
5 g5 g# V1 d5 Y6 Z
一、LED u2 Z4 @* I$ N2 f& D; A. Z
1.1LED 简介# n7 \' n0 X' r0 c
LED(Light Emitting Diode)即为发光二极管的缩写。LED 是一种在生活中非常常见的照明发光器件。LED 的在我们生活中形态种类非常的多,如下图所示。
+ Z; M& n. N( j0 F% _$ R# s1 _1 b0 \5 E
. G) F, B# N+ i. W
图2 图3
0 O4 u; t& q- M( _5 I+ C5 b2 ~ 尽管 LED 在我们生活中形态非常地多,但这所有的 LED 在电路里均使用如下图所示的符号来表示。+ c- H! o& ]% o0 H! a
" @2 L* W9 ~2 w0 b+ F! O4 `, Q
! l; t, {" f7 S8 v: d
图4
4 @1 I3 r' O( ^( ^. r/ {, m2 n2 H! x2 n
1.2LED 发光原理* B; E X) D: a! ?* t5 Y
LED 最重要的一个发光结构就是灯内如绿豆大小般的灯珠。虽然它的体积很小,但它却内有乾坤,如下图所示为 LED 内部构造。
" }2 E K/ ~: [2 Y: Q
# [ b* f5 S+ H3 J
% {/ m4 c! E( W1 E7 Q8 }' _
图52 {4 h- X$ I P
& w/ {1 x9 Q- o' z& X
这个结构极其复杂,一共分为好几层:最上层叫做 P 型半导体层、中间层为发光层、最下层叫做 N 型半导体层。) |) `# O! Y1 E2 Q5 V/ m) v7 K
从物理学角度来理解:当电流通过晶片时,N 型半导体内的电子与 P 型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)。
6 j- \! Z3 f0 {9 {8 D 二、GPIO- C# N# W, ]4 q; I
2.1GPIO 简介
+ {" l" U# u4 U" J GPIO(General-purpose input/output),通用的输入输出的简称,单片机的引脚可以供使用者自由使用,可以配置为输出,也可以配置为输入。其中输出又可以是输出“高电平”或者“低电平”。在电子电路中“高电平”是电压高的状态, 用逻辑来表示即为 1,“低电平”是电压低的状态,用逻辑来表示即为 0。
( k; V7 e: |' ^$ U9 U: \ STM32F103 系列是意法半导体基于 ARM Cortex M3 内核的 32 位单片机, 飞控上用的主核心是 48 脚的 STM32F103CBT6,其引脚如下图所示。: t. v/ w# f2 Z9 `8 U& n# _9 L
, I4 t) q& Q5 _3 e2 ~7 A. u% W
2 U" ]4 O. U* x; |" r( z
* o9 `8 k: A- r9 G 图6
: ]- [' Z N4 X6 `& J
) n5 \# B3 N4 D/ k STM32F103CBT6 的 GPIO 的功能较多,有 A、B、C、D 等四组 GPIO,每组每个 GPIO 口都可以作为输出输出口使用之外, 还能作为复用引脚使用, 比如串口、I2C、SPI 等特殊接口的引脚。 但是需要注意的是每个引脚的复用功能是有限制的, 所以硬件连接时需要注意每个引脚有哪些复用功能, 这个可以在STM32F103 的数据手册中查看。GPIO 口一共有 8 种模式,分别为:浮空输入, 上拉输入,下拉输入,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏式复用功能,如下表所示。- K+ k; ~; u) b9 L
STM32F103GPIO 工作模式' F7 |8 v1 _/ v5 n! `" K
: I0 {( a6 a3 \/ v$ f4 c
9 D* F' a, b) e" q, X J' O
图7 H3 u7 V: i! I5 ?0 e
这 8 种功能我们就不一一介绍了, 有兴趣可以上网搜索了解一下,这里主要讲解一下开漏输出和推挽输出的区别。8 p, U' L1 B& A0 P# `8 [7 ?
(1)开漏输出:7 r6 }4 I( v: |6 ?5 N
输出端相当于三极管的集电极. 需要上拉电阻才能得到高电平, 利用外部上拉电阻的驱动能力,减少 IC 内部的驱动,驱动能力强,适合于做电流型的驱动, 可达到 20mA。
/ W- s, o$ G% I% V) ^; q6 l (2)推挽输出:# X2 a! b: Q6 h2 n V1 n5 j$ f6 i
可以输出高,低电平,连接数字器件,是由两个参数相同的三极管或 MOSFET 以推挽方式连接,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高,既提高电路的负载能力, 又提高开关速度。, @% V, g) q" s# U* M
总结一下:推挽输出可以输出强高低电平,连接数字器件;而开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma 以内)。% X# R. l3 h, H6 X' |7 r
2.2GPIO 相关寄存器
9 I% N2 B8 b3 u2 P. A$ q STM32F103 的每个 GPIO 端口有:两个 32 位配置寄存器(GPIOx_CRL 和GPIOx_CRH)、两个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、一个 32 位置位/复位寄存器(GPIOx_BSRR)、一个 16 位复位寄存器(GPIOx_BRR)、一个 32 位锁定寄存器(GPIOx_LCKR)。
* Z) k+ U( n- c; a) J0 ~$ K/ n (1)GPIOx_CRL 寄存器(x=A~G)
8 N* r& F D3 k, C
4 H6 T3 C w# u- D
l9 K/ p- d; G+ f1 k& @* n 图8
) |5 G% \! n& | 该寄存器用于配置 IO0~7 的输入输出模式以及速率设置。
, D; r9 I& ]& [, A M (2)GPIOx_CRH 寄存器(x=A~G)
7 g$ \5 D; N. T& C! ^# {, N2 n# z/ P, a% ^6 J
' m" Y/ D, {) H7 H5 y
. z) a0 J0 u4 p4 s Q2 }
图9
: F8 f1 R7 |. U O4 E# f1 L 该寄存器用于配置 IO8~15 的输入输出模式以及速率设置。9 K5 v. u6 i( M3 Q
(3)GPIOx_IDR 寄存器(x=A~G)% r6 L, U$ Z9 J8 @# Y% x+ i0 t! |6 B4 o
- z1 \" @) [' U! B: v! X# w
9 v- }, @% M5 ^' ?" x m4 U8 Y
图10, z5 w1 b( D0 C' N0 `2 \' I. C
IDR 是 GPIO 的输入数据寄存器。通过 IDR 寄存器可以读出 IO 的状态。需要注意的是 IDR 寄存器只能以字(16 位)的形式读出。; W' Q/ e9 ?. C( K1 {
(4)GPIOx_ODR 寄存器(x=A~G)9 J% E1 X( F W, F( Z( ]
6 `3 A, S1 v3 C, ^ l& V
3 H% G, a6 \" A 图119 l4 C4 t; y6 F
6 G Q$ @9 W$ L+ @- B
ODR 是 GPIO 的输出数据寄存器。通过 ODR 寄存器可以输出高低电平。: E. `' q# A( Y( e0 m9 V
(5)GPIOx_BSRR 寄存器(x=A~G), f5 [- J; B4 E0 }
; F! i* N; _9 I
( R" ]- r- [2 m9 e, h 图12
2 e. d; ]1 g$ A# R/ j( n5 E; w* q- B2 Q" a- @; A
BSRR 是GPIO 的端口位设置/清除寄存器。BSRR 寄存器的高 16 位是清除IO 位,低 16 位是置位 IO 位。需要注意的是 BSRR 只有在写入 1 的时候,相应的功能才有作用,写入 0 是无效的。0 t# C/ F" g& \! S7 ~- O0 _) G
(6)GPIOx_BRR 寄存器(x=A~G)$ f# p. K# R, c3 V: |
2 S: Y% B9 v) i/ E* S' R' @" X$ c
4 W. s2 q# U: K, V* i 图13
1 k- E8 `; K2 u9 G6 g4 l: W9 m% o5 r BRR 是 GPIO 的端口位清除寄存器。BRR 基础只有在写入 1 的时候,相应的功能才有作用,写入 0 无效。. t! a# {' m& K& c9 ^
(7)GPIOx_LCKR 寄存器(x=A~G)
/ z1 L5 ^7 X) e- s5 Y
! x2 r( K4 _4 |9 C/ }$ Y h$ M
4 R% G5 Q9 _1 r$ I0 Z5 x" t
图14$ b% F6 ]( ?# [" e& y0 F1 x
LCKR 是GPIO 的端口配置锁定寄存器。LCKR 寄存器用来锁定IO 口的配置, 设置后,除了复位后不能再配置 IO 的状态。
. j U# l2 S' o" a& t
9 ?- ?3 J* V% K- h 2.3GPIO 实验/ I" Y# F6 [0 |3 b; D
本节实验的内容是周期性点亮无人机的航情灯以及信号灯,其中航情灯在四个螺旋桨底下,而信号灯则在开关两侧。8 L$ \4 t8 |7 A1 b9 K
查看原理图可以得知无人机的航情灯同一接在 NPN 三极管 Q1 上,而三极管的基极又接在了单片机的 PA8 上;两个信号灯分别接在了 PC13 和 PC14 上。
# N4 R d% p, R, {2 g5 j$ C
/ Q5 L \& J; o3 [+ D" f+ M+ v& h& i6 y- I) J4 M
! S: U& \: q0 a, H4 B4 S
图15 图16
5 i! _; z# n+ C0 _8 ]0 @5 h* d
4 t3 |+ e: z- u/ r2 W! \) S+ j" \
2 b3 S6 A% v9 s
6 N1 h* D# ]1 D ^" i2 ^$ M. _ 图173 h, D! ? Q# q5 Z8 d
7 [( P4 G; \5 {6 }; d
编写代码的思路如下表所示6 ?; Q6 ^9 C- M# Q
+ u/ C; M$ F) C4 h2 \- ~
' ^5 c1 w# S5 {( a 图18
7 U6 ]. M8 a& H 按照代码思路,编写代码(通过调用官方库) 如下图所示:+ e( t* G- `1 r) d* o
6 h& s# N8 C. e; O) Z, R8 ^$ C6 _& x' f
7 {3 s2 W: A; y% n& N0 o! b) f: H 图19
4 |; R8 w$ H3 A& F& o5 v" \1 J! K* _- a4 O9 ?
* b, r" T- A- K
w, R9 g4 T9 o8 ] 图20+ N1 n) i7 P. W/ k
完成配置后只需要周期点亮以及关闭 LED 即可。( R. z& [. P# z- X
7 f: K* T2 t- A+ Z5 c/ b
2 s1 H& R& L$ x) J# ~+ \ 图21% P8 \# R+ D! Z& ]% d; L
其中延时如下图所示。& s) j$ s% U6 [) \" H' i- e& y, U
, k+ M4 J9 k% F H0 i+ b
# b/ e9 N$ Y9 i! D( _! m 图22
( [' f6 {8 M; ]& J% B; Z 保存、编译、下载,如下图所示,1 为保存,2 为编译,3 为下载。' J4 B. r1 F* X- I( V' ], v! a
0 f! g r6 w& q% t# k
- g2 q1 R4 \" G e4 d; [: C
" N, }6 w7 t6 _+ l6 q 图23& p/ H+ M' N, x' W* C) j
下载代码到飞控上,就可以看到飞控的 LED 指示灯以及四个螺旋桨下面的航情灯周期闪烁的现象了,如下图所示。( n' m3 r P- O6 c( k4 U
/ T' L& _ I0 {# q
; L& f- U" h1 b6 f
% m2 g" B; q7 D" t8 X5 E9 o B 图24
; R8 A. J' A9 l0 R% f/ b7 O$ r" {( [# l, m0 _
6 P7 `& q) c* E3 W, ?/ C7 s* @
配套资料:http://www.fengke.club
. h$ M# Y4 v$ _4 j; c u5 v: ?5 k套件地址:http://shop115904315.taobao.com
4 g- f9 F# a. Q( N文件下载请点击:
【1】GPIO(LED航情灯、信号灯控制).pdf
(1.02 MB, 下载次数: 0)
, p: g+ @ L4 e4 b8 P+ U7 t$ K7 k1 {; {5 X% K. O9 Y
|
|