登录/注册

stm32 adc按键检测

更多

在STM32中通过ADC检测按键(即利用电阻分压原理实现多按键识别)的步骤如下:


1. 硬件设计


2. 软件配置

(1) ADC初始化

// 启用ADC时钟
__HAL_RCC_ADC1_CLK_ENABLE();

// 配置ADC引脚为模拟输入
GPIO_InitStruct.Pin = GPIO_PIN_0;  // 假设使用PA0
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置ADC参数
ADC_HandleTypeDef hadc;
hadc.Instance = ADC1;
hadc.Init.Resolution = ADC_RESOLUTION_12B;  // 12位分辨率
hadc.Init.ScanConvMode = DISABLE;          // 单通道模式
hadc.Init.ContinuousConvMode = DISABLE;     // 单次转换
hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;  // 数据右对齐
HAL_ADC_Init(&hadc);

// 校准ADC
HAL_ADCEx_Calibration_Start(&hadc);

(2) 读取ADC值

uint16_t Read_ADC_Value(void) {
    HAL_ADC_Start(&hadc);                // 启动ADC转换
    HAL_ADC_PollForConversion(&hadc, 10); // 等待转换完成
    return HAL_ADC_GetValue(&hadc);      // 返回12位ADC值
}

3. 按键识别逻辑

(1) 采样与滤波

#define SAMPLE_TIMES 10  // 采样次数

uint16_t Get_Filtered_ADC(void) {
    uint32_t sum = 0;
    for (int i = 0; i < SAMPLE_TIMES; i++) {
        sum += Read_ADC_Value();
        HAL_Delay(1);  // 间隔1ms采样
    }
    return sum / SAMPLE_TIMES;  // 返回平均值
}

(2) 按键判断

#define KEY_THRESHOLD_1 1000  // 按键1的ADC阈值
#define KEY_THRESHOLD_2 2000  // 按键2的ADC阈值
#define KEY_THRESHOLD_3 3000  // 按键3的ADC阈值

uint8_t Get_ADC_Key(void) {
    uint16_t adc_val = Get_Filtered_ADC();

    if (adc_val < KEY_THRESHOLD_1) {
        return KEY_NONE;     // 无按键按下
    } else if (adc_val < KEY_THRESHOLD_1 + 200) {
        return KEY_1;        // 按键1
    } else if (adc_val < KEY_THRESHOLD_2 + 200) {
        return KEY_2;        // 按键2
    } else if (adc_val < KEY_THRESHOLD_3 + 200) {
        return KEY_3;        // 按键3
    }
    return KEY_NONE;
}

4. 按键消抖处理

uint8_t Debounce_Key(void) {
    static uint8_t last_key = KEY_NONE;
    uint8_t current_key = Get_ADC_Key();

    if (current_key != last_key) {
        HAL_Delay(20);  // 延时20ms消抖
        current_key = Get_ADC_Key();
        if (current_key == Get_ADC_Key()) {
            last_key = current_key;
            return current_key;
        }
    }
    return KEY_NONE;
}

5. 注意事项


通过以上步骤,即可实现基于STM32 ADC的多按键检测。实际应用时需根据硬件电路调整阈值和滤波参数。

DshanMCU-R128s2 ADC按键配置方法

FreeRTOS平台上使用的按键为ADC-KEY,采用的ADC模块为GPADC。 按键

2023-12-22 19:11:39

STM32怎么实现按键开关机

STM32按键开关机需要以下步骤: 1. 硬件连接。 2. 配置GPIO引脚。 3. 编程实现按键

2023-12-07 15:17:44

STM32速成笔记(3)—按键检测

按键检测原理比较简单,按键按下和不按下,其连接引脚的电平是不一样的,按键

2023-10-23 17:31:49

STM32ADC学习历程

STM32的ADC学习历程(电源技术期刊影响因子)- STM32的ADC

资料下载 王越建 2021-09-27 12:32:55

STM32ADC驱动程序

STM32的ADC驱动程序(电源技术被踢出核心)-  STM32的ADC

资料下载 刘满贵 2021-09-23 13:43:22

浅谈ADC按键的应用设计

浅谈ADC按键的应用设计(现代电源技术pdf王建辉)-浅谈ADC按键的应

资料下载 打马过草原 2021-09-17 13:37:17

STM32F103的按键控制数码管加减仿真

STM32F103的按键控制数码管加减仿真

资料下载 Gd12 2021-06-21 09:12:50

使用ADC设计按键电路的应用说明

.使用ADC方式的按键电路,具有硬件电路简单、按键电路与单片机连线少、能节省I/O口、易于修改、节省成本等优点。但在

资料下载 佚名 2019-11-20 17:48:42

STM32按键检测之短按与长按方法

在电路设计中,我们经常需要读取外部的电平信号。比如,在项目中,我们需要通过按键来输入一些数据,那么就需要检测按键是否被按下。

2023-06-12 11:41:22

ADC检测多个组合按键的方法

一般情况下,一个GPIO口只能连接一个按键,通过检测外部输入的高、低电平判断按键的开闭状态。

2023-03-21 10:13:12

怎样使用ADC检测按键输入引脚的电压值呢

本 demo 主要介绍一个基于 ADC 的按键功能,使用 ADC 检测

2022-07-13 16:22:03

ADC按键的相关资料分享

文章目录前言一、原理图二、由原理图得到的信息三、ADC按键初始化四、ADC按键

2022-01-11 06:56:03

如何使用ADC实现多按键功能

节省IO口;本次介绍使用ADC实现多按键功能,通过采集ADC不同的值,然后判断是按键

2022-01-07 06:32:58

如何进行按键检测按键FIFO的实现

! 一、如何进行按键检测 检测按键有中断方式和GPIO查询方式两种。推荐

2021-11-03 09:13:26

STM32单片机的按键检测程序设计

STM32的按键检测相对比较简单,首先按部就班的初始化连接的到的i/o,然后写一个按键

2019-10-13 16:28:00

7天热门专题 换一换
相关标签