stm32外部中断控制四个led灯亮灭
时间: 2024-11-28 08:16:51 浏览: 1
STM32外部中断解读配置
STM32单片机通过外部中断可以方便地控制LED灯的亮灭。首先,你需要准备四个GPIO端口连接到LED,通常每个LED对应一个GPIO的输出位。这里以STM32F103为例,假设我们使用PA8、PA9、PB6和PB7作为LED。
1. **配置GPIO**:
- 设置LED相关的GPIO为推挽输出模式,以便驱动LED。
- 对于每个GPIO,设置对应的IO口线为输出状态,并初始化为低电平(LED熄灭)。
```c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_7; // PA8, PA9, PB6, PB7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // Push-Pull Output
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
```
2. **配置中断**:
- 配置外部中断触发源,如EXTI线,例如EXTI Line 2连接到PA8。
- 为中断服务函数注册中断处理程序。
- 开启中断和中断使能。
```c
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line_2; // EXTI for LED 1 (PA8)
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_RISING; // Rising edge trigger
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; // Falling edge detection
EXTI_Init(&EXTI_InitStructure);
NVIC_EnableIRQ(EXTI2_IRQn); // Enable EXTI2 Interrupt in NVIC
void EXTI2_IRQHandler(void) {
static int state = 0; // State counter to toggle LEDs
GPIO_SetBits(GPIOA, state % 4 == 0 ? GPIO_Pin_8 : GPIO_Pin_9); // Toggle LED 1 or 2
GPIO_ResetBits(GPIOB, state % 4 == 0 ? GPIO_Pin_6 : GPIO_Pin_7); // Toggle LED 3 or 4
state++;
}
```
3. **主循环中等待中断触发**:
- 在主函数的while循环里,让程序运行,直到外部中断发生。
```c
while (1) {
// Main loop... do other tasks here
}
```
当你触动连接到PA8的外部信号源使其下降沿触发时,中断会被触发,LED1和LED2会交替闪烁。同样,当其他GPIO线触发时,相应的LED3和LED4也会按照同样的规则亮灭。
阅读全文