0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F4_TIM输出PWM波形

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-07 11:13 次阅读

Ⅰ、概述

上一篇文章关于STM32基本的计数原理明白之后,该文章是在其基础上进行拓展,讲述关于STM32比较输出的功能,以输出PWM波形为实例来讲述。

提供实例工程中比较实用的函数:只需要调用该函数,参数为频率和占空比

void TIM2_CH2_PWM(uint32_tFreq, uint16_tDutycycle);

先看一下实例中1KHz、20%占空比波形图 TIM2_CH2_PWM(1000, 20);


关于本文的更多详情请往下看。

Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号:关注微信,回复“修改型号”)。

STM32F4_TIM输出PWM波形(可调频率、占空比)实例:

https://yunpan.cn/cBYTWTgSmhbfe 访问密码 0025

STM32F4资料

https://yunpan.cn/cR2pxqF5x2d9c 访问密码 53e7

Ⅲ、原理描述


上一篇文章讲述的就是上图中“计数”红色部分,也就是开始到结束的时间,该文章是讲述在这个计数的中间加一个值(比较值),当计数到这个比较值的时候就对输出的引脚进行反向,直到计满(一个周期)。循环下去。

通用TIM框图:


上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。

我上面说的“比较值”就是TIM框图中比较部分的“Capture/Comparex register”比较寄存器,这个值就会决定输出引脚的电平。

Ⅳ、源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为建立的工程,主要以库的方式来讲述。

1.RCC时钟


该函数位于bsp.c文件下面;

重点注意:

A.外设RCC时钟的配置要在其外设初始化的前面;

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);这样能编译通过,但这是错误的代码】

2.TIM比较输出配置


该函数位于timer.c文件下面;

TIM2时基单元配置是上一篇文章相关的内容,是及时的配置,在该文中也就是对一个周期的配置。

TIM2通道2:PWM1模式配置是对占空比的配置。

tim2_period =TIM2_COUNTER_CLOCK/Freq - 1;

tim2_pulse = (tim2_period + 1)*Dutycycle / 100;

函数开始是对周期和占空比的一个换算公式,也比较简单。

决定输出频率和占空比主要由这三个参数(TIM2_PRESCALER_VALUE、tim2_period、tim2_pulse)决定的。

以今天工程输出1KHz,20%来举例说明:

TIM2_PRESCALER_VALUE = 168M/2 / 42M - 1 = 1 (也就是2分频)

tim2_period = 42000 - 1

tim2_pulse = 8400

频率1KHz = 42M/ 4200

占空比20% = 8400/42000

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5140

    浏览量

    213360
  • RCC
    RCC
    +关注

    关注

    0

    文章

    93

    浏览量

    26889
  • Tim
    Tim
    +关注

    关注

    0

    文章

    81

    浏览量

    17873
  • STM32F4
    +关注

    关注

    3

    文章

    194

    浏览量

    27987
收藏 人收藏

    评论

    相关推荐

    STM32F030K6 4PWM只有1路正常,其它3路没PWM波形为什么?

    TIM16->CR1|=0x01; //使能定时器16 } PCLK=HCLK=48MHZ. 查了很久,上面4PWM设置内容几乎一样的,为何只有1路能功作,而其他3路则一直是低电平,没
    发表于 05-17 06:40

    STM8S003F3 PWM输出的原因?怎么解决?

    (2000)重复计数器值(0) //PC1 输出PWM波形 TIM1_OC1Init(TIM1_OCMODE_PWM2,
    发表于 04-19 06:00

    STM32F407 PWM输出时一次中断未执行完下一次中断就进入,导致PWM波形输出紊乱怎么解决?

    [td]我在做毕设,使用的是STM32F407PWM输出功能,已有内含117个元素的数组前4个元素分别为1,2,1,3,后113个元素为0和1。 预期效果:根据117个数组元素,生成频率为1MHz
    发表于 04-18 07:45

    stm32f103 TIM2 PWM为什么没有输出

    以前用TIM8输出2路PWM正常,现在改为TIM2却没有输出,对照datasheet寄存器详细查了遍,没看出问题。先贴出了主要代码,哪位能看
    发表于 04-11 07:07

    STM32F429的TIM4定时器输出四路PWM,为什么第四路PB9一直输出低电平?

    芯片型号:STM32F429ZGT6 用TIM4输出4PWM,用的是PB6PB7PB8PB9程序是一样的配置,前三路都有
    发表于 04-03 07:43

    STM32F103VET6使用定时器DMA做比较输出PWM输出波形第一次不正确是怎么回事?

    我使用STM32F103VET6单片机做主控,现在想要做两路PWM信号输出,两路的PWM需要有一定的相位差,并要求输出的占空比可调,所以我想
    发表于 03-28 07:27

    求助,关于STM32F103 PWM ONE PULSE的功能问题求解

    硬件:STM32F103C8T6,TIM4_CH4 PWM输出,阻塞方式工作! 配置PWM ONE PULSE 功能,脉宽设定为5 mS,
    发表于 03-21 07:47

    STM32f4定时器TIM1输出PWM占空比快速变化时,串口2接收的数据频繁出错是为什么?

    STM32f4定时器TIM1输出PWM占空比快速变化时,导致串口2接收的数据频繁出错是为什么?
    发表于 03-15 06:27

    STM32F4x输出pwm配置完后没有输出怎么解决?

    如题,我先配置GPIOPD12后配置TIM4_CH1,但是通过监测发现没有PWM 输出,不知道是不是哪儿出问题了,定时器CNT仿真看到是正常的,但是就是没有PWM
    发表于 03-14 07:23

    STM32F051C8 PA0不能以DMA的方式输出PWM,没有正确波形输出是哪里出了问题?

    ,新建工程,选择型号STM32F051C8; 选择内部时钟,配置时钟为48Mhz, 配置TIM2 CH1为DMA PWM输出; 生成代码后,加入WS2812b的应用代码;在m
    发表于 03-13 06:20

    STM32U575 pwm和DMA输出波形少一段怎么处理?

    _PulseFinishedCallback(TIM_HandleTypeDef *htim){HAL_TIM_PWM_Stop_DMA( htim4,TIM_CHANNEL_1);}
    发表于 03-13 06:10

    STM32F407上使用DMA给TIM2的CCR4写值,高位出现0x64没有波形产生怎么处理?

    STM32F407上使用DMA给TIM2的CCR4写值,输出固定个数PWM波个数时,遇见了CCR4
    发表于 03-11 08:04

    stm32f303RE PWM输出波形变形的原因?

    我使用stm32 nucleo开发板,使用TIM3 CH4输出PWM方波,发现波形变形,整个工程
    发表于 03-08 08:12

    STM32F103R8T6 MT4和MT5怎么配置才能各自独立输出呢?

    1->CCR3的值TIM1CH3和TIM1CH3N也就是MT4和MT5通道会同时输出。我想请问MT4和MT5怎么配置才能各自独
    发表于 03-07 06:43

    基于CKS32F4xx系列的MCU互补PWM方案

    互补输出实际跟比较输出章节一样使用的是定时器的功能,所以相关的函数设置同样在库函数文件CKS32f4xx_tim.h和CKS32f4xx_tim.c文件中。 1)开启
    发表于 12-02 10:13 587次阅读
    基于CKS32<b class='flag-5'>F4</b>xx系列的MCU互补<b class='flag-5'>PWM</b>方案