使用两个按键通过中断控制两个led灯的开关,使用stm32f103的标准。
时间: 2024-11-12 22:44:03 浏览: 73
使用STM32F103单片机通过中断控制两个LED灯的开关,通常涉及以下几个步骤:
1. **GPIO初始化**:
首先,你需要配置这两个LED所连接的GPIO口为输出模式,以便可以驱动它们亮灭。
```c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = LED_PIN_1 | LED_PIN_2; // 把LED1和LED2对应的引脚设置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 设置为推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设定工作速度
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
```
2. **中断设置**:
为两个按键分配中断请求,例如PA0和PA1。当按下按键时,会触发中断。你需要配置中断优先级并编写中断服务函数(ISR)来响应按键事件。
```c
void EXTI0_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line0) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志
// 对于LED1操作:如果按键是开关闭合,则点亮LED1
HAL_GPIO_WritePin(GPIOA, LED_PIN_1, SET);
// 如果是闭合开启,则熄灭LED1
// HAL_GPIO_WritePin(GPIOA, LED_PIN_1, RESET);
}
}
void EXTI1_IRQHandler(void)
{
if (EXTI_GetITStatus(EXTI_Line1) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line1); // 清除中断标志
// 对于LED2操作同上,替换LED_PIN_1为LED_PIN_2
}
}
```
记得添加中断向量组(Interrupt Vector Table,IVT)的注册,并启用相应的中断源。
```c
void SystemClock_Config(void)
{
... // 其他时钟配置
// 启动EXTI Line0和Line1的中断
__HAL_NVIC_ENABLE_IT(NVIC李先生_IRQn);
// 初始化EXTI中断向量表
HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
// 设置每个中断的优先级
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
HAL_NVIC_SetPriority(EXTI1_IRQn, 0, 0);
}
```
3. **主循环和中断处理**:
主程序需要进入一个无限循环,等待中断的发生。每当按键被按下,中断服务函数会被调用。
```c
while (1)
{
// 主程序其他部分...
}
```
阅读全文