stm32按键控制LED
时间: 2023-11-23 12:06:34 浏览: 117
好的,这里是一个简单的示例代码,可以实现按下按键控制LED灯的亮灭。
首先,我们需要初始化按键和LED的GPIO口,代码如下:
```c
GPIO_InitTypeDef GPIO_InitStruct;
// 初始化按键GPIO口
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
GPIO_InitStruct.Pin = GPIO_PIN_0; // PA0对应的按键
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
// 初始化LED GPIO口
__HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟
GPIO_InitStruct.Pin = GPIO_PIN_7; // PB7对应的LED
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 没有上拉/下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速输出
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 初始化GPIOB
```
接下来,我们需要在主函数中不断检测按键的状态,如果按键被按下,则控制LED灯的亮灭。代码如下:
```c
while (1)
{
// 检测按键状态
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
// 按键被按下,点亮LED灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
}
else
{
// 按键没有被按下,熄灭LED灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
}
}
```
完整的代码如下:
```c
#include "stm32f4xx_hal.h"
int main(void)
{
// 初始化按键GPIO口
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
GPIO_InitStruct.Pin = GPIO_PIN_0; // PA0对应的按键
GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉电阻
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA
// 初始化LED GPIO口
__HAL_RCC_GPIOB_CLK_ENABLE(); // 使能GPIOB时钟
GPIO_InitStruct.Pin = GPIO_PIN_7; // PB7对应的LED
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式
GPIO_InitStruct.Pull = GPIO_NOPULL; // 没有上拉/下拉电阻
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速输出
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // 初始化GPIOB
while (1)
{
// 检测按键状态
if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
// 按键被按下,点亮LED灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
}
else
{
// 按键没有被按下,熄灭LED灯
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
}
}
}
```
注意,这里的代码是针对STM32F4系列的,如果你使用的是其他系列的STM32芯片,可能需要做一些修改。
阅读全文