STM32CubeMX之定时器PWM输出

发布者:Shuangfei最新更新时间:2024-03-25 来源: elecfans关键字:STM32CubeMX  定时器  PWM输出 手机看文章 扫描二维码
随时随地手机看文章

脉冲宽度调制模式(PWM)可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。

本示例实现 IO 输出模式–PWM 波形输出。 以 LED 驱动为例, 使用定时器高级功能(PWM 模式), 实现呼吸灯效果。


1.硬件接口

本硬件平台有3个LED灯分别为LED2、LED3、LED4LED2接PA1,LED2接PB8,LED4接PB9,硬件原理图如下:


在这里插入图片描述

根据STM32引脚定义手册或者STM32CUbeMX软件我们可得知定时器4的CH1和CH2对应外部引脚PB8和PB9。

在这里插入图片描述

2 软件设计

打开STM32CubeMX工具,配置定时器4,将PB8配置为定时器4通道3(复用推挽输出),PB9配置为定时器4通道4(复用推挽输出)。

poYBAGKUlTGAc1sYAAElSouWhz0140.png?imageView2/2/w/1000poYBAGKUltuAMEWcAABoD6KovpU624.png?imageView2/2/w/1000#pic_centerpoYBAGKUlWuAeKGkAAHYA-wq1gs266.png?imageView2/2/w/1000

3.参数说明

模式说明
Input capture direct mode输入捕获直接模式
Input capture indirectmode输入捕获间接模式
Input capture triggered by TRC输入捕获触发器模式
Output compare no output输出比较(冻结模式000 )
Output compare CH3输出比较(001)
PWM Generation No outputPWM产生无输出
PWM Generation CH3PWM输出到CH3
CH3 Combined channels联合通道
xor activation定时器输入异或模式

poYBAGKUltuAPC4pAABw31jFoKE208.png?imageView2/2/w/1000#pic_center

4. 代码生成

pYYBAGKUlfmAUAOiAAO_mg10V2w646.png?imageView2/2/w/1000

PWM模式配置:

在这里插入图片描述

PB8、PB9引脚配置和PWM模式使能


HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_3);//初始化通道3

HAL_TIM_PWM_Start(timHandle,TIM_CHANNEL_4);//初始化通道4

引脚模式配置及PWM初始化

pYYBAGKUljKAABDwAAPS43L0PPg238.png?imageView2/2/w/1000

4.呼吸灯主函数示例

while (1)

  {

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

/*实现呼吸灯*/

if(flag==0)i++;

else i--;

if(i>=300)flag=1;

if(i==0)flag=0;

HAL_Delay(3);

htim4.Instance->CCR3=i;//调节占空比

htim4.Instance->CCR4=i;

  }

5.HAL库定时器常用函数介绍

HAL库中定时器基本功能函数源码均在stm32f1xx_hal_tim.c中,高级功能函数在stm32f1xx_hal_tim_ex.c中,本小节主要介绍几个常用函数。(以下列举函数可能需要用户调用或修改)。


/*硬件层初始化:时钟、中断,DMA*/

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim);

/*中断方式开启定时器*/

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);

/*DMA方式开启定时器*/

HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pData, uint16_t Length);

/*开启定时器PWM模式*/

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel);

/*获取状态*/

HAL_TIM_StateTypeDef HAL_TIM_Base_GetState(TIM_HandleTypeDef *htim);

/*中断方式开启定时器输入捕获功能*/

HAL_StatusTypeDef HAL_TIM_IC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)


6.软件仿真效果展示

  通过KEIL软件仿真,查看引脚电平变化,KEIL软件相关设置:
CPU DLL:SARMCM3.DLL
Dialog DLL:DARMSTM.DLL Parameter:-pSTM32F103C8

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASVRf6Zi_5rC0,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

进入仿真模式:

在这里插入图片描述

查看引脚电平变化波形:

在这里插入图片描述pYYBAGKUlpuAZh-iAAOSwTacxpY098.png?imageView2/2/w/1000

波形效果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASVRf6Zi_5rC0,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center




关键字:STM32CubeMX  定时器  PWM输出 引用地址:STM32CubeMX之定时器PWM输出

上一篇:图文详解STM32单片机远程升级
下一篇:基于STM32+华为云IOT设计的智慧路灯

推荐阅读最新更新时间:2026-03-21 16:04

