96SEO 2026-02-20 10:14 9
我们以PB1为例来分析假如按键没有被按下那么PB1的电平就与左上角的VDD相等也就是PB1

1如果按键被按下那么右下角的接地就会被导通PB1的电平3就与GND相等也就是PB1
这样我们就能通过以上原理对按键进行判断但是按键判断是一个事件触发程序所以我们要使用定时器来使开发板能在任意时间都能对按键进行判断。
因此我们再下一步设置STM32CubeMX中需要对定时器初始化。
首先我们先根据按键的原理图配置好引脚需要注意的是再前几篇文章中讲LCD与LED我们讲引脚都是设置为GPIO_Output但是按键的四个引脚我们需要设置为GPIO_input如图
然后在左侧选择GPIO中的按键的四个引脚上下拉模式设为上拉为以下状态
关于定时器的详细知识点与解析可前往蓝桥杯嵌入式这篇博客在这里我们只讲定时器的应用
如果大家有去做过省赛或国赛题目就都会看到过对按键响应时间是有要求的一般都是响应时间在0.1秒内所以我们的定时器可以就设置为0.01秒。
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef
以下就是中断回调函数很长记不住怎么办。
别担心还有办法我们打开keil5在Project下找到stm32g4xx_it.c在里面找到stm32g4xx_hal-tim.h并打开他翻到最下面再往上滑一点点大概两千五百多行的位置就可以找到这个函数啦我们就可以直接复制使用。
1.判断中断回调函数收到的中断信号是不是我们刚刚给按键设置的定时器3的信号如果是就进入按键判断函数
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef
//判断中断信号是否来自定时器3{key[0].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
1;key[1].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_staHAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);for(int
//进入下一次定时器扫描按键还是按下状态那么就确认为按下以此来消抖{key[i].judge_sta
//否则就是抖动本次不算按键被按下key[i].judge_sta
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef
//判断中断信号是否来自定时器3{key[0].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);
1;key[1].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_staHAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);for(int
//进入下一次定时器扫描按键还是按下状态那么就确认为按下以此来消抖{if(a
//小于70说明上次按下后到这次按下时间间隔小于0.7秒{key[i].double_key_flag
//这是一次双击事件}else{key[i].key_flag
//记录这一次是上面按键被按下}key[i].judge_sta
//否则就是抖动本次不算按键被按下key[i].judge_sta
//判断是否松手松手后按键状态重置key[i].key_time
HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef
{if(htim-InstanceTIM3){key[0].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[1].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_staHAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_staHAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);for(int
//进入下一次定时器扫描按键还是按下状态那么就确认为按下以此来消抖{key[i].judge_sta
//一次扫描10毫秒100次1000毫秒就是判断是否长按超过1000毫秒
}else{key[i].key_time;if(key[i].key_time
//一次扫描10毫秒100次1000毫秒就是判断是否长按超过1000毫秒//未松手时,就会执行相应反应{key[i].long_flag
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback