STM32 CubeMX学习:4. PWM控制LED亮度

STM32CubeMX实战教程(五)——通用定时器(PWM输出) 前言 在上一章《STM32CubeMX实战教程(四)——基本定时器(还是点灯)》中,已经介绍过基本定时器的功能及用法,在这一章中,我讲主要介绍一下通用定时器的相关功能以及配置方法,废话不多,直接进入主题。 通用定时器 在STM32F4中,TIM2到TIM5为通用定时器,主要特性如下: 16 位(TIM3 和 TIM4)或 32 位(TIM2 和 TIM5)递增、递减和递增/递减自动重载计数器 1... 阅读详情
AI摘要

本文围绕STM32 CubeMX中PWM控制LED亮度展开。先介绍PWM基本知识和工作原理,包括其是利用数字输出来控制模拟电路的技术,通过设置比较寄存器和定时器重载寄存器控制占空比。接着讲解PWM在CubeMX的配置及相关代码,如HAL_TIM_PWM_Start函数的使用。

STM32 CubeMX学习:4. PWM控制LED亮度

系列文章目录
  1. 前期的准备
  2. 点亮 LED
  3. 闪烁 LED
  4. 定时器闪烁LED
  5. PWM控制LED亮度
  6. 常见的PWM设备
  7. 按键的外部中断
  8. ADC模数转换
  9. 串口收发
  10. 串口打印遥控器数据
  11. 未完待续…


1 基础知识

1.1 PWM基本知识

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
PWM等效
例如上图中,矩形脉冲是stm32输出的数字信号,当这个信号接到外设上时,效果可以等效为这个正弦波。

一个周期内高电平的持续时间占总周期的比例成为占空比,通过修改占空比,可以改变输出的等效模拟电压。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。此外PWM输出的频率也会影响最终的PWM输出效果,PWM输出的频率越高,最终输出的“连续性”越好,越接近模拟信号的效果,频率低则会增强离散性,最终的输出效果会有比较强的“突变”感。

脉冲调制有两个重要的参数,第一个就是输出频率,频率越高,则模拟的效果越好。第二个就是占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。

1.2 PWM工作原理

为了实现PWM功能,需要使用定时器中的比较寄存器(TIMx_CCRx)。
当定时器以PWM模式工作时,会自动将TIMx_CCRx的值与TIMx_CNT(计数寄存器)中的值做比较,当TIMx_CNT中的值小于TIMx_CCRx的值时,PWM输出引脚输出高电平,大于时则输出低电平。

因此知道了PWM信号的周期和占空比可以通过设置比较寄存器TIMx_CCRx和定时器重载寄存器TIMx_ARR来控制。PWM的占空比可以通过下图公式计算:
占空比
以下图为例,该定时器的重载值为8,比较寄存器值为4,输出信号为OCXREF,则其占空比为44.4%。
占空比原理
一个定时器工作在PWM输出模式下时,有4个通道可以进行PWM信号的输出,每一个定时器都有对应标号的比较寄存器,比如5号定时器的1号通道对应的比较寄存器为TIM5_CCR1。
修改比较寄存器TIMx_CCRx的值来控制PWM输出的占空比。在函数aRGB_led_show中,首先通过与运算与移位运算提取出对应的alpha,R,G和B通道值,然后用透明度alpha与R,G,B三者依次相乘,最后将其赋值通过__HAL_TIM_SetCompare函数给对应的比较寄存器TIM5->CCRx。

如图所示
原理
其中,ARR为自动重装载值,相当于一个最大可达到的值,CCRx 是用来控制占空比的,对应这幅原理图,超过CCRx的时间段为高电平。计数的频率也可以在图中通过t2、t4 - t2、等计算得到。其中单片机定时器的计数模式有以下三种情况,如图所示。
计数模式
我们可以根据自己的需要灵活选择计数模式。

2. 程序的学习

2.1 PWM在CubeMX的配置

