找回密码
 注册
关于网站域名变更的通知
查看: 230|回复: 1
打印 上一主题 下一主题

【疯壳·无人机教程8】开源编队无人机-GPIO(LED 航情灯、信号灯控制)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-7 11:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
COCOFLY教程
——疯壳·无人机系列
GPIO(LED 航情灯、信号灯控制)

/ T& m9 T. w' A: g/ Z! R) C! ~6 w+ x  k& N. X8 S+ t: _1 P
& U7 o% Y5 e5 Z4 ?

. L" u$ D) ?$ A2 U8 m    
; p, _: i0 O8 R0 ?' r    图1
/ a( i8 q* O5 A  z1 M8 z7 Z+ U6 U  A. W! C$ u' O
    一、LED  H' T3 }$ G+ F% p9 z
    1.1LED 简介! |3 c' Y3 S" C4 F
    LED(Light Emitting Diode)即为发光二极管的缩写。LED 是一种在生活中非常常见的照明发光器件。LED 的在我们生活中形态种类非常的多,如下图所示。1 q5 J! g! c6 e) B) F

2 a) F& b* j% [, s, i& v2 ?    5 V% I( i# P, k7 a. Y
    图2                         图3$ K4 X0 a( c0 n4 A6 k( s4 |* s0 ~* l
    尽管 LED 在我们生活中形态非常地多,但这所有的 LED 在电路里均使用如下图所示的符号来表示。2 Y1 T5 h! |! T0 J' p1 k

+ v  e+ S) D8 }  x     ) W* ?- _! s# N! E4 L2 q- n
    图4/ d  Y+ K% A3 U+ e& n- o

6 U) X3 m/ A. v8 b6 H! x    1.2LED 发光原理
" V% j  J: r" w6 R3 _9 T7 k5 S    LED 最重要的一个发光结构就是灯内如绿豆大小般的灯珠。虽然它的体积很小,但它却内有乾坤,如下图所示为 LED 内部构造。
% F- C& S  s: W7 G3 o9 W" k+ Z. U  b. T7 |. U9 Y4 H
   4 S) a6 H8 k) }, L' N2 Y9 [
    图5
8 G, d& b, @7 P3 j5 b" I, Q1 R( {+ e* R7 t" l+ M" A& E
    这个结构极其复杂,一共分为好几层:最上层叫做 P 型半导体层、中间层为发光层、最下层叫做 N 型半导体层。+ U# r4 r2 X/ y. B7 W5 S
    从物理学角度来理解:当电流通过晶片时,N 型半导体内的电子与 P 型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)。
3 |# u% [0 r6 E$ _2 y1 i: G# m    二、GPIO5 y: O$ t. C0 H- |
    2.1GPIO 简介* \* V3 z/ j- s1 W
    GPIO(General-purpose input/output),通用的输入输出的简称,单片机的引脚可以供使用者自由使用,可以配置为输出,也可以配置为输入。其中输出又可以是输出“高电平”或者“低电平”。在电子电路中“高电平”是电压高的状态, 用逻辑来表示即为 1,“低电平”是电压低的状态,用逻辑来表示即为 0。
! t7 x% |  F, ]/ T+ z    STM32F103 系列是意法半导体基于 ARM Cortex M3 内核的 32 位单片机, 飞控上用的主核心是 48 脚的 STM32F103CBT6,其引脚如下图所示。7 t. n9 m% k) X3 y0 n
8 }) I+ i0 S* t! ]' P& D
$ I: {: r, V2 x
    ! V' ]+ H* ^2 C+ i2 P% F6 G; z
    图6
6 r! S" u7 V! R/ R6 M, f! J7 c; ?. S7 P/ e/ U
    STM32F103CBT6 的 GPIO 的功能较多,有 A、B、C、D 等四组 GPIO,每组每个 GPIO 口都可以作为输出输出口使用之外, 还能作为复用引脚使用, 比如串口、I2C、SPI 等特殊接口的引脚。 但是需要注意的是每个引脚的复用功能是有限制的, 所以硬件连接时需要注意每个引脚有哪些复用功能, 这个可以在STM32F103 的数据手册中查看。GPIO 口一共有 8 种模式,分别为:浮空输入, 上拉输入,下拉输入,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏式复用功能,如下表所示。' a0 Q5 G$ z* c2 m
    STM32F103GPIO 工作模式
* h* S- p& H& e2 X8 Q
2 B, J% W4 `! I3 q" V   , r' f: `5 Q) ^1 x5 Q8 d
    图7
