STM32F103 TIM电容按键检测

news/2025/2/7 15:54:56/文章来源:https://www.cnblogs.com/jeikerxiao/p/18702702

STM32F103C8T6最小系统开发板使用HAL固件库,TIM电容按键检测控制LED灯亮灭

在本篇文章中,我们将介绍如何在STM32F103C8T6最小系统开发板上使用HAL固件库,通过TIM定时器进行电容按键检测,并控制PC13引脚连接的LED灯的亮灭。按键的触摸将会直接影响LED的开关。

1. 硬件设计

1.1 STM32F103C8T6最小系统开发板

STM32F103C8T6最小系统开发板是基于STM32F103C8T6芯片的开发板,具备多种常用外设,如GPIO、ADC、SPI、I2C、USART等。我们将利用该开发板的TIM定时器和GPIO功能来完成电容按键的检测与LED控制。

1.2 电容按键电路

电容按键一般由一个金属板、电容和一根电缆组成。通过使用定时器输入捕获功能,可以测量电容按键的电容变化,检测是否发生触摸事件。为简单起见,本篇教程假设电容按键已正确连接到定时器输入引脚(例如TIM2通道1)。

1.3 LED灯电路

PC13引脚通常用于STM32F103C8T6开发板上的LED灯控制。我们将使用该引脚来控制LED的点亮和熄灭。

2. TIM电容按键检测原理

TIM定时器可以配置为输入捕获模式,在检测到引脚电平变化时,能够记录下捕获的时间戳。通过分析捕获值的变化,可以判断电容按键是否被触摸。

在此例中,我们使用TIM2通道1作为输入捕获通道,检测电容按键的触摸。当按键被触摸时,电容值变化,TIM2会捕获到变化并触发中断。

3. 软件设计

3.1 配置GPIO

首先,配置PC13引脚为输出模式,用于控制LED灯。然后,通过初始化TIM定时器,设置为输入捕获模式,用于检测按键的触摸。

3.2 初始化TIM2输入捕获

我们通过TIM2的输入捕获模式读取电容按键的状态。通过设置定时器预分频器和计数周期,可以根据实际需求调整按键响应的速度。

3.3 中断处理

当TIM2捕获到一个时间戳后,我们判断电容按键的触摸情况。如果触摸事件发生,我们控制PC13引脚的LED灯亮起,否则熄灭LED。

4. 详细操作步骤及示例代码

4.1 系统初始化与时钟配置

void SystemClock_Config(void)
{// 系统时钟配置代码(根据具体需要设置)
}

4.2 GPIO初始化代码

void GPIO_Init(void)
{__HAL_RCC_GPIOC_CLK_ENABLE();  // 启用GPIOC时钟GPIO_InitTypeDef GPIO_InitStruct = {0};/* 配置PC13引脚为输出,用于控制LED */GPIO_InitStruct.Pin = LED_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽输出模式GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct);  // 初始化PC13
}

4.3 TIM2初始化代码

void TIM2_Init(void)
{__HAL_RCC_TIM2_CLK_ENABLE();  // 启用TIM2时钟htim2.Instance = TIM2;htim2.Init.Prescaler = 71;  // 设置预分频器htim2.Init.CounterMode = TIM_COUNTERMODE_UP;htim2.Init.Period = 0xFFFF;  // 设置计数周期htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_IC_Init(&htim2);  // 初始化TIM2输入捕获/* 配置输入捕获通道 */sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING;sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;sConfigIC.ICFilter = 0x0F;HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1);
}

4.4 启动TIM2输入捕获

void TIM2_IC_Start(void)
{HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);  // 启动输入捕获并启用中断
}

4.5 TIM2中断处理程序

void TIM2_IRQHandler(void)
{if (__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC1) != RESET){__HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC1);  // 清除中断标志uint32_t capture_value = HAL_TIM_ReadCapturedValue(&htim2, TIM_CHANNEL_1);  // 读取捕获值/* 按键触摸检测逻辑 */if (capture_value > threshold_value)  // 如果捕获值大于设定阈值,认为按键被触摸{HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET);  // 点亮LED}else{HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET);  // 熄灭LED}}
}

4.6 主程序

int main(void)
{HAL_Init();  // 初始化HAL库SystemClock_Config();  // 配置系统时钟GPIO_Init();  // 初始化GPIOTIM2_Init();  // 初始化TIM2TIM2_IC_Start();  // 启动TIM2输入捕获while (1){// 主循环}
}