STM32通用定时器输出比较(OC)与PWM模式详解
STM32通用定时器的输出比较(OC)和PWM模式 通用定时器OC & PWM模式详解 1️⃣什么是“输出比较”模式(OC模式)????️ 想象你有个计时器小朋友,它不停地数数,1、2、3、4、5…… 现在你告诉它:“当数到10的时候,给我敲一下桌子!”???? 计时器就会监视自己数的数,一旦到10,就立马敲桌子!这就是“输出比较”模式。 计数器 CNT:一直计数的数字 比较寄存器 CCR:目标数字,敲桌子的时间点 只要 CNT == CCR,就触发“敲桌子”事件,比如切换IO电平,或者发中断。 2️⃣ OC模式有什么作用????? 你可以用它做定时开关,比如定时开灯、关灯 还能产生特定波形,比如方波(高
[单片机]
STM32定时器PWM 1路输出 TIM3
以STM32F030F4P6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。 以下是main.c文件: #include stm32f0xx.h void LED_Init(void) //PWM输出引脚B1函数 { GPIO_InitTypeDef GPIO_InitStructure; //声明GPIO_InitStructure结构变量 // 原版创作,引用请指明出处 https://www.cnblogs.com/beiyhs/p/11406535.html 北有寒山 /*
[单片机]
STM32<font color='red'>定时器</font>之<font color='red'>PWM</font> 1路<font color='red'>输出</font> TIM3
基于stm32单片机利用通用定时器输出PWM
通用定时器(以下以通用定时器3,通道3 为例): 第一步:开启时钟使能 RCC-》APB1ENR:1 位 //开启定时器3 时钟使能 第二步:设置定时器分频与装载计数值(以一周期 1ms) TIM3-》PSC = 7199; //系统时钟为 72M 经 (7199+1) 分频后,定时器时钟为 10k(一周期为0.1ms) TIM3-》ARR = 9; //计数周期为 0.1ms * (9+1) = 1ms 第三步:使能定时器 TIM3-》CR1:0 位 //开启计数器,开始计时 第四步:溢出中断使能 TIM3-》DIER:0 位 //开启溢出中断 第五步: void TIM3_IRQHandler(void); 利用通用定时器
[单片机]
stm32 定时器输出比较(OC)与PWM的理解和应用
1. 定时器TIM简介 TIM 是 stm32 微控制器中的定时器模块。stm32 包含多个定时器模块,每个定时器模块有不同的功能和配置,适用于各种应用场景。 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从模式等多种功能 定时器分类: image.png 基本定时器结构(时基单元): image.png 2. TIM 定时器相关概念 计数模式 向上计数模式(Up-counter mode) 向下计数模式(Down-counter mode) 中心对齐模式(Center-aligned mod
[单片机]
STM32 定时器输出 PWM
我们通过TIM3 输出PWM 去驱动 SG90电机 配置如下 1.GPIO结构体 2.配置通用定时器结构体 3.配置定时去输出PWM结构体 4.打开时钟 — GPIO时钟,TIM定时器时钟,部分重映射时钟 5.配置PWM比较值 一 我们使用定时器3 通道2 重映射之后为PB5 GPIO_InitTypeDef GPIO_motorstruct; GPIO_motorstruct.GPIO_Mode =GPIO_Mode_AF_PP; GPIO_motorstruct.GPIO_Pin = GPIO_Pin_5; GPIO_motorstruct.GPIO_Speed =GPIO_Speed_50M
[单片机]
STM32基础7--通用定时器PWM输出
通用定时器框图 在通用定时器中,内部结构与基本定时器是不一样的。下面是通用定时器TIM10/TIM11 和 TIM13/TIM14的内部结构,可以看到它支持一个通(TIMx_CH1)道,其他的通用定时器内部结构不一样在于它们支持的通道数。 从图中可以看到,通用定时除了基本的定时(基本定时的作用)功能以外,还支持信号的输入,信号的输出,也多了一个捕捉比较寄存器。 PWM(Pulse Width Modulation—脉冲宽度调制技术) 在一个周期波形中,高电平占整个周期的比例称之为占空比,而高电平宽度通常被称为脉冲宽度。当我们在控制占空比,从而控制电路导通或者关闭时间,从而控制导通的有效电压。由于这个特性,我们在需要控制LE
[单片机]
STM32基础7--通用<font color='red'>定时器</font>(<font color='red'>PWM</font><font color='red'>输出</font>)
通用定时器PWM输出实验
本节定时器PWM输出主要涉及到定时器框图右下方部分,即输出比较部分 和上一讲相同,时基时钟来源于内部默认时钟 对此有疑问请参考 : 定时器中断实验 中 定时器时钟选择部分 和 定时器时钟来源部分 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 PWM工作过程 每个定时器有四个通道,每一个通道都有一个捕获比较寄存器, 将寄存器值和计数器值比较,通过比较结果输出高低电平,实现PWM信号 先简单说明一下: 如图为向上计数:
[单片机]
通用<font color='red'>定时器</font><font color='red'>PWM</font><font color='red'>输出</font>实验
定时器输出PWM频率范围及占空比精度
我想要TIM定时器输出的PWM波形:0.1%精度占空比, 频率范围:200Hz - 10KHz。请问能实现吗? Ⅰ 写在前面 如果有朋友下载了上一篇文章我提供的例程,在“bsp_timer.h”文件下,你就会发现有如下一段被我注释了的【说明性文字】。 这个工程是我从之前项目中提取出来(复制部分代码),从新整理的一个的工程。里面的这个被注释了的描述文字是之前整理的,今天重新对其说明一下。 这里句题外话: 我一般都是注重让大家明白其原理,提供的工程代码以简单为原则。比如:没有添加系统,没有添加参数越界检查等额外的代码。不是让你直接拷贝过去就用,一般需要结合你实际工程,对其修改。 Ⅱ 解读那段文字
[单片机]
<font color='red'>定时器</font><font color='red'>输出</font>的<font color='red'>PWM</font>频率范围及占空比精度
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved