最近我在使用STM32做一个简单的按键控制LED的项目。通过点击按键,LED可以打开或关闭。这个项目虽然简单,但是可以帮助我更好地理解GPIO输入输出的操作。下面是我的基本实现过程和代码共享。
硬件连接:- 我使用了STM32F103C8T6这块开发板。
- 一个LED连接在GPIO口(比如PC13)上,用于指示状态。
- 一个按钮连接在GPIO口(比如PA0)上,作为输入信号。
软件配置:使用STM32CubeMX来配置GPIO:
- PC13配置为输出模式,用于控制LED。
- PA0配置为输入模式,使用上拉电阻,作为按键输入。
CubeMX代码生成:在STM32CubeMX配置好GPIO后,生成了代码框架。接下来,我们只需要在main.c文件中添加逻辑代码,来检测按键状态并控制LED。
代码示例:#include "main.h"
int main(void)
{
HAL_Init();
SystemClock_Config();
// 初始化所有外设,包括GPIO
MX_GPIO_Init();
// 初始化变量,记录LED状态
uint8_t ledState = 0;
while (1)
{
// 读取按键状态
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) // 按键按下
{
HAL_Delay(50); // 消抖延时
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET) // 按键依然按下
{
ledState = !ledState; // 切换LED状态
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, ledState ? GPIO_PIN_RESET : GPIO_PIN_SET); // 控制LED
}
// 等待按键松开
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET);
}
HAL_Delay(10); // 主循环延时
}
}
关键部分说明:- HAL_GPIO_ReadPin函数用于读取按键状态,当按键按下时,GPIO_PIN_0会被拉低。
- 按键按下后,我用**HAL_Delay(50)**进行消颤,再次确认按键状态。
- 使用一个ledState变量来记录LED的当前状态,每次按键按下时,LED状态就会发生。
- HAL_GPIO_WritePin用来设置PC13引脚的电平,控制LED的亮灭。
效果:- 按一下按键,LED亮起。
- 再次按下按钮,LED 就会出现。
- 按键每次按下后,LED状态会切换。
这是个非常简单的项目,但通过它我学会了如何配置GPIO,处理按键输入以及使用HAL库控制LED。希望这个例子能够对同样初学STM32的朋友有所帮助!
|
正在初学,正好需要。