. b3 o7 @) d. V$ i- d! _: S6 s) ]3 {  Z    这 8 种功能我们就不一一介绍了, 有兴趣可以上网搜索了解一下,这里主要讲解一下开漏输出和推挽输出的区别。; o- J. G$ w' R/ w9 O
    (1)开漏输出:
9 `. r. N2 q+ N  Y! U    输出端相当于三极管的集电极. 需要上拉电阻才能得到高电平, 利用外部上拉电阻的驱动能力,减少 IC 内部的驱动,驱动能力强,适合于做电流型的驱动, 可达到 20mA。: P9 ~! K: H  A2 a$ W
    (2)推挽输出:
; `' G. D4 L" B    可以输出高,低电平,连接数字器件,是由两个参数相同的三极管或 MOSFET 以推挽方式连接,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高,既提高电路的负载能力, 又提高开关速度。% Z# D  T0 {6 C- c
    总结一下:推挽输出可以输出强高低电平,连接数字器件;而开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma 以内)。, m& i9 h$ \6 Q9 ]- K' G4 R
    2.2GPIO 相关寄存器
$ S; _" _1 w* d; M; }2 {0 |9 v    STM32F103 的每个 GPIO 端口有:两个 32 位配置寄存器(GPIOx_CRL 和GPIOx_CRH)、两个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、一个 32 位置位/复位寄存器(GPIOx_BSRR)、一个 16 位复位寄存器(GPIOx_BRR)、一个 32 位锁定寄存器(GPIOx_LCKR)。
2 \( s0 n" e% ^    (1)GPIOx_CRL 寄存器(x=A~G)% Y8 @- `# W) o* j7 q. g' l

# N, H$ N& H8 o% U    ) i3 B$ Y' f  l& @
    图8
8 a% i2 o, s! T. `2 A    该寄存器用于配置 IO0~7 的输入输出模式以及速率设置。: E/ }5 F1 {6 z: k- H8 z
    (2)GPIOx_CRH 寄存器(x=A~G)
' h$ _9 g+ q4 h/ x3 X) x% ]* J, U

& ^' _+ N/ ]4 d3 r6 A       D: M6 m. j) W1 E* v* V
    图92 n# J' O0 T# \/ ?0 g
    该寄存器用于配置 IO8~15 的输入输出模式以及速率设置。$ l, ^2 o+ S0 k9 [, h7 Y
    (3)GPIOx_IDR 寄存器(x=A~G)
- T0 \. |: x% G: D) Q. ~3 y
6 C6 f8 A* ^& `1 o1 L    
0 i1 A3 A6 H3 R4 B, B3 v1 O' S* }    图104 K  f# C. z5 V- T
    IDR 是 GPIO 的输入数据寄存器。通过 IDR 寄存器可以读出 IO 的状态。需要注意的是 IDR 寄存器只能以字(16 位)的形式读出。2 J) P5 _; w7 k9 {6 ~) b; G% L% i
    (4)GPIOx_ODR 寄存器(x=A~G)# @- F8 Y: e! e& r1 `1 |
' T* Y2 D5 a( Q5 f+ R5 C' h( @
    0 P5 H) V4 T. Y2 S9 P9 _, _
    图11% x* P! @9 f1 v: x0 p4 e2 N
# v* d; ], B6 s
    ODR 是 GPIO 的输出数据寄存器。通过 ODR 寄存器可以输出高低电平。9 m4 K6 I3 k  o: p* z! X' ?
    (5)GPIOx_BSRR 寄存器(x=A~G)+ }* |4 c" \4 k/ w6 X0 X8 N4 m  P8 e

! T: U7 M3 s5 E    
; y+ J5 H- i2 `    图12
( p6 L5 n; P/ a0 ]% i/ m/ }. k. C, u! d8 Q. g$ Y( K' F3 c
    BSRR 是GPIO 的端口位设置/清除寄存器。BSRR 寄存器的高 16 位是清除IO 位,低 16 位是置位 IO 位。需要注意的是 BSRR 只有在写入 1 的时候,相应的功能才有作用,写入 0 是无效的。
5 `/ a& j. B; g! X. ?    (6)GPIOx_BRR 寄存器(x=A~G)% |" b* r1 h6 t
- G5 u" |& O3 F' y( g" S
    ( T5 G& m/ P4 V0 w% Q: j* G
    图139 T2 n4 v+ t$ }7 ^4 f9 ]5 {" h
    BRR 是 GPIO 的端口位清除寄存器。BRR 基础只有在写入 1 的时候,相应的功能才有作用,写入 0 无效。+ t4 D  z7 _( \  w
    (7)GPIOx_LCKR 寄存器(x=A~G)
, t$ ^) S1 I8 _7 _8 \1 E7 v; {) e& e% F' y; n9 @7 T
   
8 p- p9 t2 j' W' j+ }1 ]  F( x    图14) D+ V, r0 W: B9 p6 f- H* ?
    LCKR 是GPIO 的端口配置锁定寄存器。LCKR 寄存器用来锁定IO 口的配置, 设置后,除了复位后不能再配置 IO 的状态。3 c9 h: J$ I9 e

