stm32F07 HAL 库 通过定时器方式实现呼吸灯 自定义呼吸灯函数 (以参数方式设置io口,亮或灭的持续时间,亮或灭的频率,从最低亮度开始上升)
效果:
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 */ }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
2022-04-30 正则表达式学习
2022-04-30 限制lineedit输入数据格式 正则表达式