首页 > 其他分享 >stm32F07 HAL 库 通过定时器方式实现呼吸灯 自定义呼吸灯函数 (以参数方式设置io口,亮或灭的持续时间,亮或灭的频率,从最低亮度开始上升)

stm32F07 HAL 库 通过定时器方式实现呼吸灯 自定义呼吸灯函数 (以参数方式设置io口,亮或灭的持续时间,亮或灭的频率,从最低亮度开始上升)

时间:2024-04-30 09:35:18浏览次数:28  
标签:HAL Pin 自定义 uint8 呼吸 uint16 GPIO 函数

效果:

 

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

相关文章

  • paddlepaddle自定义网络模型及onnx模型转换与推理
    前面介绍过了使用Paddleseg套件训练后,使用export.py文件导出模型为推理部署模型。具体可以参考之前的:https://www.cnblogs.com/wancy/p/18028138本文介绍使用paddle自定义简单二分类CNN模型到训练数据集再到转换onnx模型推理。1. 数据集划分我这里将数据划分为tr......
  • MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练
    本文分享自华为云社区《MindSpore强化学习:使用PPO配合环境HalfCheetah-v2进行训练》,作者:irrational。半猎豹(HalfCheetah)是一个基于MuJoCo的强化学习环境,由P.Wawrzyński在“ACat-LikeRobotReal-TimeLearningtoRun”中提出。这个环境中的半猎豹是一个由9个链接和8个关节......
  • HarmonyOS 自定义装饰器
    1.引言在软件工程中,日志记录是监控和调试应用程序的重要工具。鸿蒙操作系统(HarmonyOS)支持自定义装饰器,这使得开发者可以方便地向类的方法添加日志记录功能。本文将介绍两个用于记录方法执行的自定义装饰器:LogMethod和logDecorator。2.装饰器基础装饰器是一种特殊类型的声明......
  • 『手撕Vue-CLI』添加自定义指令
    前言经上篇『手撕Vue-CLI』添加帮助和版本号的介绍之后,已经可以在控制台中输入nue--help来查看帮助信息了,但是在帮助信息中只有--version,--help这两个指令,而vue-cli中还有很多指令,例如create,serve,build等等,所以本章将继续添加自定义指令,例如create指令。添加create......
  • CAD二次开发 自定义纸张
    在实际CAD二次开发种遇到了需要自定义纸张的问题,CAD本身没有自定义纸张的api,需要对pmp文件做一些操作,再次,致敬惊惊大佬的博客,才让我这方面的开发工作量减少了很多,靠我自己也一时半会解决不了,因为我是用CAD2020版本来做这个的我对惊佬的两个重要的类做了一部分更改。publicclass......
  • 名表维修保养:uniapp 微信小程序自定义导航栏 详细步骤
    组件使用:  <navbarclass="header":background="backgroundColor"backtitle="标题"@onBack="goBack"></navbar>组件引用:  importnavbarfrom'@/components/NavBer.vue';组件注册:  components:{navbar......
  • 自定义单链表队列的基本接口函数(非循环队列)
    单链表构建队列的接口函数/********************************************************************文件名称: 单链表构建队列的接口函数文件作者:[email protected]创建日期:2024/04/26文件功能:对单链表循环队列的增删改查功能的定义注意事项:NoneCop......
  • django自定义构建模板,通过bootstrap实现菜单隐藏和显示
    实现后的界面1.自定义页面模板实现主页面代码(home.html){%extends'layout.html'%}#引用模板{%loadstatic%}{%blockcontent%}<h3>欢迎登录</h3>{%endblock%}自定义内容layout.html文件设置(模板){%loadstatic%}{%loadmenu%}#导入m......
  • 读《我和Labview》6用户自定义控件
    枚举枚举型控件与下拉列表控件的比较单选按钮控件创建和使用一个枚举控件用户自定义控件创建一个自定义控件自定义控件的组成部分修改控件的组成部分简单动画自定义类型严格自定义类型......
  • 自定义顺序栈-完成十进制转十六进制
    十进制转十六进制输出/********************************************************************* 文件名称: 十进制转十六进制输出* 文件作者:[email protected]* 创建日期:2024/04/25* 文件功能:对双向链表的增删改查功能的定义* 注意事项:None*......