0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

APM飞控固件编程-GPIO输入

CHANBAEK 来源:怒飞垂云 作者:怒飞垂云 2023-07-02 17:37 次阅读

有时候,我们的飞控需要引入一些外部IO信号,比如:

01相机拍照反馈

单反相机热靴接口的反馈信号,用于将照片拍摄的位置和时间保存到飞控的日志中;

02液位仪IO信号

植保无人机检测剩余药量是否低于警戒值;

03弹射检测信号

通过一个金属触点弹片来检测无人机是否从发射架上弹射出去,对于一些需要延迟开启推进电机的应用比较有用。

硬件基础

对于大部分运行APM固件的飞控来讲,其第9通道以后(含)的PWM输出通道同时也支持作为GPIO输入,当然,部分飞控硬件的前8个通道也支持作为GPIO输入,这与飞控的硬件架构相关。

如下图所示,此飞控的PWM1~PWM8使用了SN74LVC8T245这款芯片作为接口保护芯片,并且将此芯片的方向控制引脚固定拉低,从而这8个通道只支持作为PWM输出或者GPIO输出。

图片

如下图所示,其PWM9~PWM16通道使用了TXS0108ERGYR这款芯片作为接口保护芯片,这款芯片支持自动切换各个通道的方向的功能,因此这8个通道既可以作为PWM输出,也可以作为GPIO输入。

图片

软件编程

APM固件的GPIO输入功能的使用是非常简单的,如下面的例子所示:

// 第一步,将GPIO50设置为输入模式
hal.gpio- >pinMode(50, HAL_GPIO_INPUT);


// 第二步,将GPIO50设置为内部上拉(可选,可以不上拉;如果要下拉,则第二个参数设置为0)
hal.gpio- >write(50, 1);


// 第三步,读取GPIO50的状态,返回值为0表示低电平,为1表示高电平
uint8_t gpio_state = hal.gpio- >read(50);

注意,例程中的“50”是“软件层面”的GPIO号,不是STM32单片机“硬件层面”的GPIO号, 并且各个飞控的定义不同。此值的定义在APM源代码“Libraries/AP_HAL_ChibiOS/hwdef/飞控硬件名/hwdef.dat”中,下图为原版Pixhawk对于GPIO号的定义:

图片

参数设置

对于最新的APM固件,“BRD_PWM_COUNT”这个参数已经被删掉了,因此不需要设置这个参数。

SERVOx_FUNCTION:设置为-1。注意,AUX OUT引脚的标号在参数表中是从9开始依次递增的,如AUX OUT 1引脚对应SERVO9,AUX OUT 2引脚对应SERVO10,依次类推。

你看的没错,只需要设置这一个参数即可,非常简单。

结语

以上就是APM固件GPIO输入功能的使用方法,希望对对大家有所帮助,

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6023

    文章

    44376

    浏览量

    628463
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5059

    浏览量

    212214
  • STM32
    +关注

    关注

    2258

    文章

    10828

    浏览量

    352499
  • GPIO
    +关注

    关注

    16

    文章

    1175

    浏览量

    51515
  • IO信号
    +关注

    关注

    0

    文章

    6

    浏览量

    2053
收藏 人收藏

    评论

    相关推荐

    apm 控的pwm输入输出通道串联的220欧电阻的作用?

    最经看了一下apm控的原理图,发现在输入输出通道均串联了220欧的电阻,不知是什么作用啊?用stm32做pwm采集和输出,也需要串联220欧电阻吗?
    发表于 08-01 23:02

    寻找apm2.8固件源码

    请问apm固件源码在哪里下载,知道的朋友请麻烦告知。谢谢!
    发表于 06-30 16:33

    控疑难杂症解决方法汇总

    问题,控硬件定制,固件修改,log日志分析,控驱动添加经过三个月的制作,我的《无人机固件开发教程》系列视频终于在“网易云课堂”上线了
    发表于 08-06 06:21

    APM控2.5源代码

    APM控2.5开源代码,感兴趣的小伙伴们可以瞧一瞧。
    发表于 11-22 17:22 38次下载

    arm7单片机编程实例,ARM7之输入/输出端口GPIO编程教程

    ARM7之输入/输出端口GPIO编程教程
    发表于 04-19 14:43 2631次阅读
    arm7单片机<b class='flag-5'>编程</b>实例,ARM7之<b class='flag-5'>输入</b>/输出端口<b class='flag-5'>GPIO</b><b class='flag-5'>编程</b>教程

    基于LCD单片机输入/输出端口GPIO编程

    一、输入/输出端口GPIO编程一—(02)、控制LCD1602显示~~废话不多说了~~直接上图~~然后是程序~~MDK1_2.c//------------------------------------------------
    发表于 10-17 16:33 1742次阅读

    固件#06--STM32-MCU-GPIO工作模式

    固件06–STM32 MCU GPIO工作模式总结: 四种输入四种输出##浮空输入GPIO-IN-FLOATING可以做KEY识别,RX1
    发表于 11-18 18:51 1次下载
    <b class='flag-5'>固件</b>#06--STM32-MCU-<b class='flag-5'>GPIO</b>工作模式

    Linux应用开发【第九章】GPIO编程应用开发

    设置GPIO方向 9.4.3 GPIO输出实验-LED输出控制 9.4.4 GPIO输入试验-按键值读取 9.4.5 LED和按键控制实验   9
    的头像 发表于 12-10 19:21 659次阅读
    Linux应用开发【第九章】<b class='flag-5'>GPIO</b><b class='flag-5'>编程</b>应用开发

    APM2.8控的电路原理图

    APM2.8控的电路原理图
    发表于 06-06 16:56 0次下载

    适用于PIX或APM的本地升级固件方法

    适用于PIX或APM的本地升级固件方法,首先打开 http://firmware.diydrones.com/ 3DR 的固件服务器。 然后选择适合自己的固件 如多旋翼
    发表于 08-20 16:34 0次下载

    APM32F103编程手册

    APM32F103编程手册
    发表于 11-09 21:03 12次下载
    <b class='flag-5'>APM</b>32F103<b class='flag-5'>编程</b>手册

    APM32F003F6P6_GPIO_串口无法正常工作

    APM32F003F6P6_GPIO_串口无法正常工作
    发表于 11-09 21:03 6次下载
    <b class='flag-5'>APM32F003F6P6_GPIO</b>_串口无法正常工作

    APM32F103VCT6_GPIO_未使用的IO如何配置

    APM32F103VCT6_GPIO_未使用的IO如何配置
    发表于 11-09 21:03 0次下载
    <b class='flag-5'>APM32F103VCT6_GPIO</b>_未使用的IO如何配置

    APM32F072CBT6_GPIO问题_PB12无法正确读取外接的电平状态

    APM32F072CBT6_GPIO问题_PB12无法正确读取外接的电平状态
    发表于 11-09 21:04 2次下载
    <b class='flag-5'>APM32F072CBT6_GPIO</b>问题_PB12无法正确读取外接的电平状态

    APM固件的两种输出调试信息的方法

    在无人机固件开发过程中,我们经常需要实时输出一些调试信息(如一些变量的值、状态机切换提示等),在APM固件中有如下两种常用的输出调试信息的方法。
    的头像 发表于 07-02 17:33 1869次阅读
    <b class='flag-5'>APM</b><b class='flag-5'>飞</b>控<b class='flag-5'>固件</b>的两种输出调试信息的方法