1、在CubeMX中设置定时器14的通道1为PWM输出。可以注意到这个通道对应的引脚正是之前的实验中使用的LED引脚。
定时器14
这里这个定时器14为特殊情况,下面我们以定时器5为例给大家讲解一下正常情况。
定时器5
一般情况下,我们选择内部时钟为pwm时钟,然后根据自己的需要打开pwm输出、输入等模式。

2、现在我们对定时器14进行相关的配置,如图所示
参数设置

2.2 代码讲解

1、HAL_TIM_PWM_Start函数介绍

为了使定时器开始PWM输出,除了要通过HAL_TIM_Base_Start使定时器开始工作,还需要在初始化时调用HAL库提供的PWM初始化函数HAL_TIM_PWM_Start。

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

这个函数的返回值为HAL_StatusTypeDef,HAL库定义的几种状态,如果成功使定时器开始工作,则返回HAL_OK;
该函数的作用在于使对应定时器的对应通道开始PWM输出;
该函数有两个参数,
(1)*htim 定时器的句柄指针,如定时器1就输入&htim1,定时器2就输入&htim2
(2)Channel 定时器PWM输出的通道,比如通道1为TIM_CHANNEL1

代码我已经放到了我的GitHub仓库,如有需要可以下载使用:
CubeMX学习


总结

这篇博客学习的PWM输出功能可以用于舵机和电机控制,是非常常用的控制信号,需要熟练掌握其原理。 下一次我们要了解其他几个需要pwm的外设,大家可要好好复习消化一下哟。 今天实际的操作比较简单,但是原理大家还是要仔细研究一下啦。
STM32CubeMX之定时器PWM输出 ;PWM是一种对模拟信号电平进行​​ ​​数字编码​​​​​的方法。通过高​​ ​​分辨率​​​​计数器的使用,方波的占空比被调制用来对一个具体​​ ​​模拟信号​​​​的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。 阅读详情

相关推荐

STM32CubeMX—PWM波输出实验

定时器PWM波实验 实验说明 芯片:STM32F103RCT6 实验内容:使用定时器2的通道1输出PWM波控制LED灯的亮度。 实验操作 1、基础配置 1)sys中,选好调试方式,例如jtag-4pin。 2)RCC时钟,晶振选择。 3)时钟树配置。 4)中断分组配置。 以上步骤可以参考之前的实验。 2、外设配置—...

FlyDremever 4万+

STM32使用PWM控制LED灯的亮灭程度

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。

1万+

STM32CUBEMX创建工程使用PWM控制LED呼吸灯——学习笔记

想学一下定时器,然后在查阅资料的时候,发现定时器的功能很强大,所以通过学习一个实例来验证一下,本次是通过定时器的PWM功能实现呼吸灯。 实验的硬件平台是STM32F103ZET6,软件是MDK5,STM32CUBEMX. 在学习cubemx之后发现这个软件是真的强大。 首先勾选引脚,在RCC的HSE选择Crystal/Ceramic Resonator ...

build_oooxf的博客 6393

STM32使用PWM实现led亮度变化

stm32使用PWM波实现led亮度变化。

嵌入式 2万+

学习STM32的PWM波控制LED亮度

STM32是一款广泛应用于嵌入式系统开发的32位单片机。它具有强大的性能和丰富的外设,其中包括用于控制LED亮度的PWM(脉宽调制)功能。在本文中,我们将学习如何使用STM32的PWM模块来控制LED的亮度。具体而言,我们将使用STM32CubeMX和Keil MDK来配置和编写代码,并使用STM32F4 Discovery开发板上的LED进行示范。

xiaoalla的博客 1283

STM32CUBEMX生成按键控制PWM_LED灯

STM32CUBEMX配置 1. PWM设置:本次实验中采用按键控制PWM占空比来修改LED灯的亮度。 采用的定时器:Timer3,对应通道2选择PWM模式, 由于DS0外部连接的LED上接高电平,因而从0—1000对应的占空比值选择低极性模式。 其次是串口配置,使用usart1来给电脑发送串口信息, 本次实验中遇到的几个问题: 问题一: 设置外部中断时,因为存在系统时钟的中断优先级为0,与原先设置的外部中断优先级为0相冲突,因而我们在设置中断优先级的时候,要把外部中断的优先级设置低一级,这样就能在外部中

