【开源教程8】疯壳·开源编队无人机-GPIO(LED 航情灯、信号灯控制)
COCOFLY教程
——疯壳·无人机系列
GPIO(LED 航情灯、信号灯控制)
图1
一、LED
1.1LED 简介
LED(Light Emitting Diode)即为发光二极管的缩写。LED 是一种在生活中非常常见的照明发光器件。LED 的在我们生活中形态种类非常的多,如下图所示。
图2 图3
尽管 LED 在我们生活中形态非常地多,但这所有的 LED 在电路里均使用如下图所示的符号来表示。
图4
1.2LED 发光原理
LED 最重要的一个发光结构就是灯内如绿豆大小般的灯珠。虽然它的体积很小,但它却内有乾坤,如下图所示为 LED 内部构造。
图5
这个结构极其复杂,一共分为好几层:最上层叫做 P 型半导体层、中间层为发光层、最下层叫做 N 型半导体层。
从物理学角度来理解:当电流通过晶片时,N 型半导体内的电子与 P 型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)。
二、GPIO
2.1GPIO 简介
GPIO(General-purpose input/output),通用的输入输出的简称,单片机的引脚可以供使用者自由使用,可以配置为输出,也可以配置为输入。其中输出又可以是输出“高电平”或者“低电平”。在电子电路中“高电平”是电压高的状态, 用逻辑来表示即为 1,“低电平”是电压低的状态,用逻辑来表示即为 0。
STM32F103 系列是意法半导体基于 ARM Cortex M3 内核的 32 位单片机, 飞控上用的主核心是 48 脚的 STM32F103CBT6,其引脚如下图所示。
图6
STM32F103CBT6 的 GPIO 的功能较多,有 A、B、C、D 等四组 GPIO,每组每个 GPIO 口都可以作为输出输出口使用之外, 还能作为复用引脚使用, 比如串口、I2C、SPI 等特殊接口的引脚。 但是需要注意的是每个引脚的复用功能是有限制的, 所以硬件连接时需要注意每个引脚有哪些复用功能, 这个可以在STM32F103 的数据手册中查看。GPIO 口一共有 8 种模式,分别为:浮空输入, 上拉输入,下拉输入,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏式复用功能,如下表所示。
STM32F103GPIO 工作模式
图7
这 8 种功能我们就不一一介绍了, 有兴趣可以上网搜索了解一下,这里主要讲解一下开漏输出和推挽输出的区别。
(1)开漏输出:
输出端相当于三极管的集电极. 需要上拉电阻才能得到高电平, 利用外部上拉电阻的驱动能力,减少 IC 内部的驱动,驱动能力强,适合于做电流型的驱动, 可达到 20mA。
(2)推挽输出:
可以输出高,低电平,连接数字器件,是由两个参数相同的三极管或 MOSFET 以推挽方式连接,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高,既提高电路的负载能力, 又提高开关速度。
总结一下:推挽输出可以输出强高低电平,连接数字器件;而开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma 以内)。
2.2GPIO 相关寄存器
STM32F103 的每个 GPIO 端口有:两个 32 位配置寄存器(GPIOx_CRL 和GPIOx_CRH)、两个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、一个 32 位置位/复位寄存器(GPIOx_BSRR)、一个 16 位复位寄存器(GPIOx_BRR)、一个 32 位锁定寄存器(GPIOx_LCKR)。
(1)GPIOx_CRL 寄存器(x=A~G)
图8
该寄存器用于配置 IO0~7 的输入输出模式以及速率设置。
(2)GPIOx_CRH 寄存器(x=A~G)
图9
该寄存器用于配置 IO8~15 的输入输出模式以及速率设置。
(3)GPIOx_IDR 寄存器(x=A~G)
图10
IDR 是 GPIO 的输入数据寄存器。通过 IDR 寄存器可以读出 IO 的状态。需要注意的是 IDR 寄存器只能以字(16 位)的形式读出。
(4)GPIOx_ODR 寄存器(x=A~G)
图11
ODR 是 GPIO 的输出数据寄存器。通过 ODR 寄存器可以输出高低电平。
(5)GPIOx_BSRR 寄存器(x=A~G)
图12
BSRR 是GPIO 的端口位设置/清除寄存器。BSRR 寄存器的高 16 位是清除IO 位,低 16 位是置位 IO 位。需要注意的是 BSRR 只有在写入 1 的时候,相应的功能才有作用,写入 0 是无效的。
(6)GPIOx_BRR 寄存器(x=A~G)
图13
BRR 是 GPIO 的端口位清除寄存器。BRR 基础只有在写入 1 的时候,相应的功能才有作用,写入 0 无效。
(7)GPIOx_LCKR 寄存器(x=A~G)
图14
LCKR 是GPIO 的端口配置锁定寄存器。LCKR 寄存器用来锁定IO 口的配置, 设置后,除了复位后不能再配置 IO 的状态。
2.3GPIO 实验
本节实验的内容是周期性点亮无人机的航情灯以及信号灯,其中航情灯在四个螺旋桨底下,而信号灯则在开关两侧。
查看原理图可以得知无人机的航情灯同一接在 NPN 三极管 Q1 上,而三极管的基极又接在了单片机的 PA8 上;两个信号灯分别接在了 PC13 和 PC14 上。
图15 图16
图17
编写代码的思路如下表所示
图18
按照代码思路,编写代码(通过调用官方库) 如下图所示:
图19
图20
完成配置后只需要周期点亮以及关闭 LED 即可。
图21
其中延时如下图所示。
图22
保存、编译、下载,如下图所示,1 为保存,2 为编译,3 为下载。
图23
下载代码到飞控上,就可以看到飞控的 LED 指示灯以及四个螺旋桨下面的航情灯周期闪烁的现象了,如下图所示。
图24
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
【开源教程8】疯壳·开源编队无人机-GPIO(LED 航情灯、信号灯控制)相关推荐
- 疯壳AI开源无人机GPIO(LED航情灯、信号灯控制)
一.LED LED简介 LED(Light Emitting Diode)即为发光二极管的缩写.LED是一种在生活中非常常见的照明发光器件.LED的在我们生活中形态种类非常的多,如下图所示. 尽管LE ...
- 【开源教程29】疯壳·开源编队无人机-编队飞行
COCOFLY教程 --疯壳·无人机·系列 编队飞行 图1 一.编队飞行 COCOFLY 支持编队飞行,编队飞行需要依托编队的图形码地图以及COCOFLY ...
- 【飞控开发高级教程7】疯壳·开源编队无人机-编队飞行
COCOFLY教程 --疯壳·无人机·系列 编队飞行 图1 一.编队飞行 COCOFLY 支持编队飞行,编队飞行需要依托编队的图形码地图以及COCOFLY ...
- 【开源教程1】疯壳·开源编队无人机-开机测试
疯壳·COCOFLY教程 --开源编队无人机 开机测试 图1.1 一.开机测试 1.1前期准备 疯壳 cocofly 无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金 ...
- 【快速上手教程1】疯壳·开源编队无人机-开机测试
疯壳·COCOFLY教程 --开源编队无人机 开机测试 图1.1 一.开机测试 1.1前期准备 疯壳 cocofly 无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金 ...
- 【飞控开发基础教程9】疯壳·开源编队无人机-PWM(电机控制)
COCOFLY教程 --疯壳·无人机·系列 PWM(电机控制) 图1 一.PWM 简介 脉冲宽度调制(PWM),是英文"Pulse Wi ...
- 【快速上手教程4】疯壳·开源编队无人机-OPENMV 脚本烧写
COCOFLY教程 --疯壳·无人机·系列 OPENMV 脚本烧写 图1 一.OPENMV 脚本烧写 OPENMV 脚本的烧写比较简单,主要是要借助前面安 ...
- 【飞控开发基础教程10】疯壳·开源编队无人机-PID 基础原理
COCOFLY教程 --疯壳·无人机·系列 PID 基础原理 图1 一.PID 简介 PID 控制是自动控制系统中最常用的一种控制手段,它的诞生主 ...
- 【开源教程13】疯壳·开源编队无人机-SPI(六轴传感器数据获取)
COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取) 图1 一.ICM20602 简介 六轴传感器在当今智能穿戴和定位导航产品 ...
- 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取)
COCOFLY教程 --疯壳·无人机·系列 SPI(六轴传感器数据获取) 图1 一.ICM20602 简介 六轴传感器在当今智能穿戴和定位导航产品 ...
最新文章
- http headers详解
- mysql 5.6 json查询_mysql5.6及以下版本如何查询数据库里的json
- AI 终极问题:我们的大脑是一台超级计算机吗?
- 1192. [HNOI2006]鬼谷子的钱袋【进制】
- 爬虫笔记(十)——学会使用Fiddler
- linux下查看文件inode,Linux下如何寻找相同文件?
- 垃圾回收算法_划重点 JVM G1 垃圾回收算法
- python爬取高德poi数据_高德地图之python爬取POI数据及其边界经纬度
- mate7 android升级包下载,华为mate7 刷机包
- vue中如何用npm下载less
- React hooks组件通信
- 四咪唑基四苯乙烯,四苯基吡嗪(tetraphenylpyrazine,TPP)
- linux实验报告 dns 新增域名,Linux实验报告DNS及虚拟主机.docx
- 华为硬件工程师等公司的面试经历分享
- easypoi一对多导入_easypoi导入Excel最佳实践
- 为什么是UUID做主键
- 三子棋(时间智障版)
- Java指导书练习题——抽象类
- GTK 框架(Frames)
- 硅计算机的原理,量子计算机工作原理揭秘
热门文章
- 计算机休眠下睡眠的不同点是什么,电脑休眠和睡眠的区别是什么
- UNet 、3D-UNet 、VNet 区别
- 外接圆、内切圆半径公式及对应关系知识点总结
- 六一小学生计算机创新活动总结,2020小学生六一儿童节活动总结
- 泽林主办前沿IT技术分享峰会隆重召开,深度探讨人工智能、大数据与物联网 的未来发展趋势
- vc程序大小优化最佳方案(转)http://blog.sina.com.cn/s/blog_4c50333c0100gjs3.html
- IBM X3650 安装ESXi 5.1u2 需要更改BIOS缺省设置
- Git GUI 中文乱码怎么解决
- phpstorm如何找回删除的文件
- 线性代数拾遗(4)—— 非齐次线性方程组通解的结构