[项目]基于FreeRTOS的STM32四轴飞行器: 七.遥控器按键

ops/2025/3/13 0:24:30/

基于FreeRTOS的STM32四轴飞行器: 七.遥控器

  • 一.遥控器按键摇杆功能说明
  • 二.摇杆和按键的配置
  • 三.按键扫描

一.遥控器按键摇杆功能说明

两个手柄四个ADC。
左侧手柄
前后推为飞控油门,左右推为控制飞机偏航角。
在这里插入图片描述
右侧手柄
控制飞机飞行方向,向前飞向后飞。
在这里插入图片描述
按键:
可以用于控制飞行微调或者定义一键关机一键定高等功能。
在这里插入图片描述

二.摇杆和按键的配置

按键原理图:
在这里插入图片描述
在这里插入图片描述
观察按键电路配置,按下为低电平所以设置为上拉输入
在这里插入图片描述
摇杆原理图:
左侧手柄上下控制ADC1-1,左右控制ADC1-6。
右侧手柄上下控制ADC1-2,左右控制ADC1-3。
在这里插入图片描述
配置:
ADC的时钟不能超过14MHZ,因为超过会导致ADC时钟精度下降结果不准,HAL库强制不让超过。
在这里插入图片描述
数据对齐方式:
左对齐和右对齐,数据寄存器只有8,16,32位,ADC采集到的数据只有12位,所以可以放在左侧12位或右侧12位,一般右对齐。
在这里插入图片描述
扫描模式:
将使用的ADC1通道挨个扫描一遍,当多通道时一定要开扫描模式。
在这里插入图片描述
先将Number Of conversion设为4:
在这里插入图片描述
这时可以Enabled:
在这里插入图片描述
连续模式(Continuous Conversion Mode):
在扫描完一次后扫描第二次,要设置为Enable。
在这里插入图片描述
ADC规则转换模式:
一般使用规则转换,四个通道只有一个数字寄存器,必须开启DMA,外部触发源使用软件触发。
之后会开启DMA长度为四的数组存储数据,Rank决定了数据放在DMA数组的哪个位置。
在这里插入图片描述
在这里插入图片描述
根据原理图配置Rank,设置Sampling Time为13.5 Cycles:
在这里插入图片描述
配置DMA:
选择Normal(循环)模式,数据宽度选择Half Word,因为ADC的值都为uint16使用uint16类型。
在这里插入图片描述
还要将DMA中断关闭,如果不关中断,转换完后进入中断函数,不会执行正常代码。
在这里插入图片描述

三.按键扫描

摇杆初始化:
先使用ADC校准,再启动ADC转换。
在这里插入图片描述
创建按键枚举类型:
在这里插入图片描述
定义读取按键:
在这里插入图片描述
扫描按键:
这时按键为短按的情况。
在这里插入图片描述
处理长按逻辑:
处理手柄左上角和右上角的按键长按逻辑,定义time变量记录时间,while判断按键按下且time<12增加time数值,在按键松开或者time>12跳出while,继续执行下面的判断time<=5就是短按,否则为长按,继续使用while判断按键是否松开,最后返回枚举长按值。
在这里插入图片描述
在将该处while注释后,长按逻辑会有问题,因为在最后松开长按时可能time<=5,发生误识别
在这里插入图片描述
创建按键扫描任务:
在这里插入图片描述
在这里插入图片描述
查看串口数据打印正常:
在这里插入图片描述


http://www.ppmy.cn/ops/165267.html

相关文章

【HarmonyOS Next】鸿蒙加固方案调研和分析

【HarmonyOS Next】鸿蒙加固方案调研和分析 一、前言 根据鸿蒙应用的上架流程&#xff0c;本地构建app文件后&#xff0c;上架到AGC平台&#xff0c;平台会进行解析。根据鸿蒙系统的特殊设置&#xff0c;仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程…

(每日一题) 力扣 14 最长公共前缀

14. 最长公共前缀题解&#xff1a;多方法详解与C实现 问题描述 给定字符串数组&#xff0c;找出所有字符串的最长公共前缀。若不存在则返回空字符串。 示例&#xff1a; 输入&#xff1a;["flower","flow","flight"] 输出&#xff1a;"…

深入解析MySQL MVCC原理:从内核实现到高并发实践

深入解析MySQL MVCC原理&#xff1a;从内核实现到高并发实践 编程相关书籍分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享&#xff1a;https://blog.csdn.net/weixin_47763579/article/details/145884039 一、…

K8S学习之基础二十:k8s通过svc+ep代理服务

k8s通过svcep代理服务 svcep除了能代理pod&#xff0c;还能代理集群之外的服务&#xff0c;如mysql等在服务器部署mariadb服务&#xff0c;并启动服务、修改root密码等yum install mariadb-servermysql_secure_installationmysql -u root -p在k8s集群创建svc和ep的yamlbashvi m…

element-ui pageHeader 组件源码分享

pageHeader 页头组件源码分享&#xff0c;主要从以下四个方面&#xff1a; 1、pageHeader 组件页面结构。 2、pageHeader 组件属性。 3、pageHeader 组件事件。 4、pageHeader 组件 slot 挂载。 一、组件页面结构。 二、组件属性。 2.1 title 标题&#xff0c;类型为 sri…

K8S中MySQL配置持久化存储

在 Kubernetes 中为有状态应用&#xff08;如 MySQL&#xff09;配置持久化存储&#xff0c;需结合 StatefulSet、PersistentVolumeClaim (PVC) 和 StorageClass&#xff0c;确保数据在 Pod 重启或迁移时不会丢失。以下是详细步骤和最佳实践&#xff1a; 一、核心组件选择 组件…

Linux驱动开发-设备树

Linux驱动开发-设备树 一&#xff0c;设备树简介1. 设备树2. DTS、DTB和DTC 二&#xff0c;DTS语法1.设备节点1.1 字符串型1.2 32位无符号整数1.3 字符串列表 2.设备属性2.1 兼容性 compatible2.2 model2.3 status2.4 reg2.5 #address-cells 和#size-cells 属性 三&#xff0c;…

linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)

服务器审查 在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置&#xff0c;以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux 以其稳定性和安全性而闻名…