q1414502821的博客 4065

【STM32】HAL库 STM32CubeMX教程七---PWM输出(呼吸灯)

前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片:STM32F407ZET6/STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 ...

Z小旋 24万+

STM32入门教程:PWM控制LED亮度

然后点击"Configuration"标签,在"Mode"下拉菜单中选择"Alternate Function",在"Alternate Function"下拉菜单中选择"TIM2_CH1"。配置PWM 在"Timers"菜单中,选择"TIM2"定时器,并将"Channel1"的 "Output Compare"模式设置为"PWM Mode 1"。创建新工程 首先,打开STM32CubeIDE,点击"New STM32 Project",然后选择合适的芯片型号,如STM32F407VG,点击"Next"。

xiaoalla的博客 2056

基于STM32的PWM实现LED调光效果详解

本项目将使用STM32单片机的PWM功能控制一个LED的亮度。具体来说,我们将通过调整PWM信号的占空比来改变LED的亮度,从而实现LED的渐亮渐暗效果。

嵌入式极客小张 5841

【STM32基础 CubeMX】PWM输出

STM32微控制器是一系列功能强大的微控制器,广泛应用于嵌入式系统和电子设备中。其中一个常见的应用是生成PWM信号,用于控制各种设备,如电机、LED灯、声音发生器等。了解如何配置和使用PWM输出对于嵌入式系统开发非常重要。CubeMX是STMicroelectronics提供的一种工具,用于帮助开发人员轻松配置STM32微控制器并生成初始化代码。通过CubeMX,您可以在不深入复杂的寄存器级编程的情况下,设置PWM输出的参数,节省了大量的时间和精力。

m0_62599305的博客 1万+

STM实战开发(3):STM32 PWM控制LED亮度的实现与优化

通过本篇博客的学习,您已经掌握了如何在STM32平台上使用PWM控制LED的亮度,了解了PWM的基本原理、STM32的定时器配置方法以及代码实现过程。本文将详细介绍如何使用STM32实现PWM控制LED亮度调节,涵盖了开发环境的配置、硬件连接、GPIO和定时器配置、PWM波形的生成与调节、代码实现以及调试与优化等方面的内容,并结合实际的工程技术,给出详细的代码示例与解说,帮助大家更深入地理解这一技术。通过配置定时器的计数模式和PWM输出模式,可以生成稳定的PWM信号,并通过调整占空比来调节LED的亮度。

2201_76125393的博客 1645

在STM32CubeMX中配置 PWM

1.将debug 改为2.在中选择内部(有需要也可以选外部晶振)3.开始配置引脚4.配置时钟树(省略)这里我设置72HZ5.最后的收尾设置(前面一期有讲)

2403_87830841的博客 7609

使用基于python的neurora进行表征相似性分析(RSA)

发现了一款用于表征分析的Python API,还是挺方便的,这里简单介绍一下进行表征相似性分析的使用方法。

zjh12312311的博客 2764

STM32CubeMX_定时器中断_PWM

文章目录前言STM32CubeMX新建工程基本定时器配置生成代码定时器中断PWM配置工程代码 前言 STM32CubeMX_环境搭建_GPIO_外部中断 上节整理的是GPIO和外部中断, 这一节整理下定时器中断和PWM的使用. 仍用NUCLEO-F767ZI的板子, 使用定时器3的中断实现LED2(Blue, PB7)的翻转, 然后刚好LED2的PB7又是TIM4_CH2, 可以用PWM来控制LE...

weifengdq的专栏 5714

基于FPGA 外置qspi Flash的读写

fpga上实现flash读写代码

weixin_43498765的博客 4954

信创改造实战:SpringBoot项目迁移到宝兰德BES 9.5.5的完整避坑指南(附依赖与web.xml配置)

本文详细介绍了将SpringBoot项目迁移到宝兰德BES 9.5.5的完整流程,包括依赖改造、web.xml配置降级等关键步骤。通过实战案例和避坑指南,帮助开发者高效完成国产中间件适配,确保项目平稳运行。特别针对Tomcat依赖排除和BES适配器选择提供了专业建议。