5. 注意事项

  1. threshold_value 是用于判断电容按键是否被触摸的阈值。根据具体应用场景,可以通过实验来调整该值。
  2. 在实际应用中,可以通过调节定时器的预分频器和计数周期,来适配不同的按键响应速度和时间精度。
  3. 根据具体需求,可能需要修改GPIO的配置以及TIM2的其他参数,如输入捕获通道、滤波等。

6. 总结

通过本篇文章的学习,我们掌握了如何使用STM32F103C8T6最小系统开发板的TIM定时器功能进行电容按键的检测,并基于此实现了LED的亮灭控制。这个方案简单且高效,适合在各种嵌入式项目中应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/880087.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方差、标准差、变异系数举例

一、标准差,也称均方差,是方差的算术平方根,标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。太绕了,上例子:1、先找出平均数。平均数是数据的平均值,把数据加起来然后除以数据个数就可以得到。2、再找出方差。方差是数据偏离平均数的程度。得…

中电金信:大咖漫话|如何营销AI赋能的远程银行

看过“从远程银行看AIGC”连载,今天将与各位漫话AI的营销“哲学”。祝各位事业蟠蟠,巳巳如意,我们开年再会!

miniconda配置及常用命令,windows系统环境变量设置

安装完miniconda后,如果cmd中输入"conda info"没有输出信息,说明需要手动配置环境变量。 (1)右键点击桌面上“此电脑”,点击“属性” (2)在弹出的页面里点击“高级系统设置”(3)点击“环境变量”(4)双击“系统变量”里面的"Path":(5)点击“新…

CPUID CPU-Z(CPU检测工具) v2.14.0 中文绿色版

软件介绍 CPU-Z是最权威的CPU处理器检测工具。它支持的CPU种类相当全面,软件的启动速度及检测速度也很快,能够准确的检测出CPU、主板、内存、显卡、SPD等相关信息,包含制造厂及处理器名称,核心构造及封装技术,内部外部频率,最大超频速度侦测,处理器相关可以使用的指令集…

Windows11本地部署DeepSeek加速

本文介绍了一个可以相比之下更快速的在本地部署DeepSeek的方法,除了在上一篇博客中介绍的从Github或者Github加速网站获取Ollama之外,还可以通过从国内的其他大模型文件平台下载模型文件,来加速本地模型的构建。技术背景 在上一篇文章中我们介绍了在Ubuntu Linux操作系统上部…

EverEdit扩展脚本:在当前文件目录下新建同类型文件(增强)

1 扩展脚本:在当前文件目录下新建同类型文件(增强) 1.1 应用场景之前使用JS写了一个EverEdit的脚本,用于在当前打开的文档目录下新建一个同类型的文件,比如,在进行python语言学习时,做完练习,需要再开一个文件写代码,原脚本的不足是,每次弹出提示输入文件名的输入框,输…

Deepseek R1 + LMStudio 本地部署(windows)

DeepSeek-R1本地部署配置要求 Github地址:https://github.com/deepseek-ai/DeepSeek-R1?tab=readme-ov-file模型规模最低 GPU 显存推荐 GPU 型号纯 CPU 内存需求适用场景1.5B 4GB RTX 3050 8GB 个人学习7B、8B 16GB RTX 4090 32GB 小型项目14B 24GB A5000 x2 64GB 专业应用32…

GO指南之练习答案

GO指南之练习答案 Go指南 练习:循环与函数 为了练习函数与循环,我们来实现一个平方根函数:给定一个数 x,我们需要找到一个数 z 使得 z 尽可能地接近 x。 计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z 与 x 的近似度来改进 z,产生一个更好…

第三轮easy~hard题目

题目1代码 #include<iostream> #include<queue> #include<string> using namespace std; int main() {priority_queue<int> s;string str;int a;str="0";while(str!="end"){cin>>str;if(str=="insert"){cin>&g…

通过Ollama本地部署DeepSeek R1以及简单使用

本文介绍了在Windows环境下,通过Ollama来本地部署DeepSeek R1。该问包含了Ollama的下载、安装、安装目录迁移、大模型存储位置修改、下载DeepSeek以及通过Web UI来对话等相关内容。1、下载Ollama 首先我们到Ollama官网去下载安装包,此处我们下载的是Windows版本的安装包,如下…

git删除gitee上传大文件转载

前言:在提交推送本地更改至仓库时,误将大文件给提交了,导致push时报错文件过大,因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径,则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询大文件 git verify-pack -v .git/objects/pack/pack-*.id…