STM32 cubeMX 呼吸灯实验

文章代码使用 HAL 库。

文章目录

  • 一、1.PWM原理
  • 二、LED 原理图
  • 三、使用cubemx 配置 led
  • 四、PWM 相关函数
  • 五、PWM占空比占空比计算
  • 六、PWM 呼吸灯重要代码
  • 总结


呼吸灯

一、1.PWM原理

PWM全称为脉冲宽度调制(Pulse Width Modulation),是一种常用的调制技术。它通过改变信号脉冲的宽度来控制电路或装置的输出功率或电压。

在PWM中,周期性的方波信号被产生,其中脉冲的宽度是可变的,而脉冲的频率是固定的。通常,PWM信号的周期称为周期时间,而脉冲的占空比则是脉冲宽度与周期时间之间的比值。

PWM信号可用于控制电机速度、调节LED的亮度、产生模拟信号等各种应用。通过改变PWM信号的占空比,可以在时间上控制输出信号的强度或控制设备的工作时间比。

周期:PWM周期(Pulse Width Modulation period)指的是PWM信号一个完整的周期的时间长度。在PWM信号中,周期是指一个完整的脉冲周期,包括脉冲的高电平和低电平部分。

计算公式:(定时器预分频系数 + 1) * (重装载值 + 1) / 时钟主频

占空比:

占空比通常用百分比或比例表示,可以取值在 0% 到 100% 之间,或是 0 到 1 之间。占空比为 0% 表示PWM 信号全为低电平,占空比为 100% 表示 PWM 信号全为高电平。一般而言,占空比决定了 PWM信号中高电平的时间长度,从而控制到达被驱动装置的电源的平均电压水平。

对于直流电机或LED等装置,常用 PWM 控制来调节速度或亮度。例如,在 50% 的占空比下,PWM 信号在一个周期内将有一半的时间为高电平,一半的时间为低电平,这将导致电机转速或灯光亮度的降低。ARR(自动重载寄存器)增加占空比将增加高电平时间,减小占空比则减小高电平时间。

例子:在输出电压为10V的电路中,设置PWM占空比为40%,那么起始这个电路输出的实际电压是4V。

通常控制LED时只需要给一个高电平就可以控制那么下面是LED电平状态图使用PWM控制LED调节亮度的电平状态图.

在这里插入图片描述
在这里插入图片描述

二、LED 原理图

可以看到有4个led。 其中 LED2 接到了PB2引脚, LED3 接到了PB1引脚, LED4 接到了PB0引脚,所以我们需要配置对应 led 的 gpio 引脚为输出引脚。

在这里插入图片描述
在这里插入图片描述

三、使用cubemx 配置 led

在这里插入图片描述
在这里插入图片描述

四、PWM 相关函数

启动定时器PWM模式

HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

参数:

  • TIM_HandleTypeDef *htim`:指向 TIM_HandleTypeDef 结构体的指针,该结构体包含了定时器的配置和状态信息。

  • uint32_t Channel`:指定要启动 PWM 的通道。对于 STM32 定时器而言,可以有多个通道,每个通道可以独立地生成 PWM 信号。

设置 占空比

__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__);

参数:

  • HANDLE:是一个宏或变量,用于表示特定定时器的句柄。

  • CHANNEL:这是指定要操作的定时器通道。

  • COMPARE:这是要设置的比较值,用于比较寄存器的内容。

// 也可以使用 CCRx 比较寄存器设置 占空比。
TIM3->CCR3 = 200;

// 也可以通过htim3.Instance->CCRx直接修改CCR的值
htim3.Instance->CCR3 = 200;

五、PWM占空比占空比计算

CCR(捕获/比较寄存器)/ ARR(自动重载寄存器) 100%*

如果 ARR(自动重载值) = 500时,当 CCR(比较寄存器值) = 100 则 占空比是 20%

六、PWM 呼吸灯重要代码

int pwm_value = 0;		// 占空比// 开启 pwm 输出
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);for(uint16_t i=1;i<500;i++)    // 通过循环逐渐改变CCR,进而改变占空比。
{htim3.Instance->CCR3 = i; HAL_Delay(1);
}for(uint16_t i=499;i>=1;i--)
{htim3.Instance->CCR3 = i;   // 通过htim3.Instance->CCRx直接修改CCR的值HAL_Delay(1);
} 

在这里插入图片描述


总结

下篇文章为大家介绍 无源蜂鸣器唱歌。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拥有大量虾皮买家号有哪些好处

拥有众多Shopee买家账号&#xff0c;无疑是卖家们获取极大优势的一项策略。多账号的运用不仅有助于卖家在Shopee平台上获得更为丰富的流量&#xff0c;更能够在关键词排名和销售表现等方面为其带来显著提升。 首先&#xff0c;多个Shopee买家账号的灵活运用&#xff0c;使卖家能…

前后端(JAVA)实现AES对称加解密方式

文章目录 前后端&#xff08;JAVA&#xff09;实现AES对称加解密方式1 对称加密分类以及概括1.1 加密安全等级 DES < 3DES < AES < RC1.2 DES1.3 3DES1.4 AES1.5 RC 2 前后端实现AES对称加解密方式3 后端AES对称加解密&#xff08;ECB和CBC模式&#xff09;工具类4 前…

【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用

迈向智能未来&#xff1a;Python与物联网生态系统的完美融合 前言 随着物联网技术的不断发展&#xff0c;Python作为一种灵活且强大的编程语言&#xff0c;逐渐成为物联网开发的重要工具之一。本文将深入探讨物联网领域中常用的Python库和框架&#xff0c;涵盖了从轻量级通信…

JavaScript <有道翻译之数据解密‘23年12月06日版‘>--案例(三)

