HAL库STM32常用外设教程(一)—— 定时器 输出PWM

这篇具有很好参考价值的文章主要介绍了HAL库STM32常用外设教程(一)—— 定时器 输出PWM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

本篇文章为个人参考总结所用,如果错误还望指出。
涉及的知识:
1、STM32CubeMx的部分使用
2、PWM原理及常用概念
3、用单片机生成一定频率的PWM

用到的软件及单片机:
1、STM32CubeMx
2、IDE: MDK-Keil软件
3、芯片:STM32F407ZGT6
4、开发板:正点原子探索者
注:不同型号的单片机实现的原理基本相似,F1实现过程同理


一、PWM是什么?

  脉冲宽度调试(PWM),英文“Pulse Width Modulation”,是利用微处理器的数字输出 来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量、通信、工控等方面。
PWM的几个重要的参数:
1、PWM的频率
  PWM的频率是指PWM信号中高电平和低电平交替出现的时间周期,也称为PWM周期。它通常以赫兹(Hz)为单位表示,即每秒钟发生多少次PWM周期。例如,一个PWM频率为100Hz的信号的周期为10毫秒,即每10毫秒高电平和低电平各出现一次。
*2、PWM的周期

                    T = 1 / f

  其中T是周期 ,f 是频率。
  例如:如果频率为100Hz,那么其对应的周期就应该是10毫秒。(1 / 100 = 0.01 s = 10 ms),也就是一秒钟有100次PWM周期。
3、占空比
  PWM占空比是指PWM信号高电平状态所占的时间与一个周期内总时间之比,通常用百分比表示。例如,占空比为50%的PWM信号意味着高电平状态和低电平状态各占总周期的一半时间。

  在实际应用中,PWM信号的占空比可以控制输出电压或电流的大小。具体而言,如果将PWM信号输入到一个负载上(例如LED灯或电机),则其平均输出电压或电流将与占空比成正比关系。例如,占空比为80%的PWM信号将为接收器提供更高的平均电压或电流(此时PWM输出电压 = 提供电压 *80%),而占空比为20%的PWM信号将提供更低的平均值。

  在实际应用中,使用PWM占空比来调整输出的大小和强度非常常见。例如,对于LED灯来说,通过改变PWM占空比可以实现明亮度的调节;对于电机来说,通过改变PWM占空比可以实现转速的变化。

  注意: PWM的占空比通常是指正占空比,也就是PWM信号中高电平状态所占时间与一个周期内总时间之比。负占空比则表示低电平状态所占时间与一个周期内总时间之比。
以正占空比为例:
stm32 hal pwm,STM32,stm32,单片机,学习

二、实例

PWM输出

1、CubeMx配置
(1)RCC设置
  设置高速外部时钟HSE,选择外部时钟源,配置完后右边窗口的相应引脚会变成绿色,表明配置完成。
stm32 hal pwm,STM32,stm32,单片机,学习

(2)时钟树配置
  按下图配置好后 回车键进行保存
stm32 hal pwm,STM32,stm32,单片机,学习

(3)SYS配置
  配置成 SWD协议下载和调试
stm32 hal pwm,STM32,stm32,单片机,学习

(4)定时器参数配置
  本次使用的是TIM3的串口1输出PWM,占空比设置成为50%,输出的PWM频率为10KHZ,配置步骤如下(没有提到的部分选择默认即可),配置好后在右边窗口便可观察到对应引脚(PA6)显示绿色,即单片机会通过PA6引脚将配置好的PWM输出。
stm32 hal pwm,STM32,stm32,单片机,学习PWM输出频率计算公式:
stm32 hal pwm,STM32,stm32,单片机,学习

  • Tout是PWM的输出频率
  • Ft是定时器的时钟源频率(可以从时钟树上获得,本次测试为84MHZ)
  • ARR是自动重装载寄存器的值,本次设置的数值是84-1
  • PSC是预分频器寄存器的值,本次设置的数值是100-1

本次PWM的输出频率计算结果如下,得出PWM输出频率为10 000Hz,即10KHz:
stm32 hal pwm,STM32,stm32,单片机,学习
  关于该处计算方法讲解可以听一下正点原子该章的讲解,链接放在下面
正点原子 定时器溢出时间计算方法

(4)①先配置工程名、存放存放路径和开发环境。
注意:
Ⅰ、工程名和工程存放路径最好不要带有中文。
Ⅱ、其中"Toolchain/IDE"(编译器和集成开发环境),该选项用于设置在生成代码后使用的编译器和开发环境,以便将代码编译成可执行文件并下载到目标设备上,需要配置成适合自己Keil的版本,本次配置用到的是keil5软件,故配置如下:
stm32 hal pwm,STM32,stm32,单片机,学习

②配置"Code Generator"(“代码发生器。该选项用于通过向用户提供配置界面,自动生成与STM32系列微控制器相关的初始化代码和驱动程序。具体配置如下stm32 hal pwm,STM32,stm32,单片机,学习

(5)点击"ENERATE CODE"生成工程,并打开工程。
注意:“打开工程”的前提是你需要安装好MDKARM(本次默认keil5已经安装好)。
stm32 hal pwm,STM32,stm32,单片机,学习

2、代码

(1)代码说明
①生成的代码与CubeMx设置的配置对应
stm32 hal pwm,STM32,stm32,单片机,学习

(2)添加代码
在main.c里面添加一行代码即可输出PWM。
代码如下:

 /* USER CODE BEGIN 2 */
  
  HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);  /* 开启定时器3通道1的PWM输出 */
  
  /* USER CODE END 2 */

