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 */
  }

 

posted @   雾枫  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
历史上的今天:
2022-04-30 正则表达式学习
2022-04-30 限制lineedit输入数据格式 正则表达式
点击右上角即可分享
微信分享提示