使用switch、case语句写出STM32F103C8T6基于库函数,采用按键按一下控制LED灯亮,按键再按一下控制LED灯灭的程序
时间: 2024-09-09 09:14:16 浏览: 108
STM32F103C8T6 最小系统版 基于库函数 驱动无FIFO的OV7670摄像头
5星 · 资源好评率100%
在STM32F103C8T6微控制器上,使用Keil MDK等集成开发环境编写这样的程序,可以利用GPIO口控制LED灯,并通过`while`循环结合`delay_ms()`函数来检测按键按下。这里假设我们有一个按键连接到PA0引脚(EXTI线),LED连接到PB0引脚。以下是使用`HAL_GPIO`库函数的示例:
```c
#include "stm32f10x.h"
#include "stm32f1xx_hal.h"
#include "stm32f1xx_exti.h"
// 定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
void LEDControl(uint8_t state) {
// 切换LED状态
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
}
int main(void) {
// 初始化GPIO
GPIO_InitStructure.Pin = GPIO_PIN_0; // 按键和LED
GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING; // EXTI下降沿触发
GPIO_InitStructure.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);
while (1) {
// EXTI中断处理
EXTI_GetITStatus(EXTI_Line0); // EXTI0对应PA0
if (EXTI_GetITStatus(EXTI_Line0) != RESET) { // 如果有按键按下
EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志
LEDControl(state ^ 1); // 反转LED状态(按下开,松开关)
state ^= 1; // 状态切换
HAL_Delay(100); // 延迟防止快速连续按键误判
}
}
return 0;
}
阅读全文