stm32按钮控制led亮灭
时间: 2023-08-13 15:04:32 浏览: 107
好的,您可以参考以下代码实现:
```c
#include "stm32f10x.h"
#define LED_Pin GPIO_Pin_12
#define LED_Port GPIOB
#define BTN_Pin GPIO_Pin_8
#define BTN_Port GPIOA
void delay(uint32_t time) {
while(time--);
}
int main(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// LED引脚配置
GPIO_InitStructure.GPIO_Pin = LED_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(LED_Port, &GPIO_InitStructure);
// 按钮引脚配置
GPIO_InitStructure.GPIO_Pin = BTN_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(BTN_Port, &GPIO_InitStructure);
while(1) {
if(GPIO_ReadInputDataBit(BTN_Port, BTN_Pin) == RESET) { // 检测Button是否按下
delay(50000); // 延时消抖
if(GPIO_ReadInputDataBit(BTN_Port, BTN_Pin) == RESET) { // 再次检测Button是否按下
GPIO_WriteBit(LED_Port, LED_Pin, (BitAction)(1 - GPIO_ReadOutputDataBit(LED_Port, LED_Pin))); // 反转LED状态
while(GPIO_ReadInputDataBit(BTN_Port, BTN_Pin) == RESET); // 等待Button松开
}
}
}
}
```
在该代码中,我们使用了一个外部Button控制LED的开关,当Button被按下时,LED的状态会反转。值得注意的是,为了避免Button的抖动,我们在Button被按下时加上了一个延时消抖的函数。
希望我的回答对您有所帮助。
阅读全文