一、引言

在之前的实验中,我们通过机械按键实现了对LED的控制。但今天我们要挑战更高级的交互方式——触摸按键!利用 STM32 内置的 电容式触摸传感功能(Capacitive Touch Sensing, CTS),实现无物理接触的 LED 控制,提升用户体验和系统智能化水平。

二、硬件准备

硬件:STM32F103VET6开发板(自带触摸按键)、st-link、杜邦线若干

软件:STM32 Cube IDE

其他准备:STM32F103VET6开发板原理图、参考视频、ppt等等

原理图链接:DRG ST-2白羊座原理图V1.0.pdf

参考视频链接:[06-04]中断式触摸按键编码演示_哔哩哔哩_bilibili

ppt/代码仓库链接:drg_st_2_f103vet6: 高博士,“白羊座”STM32F103VET6开发板,开源。 - Gitee.com

三、原理简单说明

STM32F103VET6开发板自带触摸按键的原理图

从这两张图来看,最直接最直白的就是:手指触摸到方形按键,从手指按下到手指离开,pa1被拉低了,1Q 那里会跟着变化。手指触摸到按键,pa1被拉低,1Q输出为低电平,那么3v3经过led和电阻到out_1,就导通了;手指离开触摸按键以后,pa1被拉高,1Q输出为高电平,则没有导通。(这里是我个人的理解,作为外行人员来说,能力有限,在原理上,可能存在一定的错误,若是不对,不明白或者有疑问的地方也可以去看专业的博主视频讲解哦)

STM32F103VET6开发板自带led小灯的原理图

pb0处的led0小灯点亮的原理我这就不再叙述啦,往期的帖子和视频已经用到过了。

实验的目标是:手指触摸下方形的按键,pb0处的led小灯亮起,再触摸以下按键小灯又熄灭。

STM32F103VET6开发板中断式的触摸按键(图片来自高博士ppt)

那这个要怎么使用代码实现控制的逻辑?

直白地说,只要利用中断的方式,检测上升沿,一旦检测到了pa1出现由低转高的状态,就使连接到pb0的led小灯状态翻转。

四、软件操作

1、打开软件STM32 Cube IDE,选择STM32F103VET6芯片,新建项目:Touch_Button_LED

2、修改debug的模式,如下图所示

3、gpio引脚设置(ai给了指导内容,可以借鉴,但实际的操作会略有不同哦,可以详细看我的软件操作的图片)

     

4、nvic中断设置(ai给了指导内容,可以借鉴,但实际的操作会略有不同哦,可以详细看我的软件操作的图片)

nvic设置方式1

nvic设置方式2(设置1/2选择一个即可)

5、保存并生成代码

6、在maic.c文件中输入相关代码(可以利用ai辅助)

/* USER CODE BEGIN 4 */
/**
  * @brief  EXTI1 中断服务函数(对应 PA1 引脚)
  * @note   当 TTP223 触摸芯片检测到触摸时,其输出引脚(连接 PA1)会从低电平跳变为高电平,
  *         触发上升沿中断。本函数负责:
  *         1. 确认中断源是否为 PA1;
  *         2. 清除中断挂起位,防止重复进入;
  *         3. 翻转 PB0 引脚电平,控制 LED 亮灭状态。
  */
void EXTI1_IRQHandler(void)
{
    /* 检查中断标志位:确认是否由 PA1(GPIO_PIN_1)触发的中断 */
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_1) != RESET)
    {
        /* 必须清除中断挂起位!否则中断会持续触发,导致程序卡死在中断中 */
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_1);

        /* 翻转 PB0 的输出电平:
         * - 若当前为高电平(LED 灭),则变为低电平(LED 亮);
         * - 若当前为低电平(LED 亮),则变为高电平(LED 灭)。
         * HAL_GPIO_TogglePin() 内部自动读取当前状态并取反,无需手动维护状态变量。
         */
        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
    }
}
/* USER CODE END 4 */

但是将上述代码直接复制进去,编译出现了错误。

将报警的内容复制给ai,让其帮我们分析原因,并给出修改方案。

我这里选择了方法一就行了修改,删去了多余代码。

点击小锤子重新编译。

7、编译成功以后,硬件接入电脑烧录程序,观察实验效果。

五、思考与总结

实验的过程中,刚开始的初学者,外行人对原理性的认识还不够深,目前有点偏向复制粘贴AI指导代码。

凡事总得有一个过程,软硬件的学习,从不会到会,先试着理解原理,能把实验先走成功,接着再反过头来理解逻辑与原理,兴许会能学习到新的知识,慢慢来吧。

后续的软件操作视频将会更新在我的哔哩哔哩中,哔哩哔哩搜索:不会c的小谢。

有兴趣的小伙伴可以关注,一起学习哦。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