请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32按键控制

[复制链接]
STMCU小助手 发布时间:2022-11-24 15:39
按键扫描的基本原理
按键信号的识别:一般来说,按键的两个引脚的一端通过电阻上拉到高电平,另一端则接地。接上拉电阻时在没有按键按下的时候,输入引脚为高电平,当有按键按下,输入引脚则为低电平;接下拉电阻时在没有按键按下的时候,输入引脚为低电平,当有按键按下,输入引脚则为高电平。
通过反复读取按键输入引脚的信号,然后识别高低电平来判断是否有按键触发。
为什么去抖动:按键的输入引脚有低电平产生不代表一定是有按键按下,也许是干扰信号,因此,需要通过去抖动处理,将这些干扰信号过滤,从而获得真实的按键触发信号。
如何去抖动:首次检测到按键输入引脚有低电平后,稍作延时,再次读取该引脚,如还是低电平,则确认为按键触发信号;否则,判断为干扰信号,不予处理。
HAL库中关于GPIO的3个重要函数
电平输出函数
void HAL_GPIO_WritePin( GPIO_TypeDef* GPIOx, uint16_t GPIo_Pin, GPIO_PinState PinState);
电平翻转函数
void HAL_GPIO_TogglePin( GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);
电平输入函数
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPlOx,uint16_t GPIO_Pin);
如:判断PC13引脚的输入信号,若为高电平,则将PB9引脚控制的LED灯的开关状态切换。
  1. if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_SET)
  2. {
  3.         HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
  4. }
复制代码

按键控制实验设计
使用图形化的配置工具CubeMX进行硬件配置

首先新建一个项目

bbbbe8480e054d60b743ef49a69582f4.png

选择芯片

3bf496df40fb48a4864ba08dbb271121.png

进入以下引脚界面,开始配置工作

46c3ffe4762c4874b995f6315f1a557e.png

引脚配置
PB8和PB9为output模式,PC13和PB1为input模式

5e80f01e2bdf44daa4dffbc958b58591.png

系统配置,选择SWD接口的仿真器,Debug中选择Serial Wire

b04e2f6497184331934b821496c30018.png

选择使用外部晶振

fd01b8062a084d44aec7944620bd55f0.png

将PB1和PC13设置为上拉模式

223672854e334fec963c7b744419917d.png

在时钟树中配置

6dc407bd84d746068f97974dc0d25dfa.png

生成代码

e4b2f77be5fb44f4834e8d2ec108654b.png

37b60cc243bc4864a45296d6b6f2cd58.png

使用Keil打开生成的代码进行编辑
打开文件

d8aefff5af4d4af7af0131fb0758c228.png

代码编写
在/* USER CODE BEGIN WHILE */与/* USER CODE END WHILE */中while循环下编写
  1. if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET)  // 如果按键被按下
  2. {
  3.         HAL_Delay(10);  // 消抖处理
  4.         if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET)  // 如果此时依然为低电平
  5.         {
  6.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);  // 翻转此引脚电平
  7.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);  // 翻转此引脚电平
  8.                 while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET);  // 松开按键后再执行下一轮循环
  9.         }
  10. }
复制代码

编译代码

38225350580b4b7f8f21a193bc31be79.png

Proteus中仿真
新建工程

1fee45c2f0824ce18f2caa998f52415b.png

工程向导
一直选择默认,在Firmware中按照以下配置,最后单击完成

ec2b004db6c74d0986015909f2e61b26.png

注意:应当尽量使CubeMX中选择的开发板与仿真时选择的开发板一致

仿真电路图搭建

8bc017a55c0c4fb98c04f6150940a1c6.png

其中接地线在

d7071ed45011412cb2c143d3f8446af7.png

搭建完毕后双击开发板,引入编译代码后产生的hex文件

462dd57710fa4b42947ce62c1c07eeff.png

点击左下角开始模拟

未按按键时,灯为亮的状态

593645e9644d4ddf8ddd0b0a6da83761.png

按一次按键后,灯熄灭

7a362137065c4be680b15c882f46eb8b.png

————————————————
版权声明:m0_56450064


收藏 评论0 发布时间:2022-11-24 15:39

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版