效果:
1、通过Stm32CubMX开启定时器、设置对应的io口,然后生成工程
STM32CubeMX | STM32 HAL库方式的微秒延时函数
2、自定义呼吸灯函数代码:
// 呼吸灯 函数 // GPIO_TypeDef* GPIOx : GPIO组 (A - G) // uint16_t GPIO_Pin : IO口 (GPIO_Pin_0 -- GPIO_Pin_16) // uint8_t continueTime : 亮或灭的持续时间 // uint16_t frequency : 亮或灭的频率 // uint8_t minimumLuminance :从最低亮度开始上升 void BreathLed(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,uint8_t continueTime, uint16_t frequency,uint8_t minimumLuminance) { uint16_t t = 1; uint8_t toggle = 0; for(int i =0;i<frequency*2;i++) { if(toggle == 0) { for(int i =0;i<continueTime;i++) { HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_RESET); delay_us(t+minimumLuminance); HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_SET); delay_us((frequency +1)-t); } t++; if(t == frequency) { toggle = 1; } } if(toggle == 1) { for(int i = 0;i<continueTime;i++) { HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_RESET); delay_us(t+minimumLuminance); HAL_GPIO_WritePin(GPIOx,GPIO_Pin,GPIO_PIN_SET); delay_us((frequency +1)- t); } t--; if(t==1) { toggle = 0; } } } }
3、在main函数中调用代码:
while (1) { /* USER CODE END WHILE */ BreathLed(GPIOA,GPIO_PIN_6,10,200,16); /* USER CODE BEGIN 3 */ }
标签:HAL,Pin,自定义,uint8,呼吸,uint16,GPIO,函数 From: https://www.cnblogs.com/RedWetPlace/p/18167098