通过本节可以学习到:
- 如何在CubeMX配置上拉输入
- 什么是上拉输入
- 如何读取一个GPIO的输入状态
软件环境:
STM32CubeMX version6.10.0
Keil_v5(MDK-ARM) version 5.32
硬件环境:
STM32F103C8T6最小系统板(所有STM32通用下文操作)
关于上拉输入
GPIO上拉输入是一种输入模式,用于连接外部设备到微控制器或单片机的GPIO引脚上。当GPIO引脚处于上拉输入模式时,如果外部设备未连接到该引脚或者外部设备处于高阻态时,微控制器内部会通过一个较大的电阻(上拉电阻)将引脚拉高到逻辑高电平(一般为VCC电压),以确保引脚的电平为确定的逻辑状态。这样设计的目的是为了避免引脚漂移或噪声导致的不确定状态。
与上拉输入相对应的是下拉输入,它与上拉输入的原理类似,但是在外部设备未连接或处于高阻态时,微控制器内部会通过一个较大的电阻(下拉电阻)将引脚拉低到逻辑低电平(一般为地电压)。
如果GPIO引脚既不采用上拉输入也不采用下拉输入,那么它就是一个普通的输入引脚,需要外部设备提供明确的电平信号,否则引脚的状态将是不确定的,容易受到外部干扰的影响。
总的来说,上拉输入、下拉输入和普通输入之间的区别在于微控制器在引脚未连接外部设备或外部设备处于高阻态时,微控制器内部如何拉高或拉低引脚的电平以确保引脚的电平状态。
1、通过CubeMX完成外设初始化
基于【STM32CubeMX(1)】GPIO推挽输出——点亮第一个LED灯继续实现按键的输入状态判断,因此其他配置请移步。
2、通过MDK-ARM完成外设功能实现
本节仅是验证上拉输入实现按键控制LED灯的翻转,故按键判断采用低效的CPU延时消抖
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)==GPIO_PIN_RESET)//按键被按下{HAL_Delay(10);//延时消抖if(HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin)==GPIO_PIN_RESET){while(1){HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);HAL_Delay(100);}}}
3、单片机效果演示