stm32两个按键控制led灯
时间: 2024-10-13 21:13:10 浏览: 20
在STM32单片机中,使用两个按键控制LED灯的基本步骤如下:
1. **硬件连接**:
- 将两个按键分别连接到STM32的输入引脚,例如PA0和PA1。
- LED灯通常接到GPIO口作为输出,比如PB0。
2. **初始化GPIO**:
- 配置GPIO模式,将输入引脚设置为输入,并配置为下拉或推挽模式;将输出引脚设为输出模式。
3. **中断配置**:
- 如果使用按键中断功能,需要为按键分配中断并编写中断服务函数。当按键按下时,触发中断处理程序。
4. **主循环**:
- 主循环中,读取按键的状态,如检测到某个键被按下,就改变对应的LED状态(点亮或熄灭)。可以先读取按键状态,如果变化则切换LED,这样可以减少CPU的频繁操作。
5. **示例代码**:
```c
void EXTI_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 按键引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 输入浮空
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // LED灯引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP; // 输出推挽
GPIO_Init(GPIOB, &GPIO_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line_0 | EXTI_Line_1; // 按键线
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_IT_Rising; // 上升沿触发
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // 落下触发
EXTI_Init(&EXTI_InitStructure);
EXTI_Cmd(EXTI_Line_0, ENABLE); // 开启按键0的中断
EXTI_Cmd(EXTI_Line_1, ENABLE); // 开启按键1的中断
}
void EXTI_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line_0) == SET) { // 判断按键0是否按下
GPIO_SetBits(GPIOB, GPIO_Pin_0); // 点亮LED
EXTI_ClearITPendingBit(EXTI_Line_0); // 清除中断标志
}
else if (EXTI_GetITStatus(EXTI_Line_1) == SET) {
GPIO_ResetBits(GPIOB, GPIO_Pin_0); // 熄灭LED
EXTI_ClearITPendingBit(EXTI_Line_1); // 清除中断标志
}
}
```