STM32点亮LED灯

1、首先在原理图中寻找LED灯

2、还要有key

KEY被摁下后接地,有一个低电平信号。

所以能通过检测PA0,PA1判断是拉高还是拉低了

3、摁一下熄灭,再摁点亮

使用cubeMX找到STM32F103C8T6芯片,选择PA0,PA1作为输入端口,PB8,PB9作为输出端口,同时设置Debug为串口。生成代码。

①定义一个函数,检测电平,判断按键状态

cpp 复制代码
uint8_t Key_Scan(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
	if(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET)
	{
		while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);
		return KEY_ON;
	/*按键按下*/
	}
	else
	{
			return KEY_OFF;
	/*按键松开*/
	}
}

②实现按下按钮就切换LED灯的电平,实现亮和灭

按键按下产生低电平信号,接收信号反转电平,实现LED灯亮灭

cpp 复制代码
 while (1)
  {
    /* USER CODE END WHILE */
	if(Key_Scan(GPIOA,GPIO_PIN_0) == KEY_ON)
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);
	if(Key_Scan(GPIOA,GPIO_PIN_1) == KEY_ON)
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);
    /* USER CODE BEGIN 3 */
  }

宏指令:一般状态用宏指令

cpp 复制代码
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
#define KEY_ON 0
#define KEY_OFF 1

③灯的亮灭过于灵敏,可以用while()循环减少扰动

cpp 复制代码
while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET);
/*按住时一直是函数里的状态,实现防抖*/
相关推荐
piaoyiren4 小时前
STM32 使用LCD1602简单显示字符
stm32·单片机·嵌入式硬件·lcd1602
小羊先生car4 小时前
软件:STM32-F1系列-读取Flash(2026/7/14)
stm32·单片机·嵌入式硬件
weixin_464078078 小时前
Altium Designer自定义变压器
嵌入式硬件
QQ5286211249 小时前
芯片程序提取的具体流程和方法
stm32·单片机·嵌入式硬件·程序·pcb抄板
LingzhiPi10 小时前
零知派ESP32-S3-智能小车控制系统(4.2)-红外双目跟随模块使用
单片机·嵌入式硬件
智者知已应修善业14 小时前
【proteus交通灯故障检测的完善方案】2025-4-29
经验分享·笔记·单片机·嵌入式硬件·proteus
LingzhiPi15 小时前
零知ESP32--RC522NFC考勤打卡系统
c++·单片机·嵌入式硬件
炸膛坦客16 小时前
常见代码问题与解答:(二)因外部晶振频率改变导致 MCU 锁死的原因及处理方法
单片机·嵌入式硬件
ShiMetaPi17 小时前
ShiMetaPi Pico-G1:百元级黑光全彩AI ISP开发板
人工智能·嵌入式硬件·pico·isp
Lzh编程小栈18 小时前
嵌入式深度精讲|STM32引脚全方位底层原理、配置逻辑、硬件规范、高频面试题
c语言·stm32·单片机·嵌入式硬件