- {. ~0 U  ?6 O! `( T* T8 L    2.3GPIO 实验
0 B6 A0 Z4 x% j0 O# n    本节实验的内容是周期性点亮无人机的航情灯以及信号灯,其中航情灯在四个螺旋桨底下,而信号灯则在开关两侧。
  [/ o( z" p+ p& ~" ^    查看原理图可以得知无人机的航情灯同一接在 NPN 三极管 Q1 上,而三极管的基极又接在了单片机的 PA8 上;两个信号灯分别接在了 PC13 和 PC14 上。4 ~4 k4 N2 ]6 L+ k( u7 V! h% X

4 }2 z" [! a* J8 j8 @# C, Y  V0 ~2 w  b5 O0 c
   , r4 t4 x; `: K8 R% |
    图15                                                                                  图16
" C$ [0 @8 V5 f, Z: N% C  j; Q- J! S, i  c% O) {
" z8 Y4 @) e. p8 |4 J( z; n- Z: y
   
- ]  `8 q% e% I' s+ b    图17. R& r5 h0 N5 \0 `  Y4 V8 r3 z

* V$ }! k3 H3 c0 Q. y    编写代码的思路如下表所示" p8 I; J- Y3 P( H4 E2 ]9 U) _: X! L
8 P" m/ Q4 @! j8 P9 X
     
# {! ~' Y+ @. F! C    图185 \5 m2 ^) p& M$ D
    按照代码思路,编写代码(通过调用官方库) 如下图所示:
2 w9 m  Q  E: T' z$ P1 W, s
& Q2 `( n9 K" O* |. z    * o* i- ~7 D( `" T
    图19
. z* L8 r# r' Z$ [: ^6 j8 ~( E" L# W) Z" }6 F/ y

# v6 O  P/ i. b, V3 r. y    
2 [" P3 W  W6 [1 \4 }8 I. ]" a2 U6 c    图20& N( m) ^5 N+ u
    完成配置后只需要周期点亮以及关闭 LED 即可。% X& c! L8 E5 @# q2 W

' t; I) Q+ n/ x  l" q     1 _4 U# s$ Q8 j/ o$ [% Z
    图21
& F& Z/ w5 |1 P% G$ ?0 V4 y    其中延时如下图所示。6 k( G$ i& ]' H) i9 U

3 q9 n: A/ U# U* S+ u1 P; U & x" h3 _2 ^. ~! Q% X( V
    图22- p' v! m/ U( z: d2 X% m& i- j
    保存、编译、下载,如下图所示,1 为保存,2 为编译,3 为下载。- q. g8 C6 I4 q$ s
3 u  \0 S/ r/ d. e: q+ E
; c+ R) a1 w, g& ^! I7 E
  
& S* e5 f; \" G7 x. }) @, j7 r    图23
/ m- t9 A" c5 u6 j4 d0 ~* Q! V    下载代码到飞控上,就可以看到飞控的 LED 指示灯以及四个螺旋桨下面的航情灯周期闪烁的现象了,如下图所示。
8 G4 e  N6 i2 m! ]+ W0 K1 [
  X/ Z2 m+ C# [4 m3 F. r
: J1 b+ p% y$ C& [, r/ F2 g     ' i/ o4 k- z2 k1 A$ ^; m# _
    图24
. D$ m& V% H& p+ k+ \
! U4 P; h- I# c
- k- D+ g2 `0 e0 d2 z1 u+ f. y; g" E
/ Q- N$ w' }2 {文件下载请点击: 【1】GPIO(LED航情灯、信号灯控制).pdf (1.02 MB, 下载次数: 0) 4 x2 k# D+ o( f  t) m7 R
* A- }# \1 _: F7 M: Z; o9 O
  • TA的每日心情
    开心
    2022-12-5 15:27
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-9-7 17:30 | 只看该作者
    更了解无人机了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-13 06:59 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表