3、现象

  通过示波器观察PA6引脚的PWM波形
占空比为50%
频率为10KHz
周期为100us (微秒)
stm32 hal pwm,STM32,stm32,单片机,学习

3、总结

(1)出现的问题
  CubeMxz生成的代码时钟频率是25MHZ,在此频率下观察到的方波如下:
stm32 hal pwm,STM32,stm32,单片机,学习  此时虽然可以生成PWM,但是生成的PWM频率和周期不正确。
改正措施:
①将下图中的25改为8
stm32 hal pwm,STM32,stm32,单片机,学习②搜索整个工程的“25000000”,将搜索到的修改为“8000000 ”。
按照上面的步骤修改后就能输出正常的波形。文章来源地址https://www.toymoban.com/news/detail-784207.html

到了这里,关于HAL库STM32常用外设教程(一)—— 定时器 输出PWM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 HAL库 通用定时器介绍及相关应用例程 定时器中断 输出PWM (点亮LED呼吸灯、输出PWM、输入捕获) CubeMX

    (部分图引自于ATK) 前情提要(基本定时器) 点此进入 通用定时器类别 通用定时器和基本定时器相比大致的工作方式是相似的,不过通用定时器比基本定时器多了一些很好用的功能,比如: 外部输入捕获 输出比较 输出PWM 时钟源 CubeMX为我们提供了配置时钟的非常方便的工

    2024年04月15日
    浏览(49)
  • STM32CubeMX教程8 TIM 通用定时器 - 输出比较

    开发板(STM32F407G-DISC1) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 逻辑分析仪nanoDLA 使用STM32CubeMX软件配置STM32F407 通用定时器的输出比较通道 ,并将其输出到四个LED灯引脚实现LED灯流水灯效果 STM32F407的定时器通道均可以实现输出比较功能, 输出比较功

    2024年02月03日
    浏览(33)
  • STM32外设之TIM定时器使用及输出比较模式PWM生成,PWM频率和占空比计算,文末有固件库TIM驱动文件的函数讲解

    过来人的经验分享: TIM定时器在我们学习STM32的过程中是一个重要且稍微有点难度的外设了,就拿从学校里做的项目来说用到的也是一些基本的外设配置和传感器等等。TIM作为外设中稍微有点难度的外设相当关键,学好TIM,对以后学习单片机开发也有很大帮助。 定时器是stm3

    2024年02月07日
    浏览(20)
  • stm32之16.外设定时器——TIM3

       ----------- 源码 其他外设定时器使用方法 打开对应时钟供电  

    2024年02月10日
    浏览(24)
  • 基于STM32的定时器--定时中断(HAL库)

    本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时

    2024年02月14日
    浏览(24)
  • STM32 HAL库-定时器中断

    关闭或开启所有中断;代码如下: STM32F407 有众多的定时器,其中包括 2 个基本定时器(TIM6 和 TIM7)、10 个通用定时 器(TIM2 ~ TIM5、TIM9 ~TIM14)、2 个高级控制定时器(TIM1 和 TIM8),这些定时器彼此完 全独立,不共享任何资源。 选择定时器,配置时钟源,设置预分频系数,计

    2024年01月25日
    浏览(35)
  • stm32——hal库学习笔记(定时器)

    使用纯软件(CPU死等)的方式实现定时(延时)功能 使用精准的时基,通过硬件的方式,实现定时功能 递增计数模式实例说明 中心对齐模式实例说明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER) TIM6 和TIM7 状态寄存器(TIMx_SR) TIM6 和TIM7 计数器(TIMx_CNT)

    2024年02月21日
    浏览(29)
  • 定时器详解 -- 定时器中断、PWM输出 --stm32

    STM32F103系列芯片拥有多种定时器,包括基本定时器、通用定时器和高级定时器,每种定时器都具有一些特定的功能。 向上计数:计数器从0计数到自动重装载值(ARR),然后重新从0开始计数并且产生一个计数器溢出事件。 向下计数:计数器从自动重装载值(ARR)开始向下计数

    2024年02月11日
    浏览(27)
  • STM32 HAL库 STM32CubeMX -- TIM(定时器中断)

    STM32F1 系列中,除了一些特殊的型号,大部分F1有8 个定时器,分为 基本定时器,通用定时器和高级定时器 。 基本定时器TIM6 和TIM7 是一个16 位的只能向上计数的定时器,只能定时,没有外部IO。 通用定时器TIM2/3/4/5 是一个16 位的可以向上/下计数的定时器,可以定时,可以输出

    2024年02月16日
    浏览(38)
  • STM32 HAL库开发——入门篇(2):定时器

    一、TIMER定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 STM32定时器分类 1.4 STM32定时器特性表 1.5 STM32基本、通用、高级定时器功能整体的区别 二、基本定时器 2.1 基本定时器简介 2.3 STM32定时器计数模式及溢出条件 2.4 定时器中断实验相关寄存器 2.5 定时器溢出时间计算方

    2024年02月10日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包