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

基于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,发生误识别

创建按键扫描任务:


查看串口数据打印正常:

相关推荐
项目題供诗1 分钟前
51单片机入门(八)
单片机·嵌入式硬件·51单片机
羽获飞28 分钟前
从零开始学嵌入式之STM32——9.STM32的时钟系统
stm32·单片机·嵌入式硬件
飞睿科技1 小时前
乐鑫智能开关方案解析:基于ESP32-C系列的低功耗、高集成设计
嵌入式硬件·物联网·esp32·智能家居·乐鑫科技
来自晴朗的明天2 小时前
13、NMOS 电源防反接电路
单片机·嵌入式硬件·硬件工程
17(无规则自律)3 小时前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
芯岭技术3 小时前
PY32MD310单片机:高性能、低功耗的32位电机控制微控制器
单片机·嵌入式硬件
wotaifuzao4 小时前
STM32 + FreeRTOS 的订阅通知组件架构
stm32·嵌入式硬件·架构·freertos·事件驱动·嵌入式架构
小龙报4 小时前
【51单片机】深度解析 51 串口 UART:原理、配置、收发实现与工程化应用全总结
c语言·开发语言·c++·stm32·单片机·嵌入式硬件·51单片机
Lester_110111 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋13 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障