weixin_30689307的博客 737

【STM32CubeMX学习指南---LED】

STM32CUBEMX之LED驱动

智闲电子设计的博客 1901

U8 API接口开发踩过的坑

U8 API接口开发踩过的坑

haiyang5233233的专栏 1655

PWM 控制 LED 的亮度

一个周期内高电平的持续时间占总周期的比例成为占空比,通过修改占空比,可以改变输出的等效模拟电压。此外 PWM 输出的频率也会影响最终的 PWM输出效果,PWM 输出的频率越高,最终输出的“连续性”越好,越接近模拟信号的效果,频率低则会增强离散性,最终的输出效果会有比较强的“突变”感。当定时器以 PWM 模式工作时,会自动将 TIMx_CCRx 的值与 TIMx_CNT(计数寄存器)中的值做比较,当 TIMx_CNT 中的值小于 TIMx_CCRx 的值时,PWM 输出引脚输出高电平,大于时则输出低电平。

2302_80244254的博客 4055

9.1 机器人动力学建模

目录9.1 机器人动力学建模一、机器人动力学的基本概念1. 什么是机器人动力学?2. 动力学方程二、机器人动力学建模方法1. 拉格朗日方法2. 牛顿-欧拉方法三、Simulink 中的机器人动力学建模1. 使用 Simscape Multibody 建模示例:构建一个两连杆机械臂的动力学模型。步骤:2. 使用 Robotics System Toolbox 建模示例:构建一个六自由度工业机器人的动力学模型。步骤:四、示例:两连杆机械臂的动力学建模目标:步骤:五、结果分析1. 动态响应2. 参数敏感性六、总结

xiaoheshang_123的博客 626

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

STM32 cubeMX 呼吸灯实验

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

wuyiyu_的博客 3409

6、基于深度强化学习的无人机路径规划

本文研究了基于深度强化学习的无人机路径规划方法,提出了一种融合改进DQN算法与人工势场法的路径规划策略。通过设计合理的网络结构、状态空间、动作空间和奖励函数,结合ε-贪心策略进行动作选择,实现了无人机在复杂环境中的自主避障与目标导向飞行。仿真实验表明,该方法具有收敛速度快、实时性强和可操作性高等优点,能有效完成室内环境下的路径规划任务。文章还总结了算法优势,并对未来在连续动作、复杂环境适应及多无人机协同等方面的发展方向进行了展望。

web39explorer的博客 166

STM32cubemx学习记录————TIM输出PWM(基于STM32F407ZG)

STM32定时器输出一路PWM(控制LED灯的亮度) STM32的定时器具有强大的功能,今天的输出PWM功能是属于其中的输出比较功能。 stm32输出PWM原理:(以下为个人理解,如果错误的地方 请多多指教OoO) CNT是计数值 ARR是重装载值 CCRx是比较值 定时器输出PWM有两种模式: PWM 模式1 计数值大于比较值 输出有效电平 否则输出无效电平 PWM 模式2 计数值大于比较...

Aa_lihua的博客 8122

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

STM32Cubemx——定时器之PWM

文章目录前言一、使用工具二、前置知识1.LED2.PWM二、STM32Cubemx配置1.新建工程2.选择时钟源,配置时钟树3.选择调试接口及时基4.配置PWM5.生成工程三、Keil代码1.开启PWM2.改变PWM占空比3.观察效果四、工程下载地址 前言 PWM在日常生活中应用十分广泛,台灯的分级亮度,电机驱动等都需要用到PWM,本教程将使用PWM实现呼吸灯。 一、使用工具 STM32F407VE核心板 STM32Cubemx 版本 6.0.1 Keil 版本 5.31 ST-Link 二、前置知识

qq_45822269的博客 3726

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

上一篇: STM32 CubeMX学习:3. 定时器闪烁LED
下一篇: STM32 CubeMX学习:5. 其他PWM设备
北冥航
博客等级 码龄7年 232粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值