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);
/*按住时一直是函数里的状态,实现防抖*/
相关推荐
虎王物联5 小时前
STM32 HAL库串口DMA空闲中断:高效接收不定长Modbus数据帧
stm32·单片机·嵌入式硬件·dma·modbus
自小吃多5 小时前
DXF文件导入与PCB板框定义笔记
笔记·嵌入式硬件
SUNNYSPY0015 小时前
AO4402-ASEMI便携设备电源开关AO4402
单片机
单片机仿真设计8 小时前
【proteus仿真】基于 STC89C52 单片机家用智能台灯设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
2601_950790688 小时前
深圳国产单片机厂商怎么选?技术能力与服务能力检查表
单片机·嵌入式硬件·国产mcu·芯片厂商·深圳单片机·单片机选型
hongmai6668889 小时前
MP2348GTL-Z:这颗24V/4A同步降压芯片,把性能和体积平衡得恰到好处
c语言·开发语言·arm开发·单片机·5g
笨笨饿10 小时前
#135_代码中的类型重定义艺术:从基础封装到函数类型设计
开发语言·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库
西城微科方案开发10 小时前
高精度低功耗胎压计方案——气压表解决方案
单片机·嵌入式硬件
LavaLin0112 小时前
STM32H562RGT6 与 STM32F722RET6 规格对比
stm32
VALENIAN瓦伦尼安教学设备12 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法