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

疯壳AI开源无人机GPIO(遥控器指示灯控制)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-4-2 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
本帖最后由 疯壳 于 2021-4-2 18:35 编辑 ! ^! V/ }& A' b6 g3 R

- b5 G5 ]) ~3 {* H+ z5 m0 x4 s一、GPIO简介
GPIO(General-purpose input/output),通用的输入输出的简称,单片机的引脚可以供使用者自由使用,可以配置为输出,也可以配置为输入。其中输出又可以是输出“高电平”或者“低电平”。在电子电路中“高电平”是电压高的状态,用逻辑来表示即为1,“低电平”是电压低的状态,用逻辑来表示即为0。
STM32F103系列是意法半导体基于ARM Cortex M3内核的32位单片机,遥控器上用的主核心是48脚的STM32F103C8T6,其片上的资源与飞控主板上的主核心STM32F103CBT6基本一致,不同点在于STM32F103C8T6的RAM为20kBytes、Flash为64kBytes,而STM32F103CBT6的RAM为20kBytes、Flash为128kBytes。其引脚如下图所示。
STM32F103C8T6的GPIO的功能较多,有A、B、C、D等四组GPIO,每组每个GPIO口都可以作为输出输出口使用之外, 还能作为复用引脚使用, 比如串口、I2C、SPI 等特殊接口的引脚。 但是需要注意的是每个引脚的复用功能是有限制的, 所以硬件连接时需要注意每个引脚有哪些复用功能, 这个可以在 STM32F103的数据手册中查看。GPIO 口一共有 8 种模式,分别为:浮空输入,上拉输入,下拉输入,模拟输入, 开漏输出, 推挽输出,推挽式复用功能,开漏式复用功能如下表所示。
STM32F103GPIO工作模式
GPIO的工作模式
输入模式
输出模式
最大输出速度
(1)GPIO_Mode_IN_FLOATING 浮空输入
- A7 P- I- ]; p9 m7 G(2)GPIO_Mode_IPU 上拉输入: X4 ^# w9 M, V6 q
(3)GPIO_Mode_IPD 下拉输入
! e% R1 p4 G7 ]% _7 t; X(4)GPIO_Mode_AIN 模拟输入
(1)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
. Y9 v& o! H( e(2)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
  L  V' a4 G7 t' C& G1 y(3)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)- X0 v( @% g  i& c9 I, z# n6 \
(4)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
(1)10MHZ
1 Y  g* n6 Z1 P/ p(2)2MHZ( S$ q5 Y1 ?1 X
(3)50MHZ
这8种功能我们就不一一介绍了, 有兴趣可以上网搜索了解一下,这里主要讲解一下开漏输出和推挽输出的区别。' C4 w6 `6 ]6 n4 ?) K6 ~
(1)开漏输出:
$ S1 n$ U9 J7 r1 {, {# v) p输出端相当于三极管的集电极. 需要上拉电阻才能得到高电平, 利用外部上拉电阻的驱动能力,减少IC内部的驱动,驱动能力强,适合于做电流型的驱动,可达到20mA。8 M, D9 a1 F6 q
(2)推挽输出:5 _' Q* [; u0 I7 a9 B2 b6 h& L1 D
可以输出高,低电平,连接数字器件,是由两个参数相同的三极管或 MOSFET以推挽方式连接,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高,既提高电路的负载能力,又提高开关速度。
总结一下:推挽输出可以输出强高低电平,连接数字器件;而开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。
二、GPIO相关寄存器
STM32F103的每个GPIO端口有:两个32位配置寄存器(GPIOx_CRL和GPIOx_CRH)、两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)、一个32位置位/复位寄存器(GPIOx_BSRR)、一个16位复位寄存器(GPIOx_BRR)、一个32位锁定寄存器(GPIOx_LCKR)。
  • GPIOx_CRL寄存器(x=A~G)
    7 O! }/ P! s% y5 z) H
该寄存器用于配置IO0~7的输入输出模式以及速率设置。
  • GPIOx_CRH寄存器(x=A~G)
    5 \6 d% W& ]+ a, D; m
该寄存器用于配置IO8~15的输入输出模式以及速率设置。
(3)GPIOx_IDR寄存器(x=A~G)
IDR是GPIO的输入数据寄存器。通过IDR寄存器可以读出IO的状态。需要注意的是IDR寄存器只能以字(16位)的形式读出。
(4)GPIOx_ODR寄存器(x=A~G)
ODR是GPIO的输出数据寄存器。通过ODR寄存器可以输出高低电平。
(5)GPIOx_BSRR寄存器(x=A~G)
BSRR是GPIO的端口位设置/清除寄存器。BSRR寄存器的高16位是清除IO位,低16位是置位IO位。需要注意的是BSRR只有在写入1的时候,相应的功能才有作用,写入0是无效的。
(6)GPIOx_BRR寄存器(x=A~G)
BRR是GPIO的端口位清除寄存器。BRR基础只有在写入1的时候,相应的功能才有作用,写入0无效。
(7)GPIOx_LCKR寄存器(x=A~G)
LCKR是GPIO的端口配置锁定寄存器。LCKR寄存器用来锁定IO口的配置,设置后,除了复位后不能再配置IO的状态。
三、GPIO实验
本节实验的内容是对遥控上的指示灯进行控制,这里和在飞控实验中周期点亮航情灯一样,也是周期点亮遥控手柄上的指示灯。
遥控手柄上接到STM32F103C8T6上的GPIO管脚的指示灯有四颗,分别是电源指示灯、连接无人机指示灯、cocobit编程模式指示灯以及紧急降落指示灯,如下图所示。
查看原理图,可知四个LED指示灯分别对应PA8、PC13、PB4、PB5。
编写代码的思路如下表所示:
代码思路
1
管脚配置
1、定义结构体;
2、使能时钟;
3、填充结构体;
4、装载结构体。
2
逻辑处理
1、周期点亮LED。
按照代码思路,编写代码(通过调用官方库) 如下图所示为GPIO的初始化部分代码:
完成配置后只需要周期点亮以及关闭LED即可,如下图所示。
其中延时函数,如下图所示。
保存、编译、下载,就可以看到遥控手柄的四个LED指示灯周期性闪烁,如下图所示。
6 W7 |* T) O; k1 t6 g! g" K

3.遥控器开发基础-【1】GPIO(遥控器指示灯控制).pdf

924.27 KB, 下载次数: 0, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2021-4-6 09:47 | 只看该作者
不错                                               

点评

谢谢支持~  详情 回复 发表于 2021-4-6 10:23

该用户从未签到

3#
 楼主| 发表于 2021-4-6 10:23 | 只看该作者
liuguanJun 发表于 2021-4-6 09:47( ~4 e5 J2 v% a  |3 O: y. ^" I
不错
  r/ n" b) i9 d2 L& _' T% y* [, c
谢谢支持~
0 C9 o3 S$ ~1 o9 S6 E+ M& y' `3 ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-27 22:16 , Processed in 0.109375 second(s), 30 queries , Gzip On.

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

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

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