前言: 记得上半年还是去年,有道翻译还是直接返回明文数据;现在也跟着,用接口返回加密数据了; 娱乐一下,破他的密文数据... 成品效果图: js部分: 对于找他的密文数据有点费时,针对密文--->搜他地址和启动器不是特别容易,辗转多时(搜:descrypt/json.parse 结合使用更快),有图…

通讯录实现

下方是头文件的代码 #define _CRT_SECURE_NO_WARNINGS #include <assert.h> #include<stdio.h> #include<string.h> #include<stdlib.h>#define NAME_MAX 20 #define SEX_MAX 6 #define TELE_MAX 12 #define ADDR_MAX 30 #define MAX 100 #define D…

swing快速入门(四)

注释很详细&#xff0c;直接上代码 上一篇 增加内容 流式布局范例 import java.awt.*;public class swing_test_2{public static void main(String[] args){//创建一个窗口对象Frame framenew Frame("test");//设置窗口大小frame.setSize(800,800);//这里演示的是…

Gateway全局异常处理及请求响应监控

前言 我们在上一篇文章基于压测进行Feign调优完成的服务间调用的性能调优&#xff0c;此时我们也关注到一个问题&#xff0c;如果我们统一从网关调用服务&#xff0c;但是网关因为某些原因报错或者没有找到服务怎么办呢&#xff1f; 如下所示&#xff0c;笔者通过网关调用acc…

中小企业管理者如何培育团队精神?

某石油工程有限公司总经理曾提问&#xff1a;“作为中小企业的管理者如何才能更好的激发团队精神呢&#xff1f;” 每个企业都向往和号召团队精神&#xff0c;但是往往事与愿违。在各种羡慕嫉妒恨的情绪影响下&#xff0c;难免会产生一些落差&#xff0c;影响到团队精神。 所…

超声波清洗机会损伤物品吗?一文明白超声波清洗机有哪些优点

正确使用超声波清洗机且买对超声波清洗机是不会对清洗物品造成伤害的&#xff01; 一、超声波清洗机工作原理是如何的&#xff1f; 超声波清洗机的工作原理是利用超声波产生的空化振动来清洁物体。当超声波在清洗液中传播时&#xff0c;它会产生微小的气泡和振动&#xff0c;这…

论jenkins的使用方法(初步)

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 &#x1f4d1;什么是持续集成&…

1-1、Java概述

语雀原文链接 文章目录 1、Java发展2、Java体系结构3、Java特点 1、Java发展 1990年&#xff0c;Sun公司(Stanford University Network,斯坦福大学网络公司)詹姆斯高斯林推出的一门语言最开始注册的名字oak语言(橡树)&#xff0c;重名了被迫改成Java2009年Sun公司被甲骨文Ora…

Docker 容器中使用 Docker - DinD 和 DooD

突然间研究这个来的缘由是正在从 Jenkins 往 Harness 的过度, 而完全用命令来构建 Docker 镜像变得不一样了。在 Jenkins 中 Agent 本身也是一个 Docker Daemon, 所以 Docker 命令执行无障碍&#xff0c;而 Harness 的所谓的 Agent 就是一个个的运行在 Kubernetes 中的 Docker …

error:gmapping

– Could not find the required component ‘gmapping’. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found. CMake Error at /opt/ros/kinetic/share/catkin/cmake…

logstash插件简单介绍

logstash插件 输入插件(input) Input&#xff1a;输入插件。 Input plugins | Logstash Reference [8.11] | Elastic 所有输入插件都支持的配置选项 SettingInput typeRequiredDefaultDescriptionadd_fieldhashNo{}添加一个字段到一个事件codeccodecNoplain用于输入数据的…

【SpringBoot教程】SpringBoot Thymeleaf 基于HTML5的现代模板引擎

作者简介&#xff1a;大家好&#xff0c;我是撸代码的羊驼&#xff0c;前阿里巴巴架构师&#xff0c;现某互联网公司CTO 联系v&#xff1a;sulny_ann&#xff08;17362204968&#xff09;&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗…

error:move_base_msgs

CMake Warning at /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package): Could not find a package configuration file provided by “move_base_msgs” with any of the following names: move_base_msgsConfig.cmake move_base_msgs-config.cmake …

鼠标光标不见了怎么办?速速get这4个方法!

“非常奇怪&#xff0c;我的鼠标光标用着用着就不见了&#xff0c;这是为什么呢&#xff1f;有什么方法可以解决这个问题吗&#xff1f;” 在电脑使用过程中&#xff0c;有时候会遇到鼠标光标突然消失的情况&#xff0c;这无疑会给我们日常操作带来很大的不便。那么&#xff0c…

Linux bin包生成

需求背景&#xff1a; 在实际项目时我们很少把源码用个tar给到客户&#xff0c;这样显得很不专业&#xff0c;且有的时候我们提供补丁&#xff0c;那么这个时候我们提供一个补丁的bin包可以直接安装运行就显得很高大上了。 物料准备 准备一台liunx&#xff0c;虚拟机亦可&am…

自定义插件vue-router简单实现hashRouter设计思路

步骤 1.挂载 vue.prototype.$router 2.声明两个组件 router-view this.$router.current>component > h(component) router-link h(a,{attrs:{href:#this.to}},this.$slots.default) 3.url的监听&#xff1a;window hashchange的改变 4.定义响应式current&#xff0…

使用Python提取PDF文件中指定页面的内容

在日常工作和学习中&#xff0c;我们经常需要从PDF文件中提取特定页面的内容。在本篇文章中&#xff0c;我们将介绍如何使用Python编程语言和两个强大的库——pymupdf和wxPython&#xff0c;来实现这个任务。 1. 准备工作 首先&#xff0c;确保你已经安装了以下两个Python库&…