stm32按键控制led灯亮灭代码
时间: 2024-09-25 15:20:29 浏览: 267
STM32微控制器常用GPIO口来控制LED灯,并通过按键中断实现灯的亮灭切换。以下是一个简单的示例代码片段,假设我们有一个按键连接到PA0引脚,LED连接到PB0引脚:
```c
#include "stm32f1xx.h" // 包含STM32的头文件
// 定义GPIO配置
GPIO_InitTypeDef GPIO_InitStructure;
#define KEY_PIN GPIO_Pin_0 // 按键引脚
#define LED_PIN GPIO_Pin_0 // LED引脚
#define KEY_GPIO_PORT GPIOA // 按键GPIO端口
#define LED_GPIO_PORT GPIOB // LEDGPIO端口
void EXTI_Configuration(void) {
GPIO_InitStructure.GPIO_Pin = KEY_PIN; // 配置按键GPIO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 设置输入模式
GPIO_Init(KEY_GPIO_PORT, &GPIO_InitStructure); // 初始化GPIO
GPIO_InitStructure.GPIO_Pin = LED_PIN; // 配置LEDGPIO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 输出推挽模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 高速
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure); // 初始化GPIO
// EXTI线配置
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = KEY_GPIO_Pin; // 配置EXTI线对应按键引脚
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // 异常模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // 上升沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 开启EXTI线
EXTI_Init(&EXTI_InitStructure);
}
void SystemClock_Config(void) {
... // STM32系统时钟配置
}
int main(void) {
SystemClock_Config(); // 配置系统时钟
EXTI_Configuration(); // EXTI线配置
while (1) {
if (GPIO_ReadInputDataBit(KEY_GPIO_PORT, KEY_PIN)) { // 如果按键按下
GPIO_SetBits(LED_GPIO_PORT, LED_PIN); // 点亮LED
} else {
GPIO_ResetBits(LED_GPIO_PORT, LED_PIN); // 灭掉LED
}
}
}
```
阅读全文