【STM32F407IGT6】26.7.8按键点灯LED
一.点亮小灯1cube设置1.从F407电机驱动控制板_原理图找到LED的对应引脚2.进行STM32CubeMX的基础设置3.打开小灯引脚4.进行时钟配置5.保存文件的基础设置注意选STM32Cube EW_F4 V1.28.0(这是你已经下载过的硬件包)否则会提示重新下载F4的最新硬件包。注意勾选第一个每个外设单独生成一组xxx.cxxx.h文件如 gpio.c/gpio.h、tim.c/tim.h代码分层清晰方便单独修改外设初始化日常开发默认勾选。2.keil设置及代码注意一开始我将代码写到了错误的循环中出现错误找不到stlink解决然后点击单片机上的复位开关将单片机开关一下注意要在正确的循环中写代码,(烧录后小灯可能不亮重新开关下单片机)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_RESET);//PA0灯亮 HAL_Delay(1000);//延时1秒 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_15,GPIO_PIN_SET);//PA0灯灭 HAL_Delay(1000);E2引脚小灯的代码同理。二.按键电灯打开按键引脚添加代码if(HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_2) RESET)//读取按键是否为低电平低电平即按下 { HAL_Delay(500);//用于消除物理按钮或开关的抖动确保读取到的状态是稳定的。 HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);//用于切换LED的状态。如果LED原本是亮的它会熄灭如果原本是灭的它会亮起。 }出现问题我们想象中是按下按钮小灯亮起再按小灯灭。但现在是不按小灯一直闪烁短按小灯不变依旧闪烁长按小灯保持按那一瞬间的状态长暗或者长灭。解决详细见文章【STM32F407VGT6】8.7HAL库按键点灯-CSDN博客声明函数/* USER CODE BEGIN PFP */ uint8_t key(uint16_t GPIO_Pin); /* USER CODE END PFP */函数感知按键是否被按下并返回按下按键的引脚值。/* USER CODE BEGIN 4 */ uint8_t key(uint16_t GPIO_Pin) { if(HAL_GPIO_ReadPin(GPIOG, GPIO_Pin) GPIO_PIN_RESET)//按键被按下 { HAL_Delay(50); //延时防抖动 if(HAL_GPIO_ReadPin(GPIOG, GPIO_Pin) GPIO_PIN_RESET) { while(HAL_GPIO_ReadPin(GPIOG, GPIO_Pin) GPIO_PIN_RESET); //按键持续被按则在循环中直到松开按键返回1 return 1; } } return 0; } /* USER CODE END 4 */主循环这里可以有多个按键所以用了if语句按下按键——返回按键引脚值——判断是否为PG2按键被按——反转小灯状态/* USER CODE END WHILE */ if(key(GPIO_PIN_2)) { HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);//翻转小灯 } /* USER CODE BEGIN 3 */现在现象短按下按键小灯状态反转