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

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

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-24 11:26 次阅读

Ⅰ、概述

上一篇文章关于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

    文章

    4887

    浏览量

    209836
  • RCC
    RCC
    +关注

    关注

    0

    文章

    91

    浏览量

    26702
  • STM32F4
    +关注

    关注

    3

    文章

    192

    浏览量

    27672
收藏 人收藏

    评论

    相关推荐

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

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

    f446rct6在使用dma控制pwm占空比时,pwm波形异常的原因?

    需要更新数据时,启动一次dma传输 现象:pwm波的频率占空比没有问题,但是在启动dma传输的第一个或第二个波形,经常会 出现一个三角形的奇怪
    发表于 04-09 07:45

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

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

    STM32F407 TIM1 PWM输出占空比不稳定的原因?

    使用HAL库,设置频率12.5MHZ,占空比50%。实际输出,大多数为50%,少数为75%左右。库函数编写是会有一个TIM_CtrlPWMOutputs()函数,使能BDTR寄存器MO
    发表于 03-27 07:39

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

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

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

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

    怎么实现dsp芯片输出占空比固定的pwm波形

    实现DSP芯片输出占空比固定的PWM波形需要以下步骤:定义占空比、设置计时器、计算周期和持续时间、更新
    的头像 发表于 12-26 17:28 718次阅读

    STM32PWM波形输出配置的大神总结

    STM32PWM波形输出配置的大神总结
    的头像 发表于 10-24 16:00 2218次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>PWM</b><b class='flag-5'>波形</b><b class='flag-5'>输出</b>配置的大神总结

    TIM DMA burst输出变频PWM波形

    电子发烧友网站提供《TIM DMA burst输出变频PWM波形.pdf》资料免费下载
    发表于 09-19 17:06 2次下载
    <b class='flag-5'>TIM</b> DMA burst<b class='flag-5'>输出</b>变频<b class='flag-5'>PWM</b><b class='flag-5'>波形</b>

    stm32f407zgt6在studio下tim44PWM通道无输出的原因?

    stm32f4的PD12~15的4个引脚输出PWM波(空闲高电平,匹配后低电平;4个通道周期一样,占空
    发表于 09-03 14:52

    为什么STM32F401cdu用HAL_TIM_DMABurst_WriteStart无法输出PWM波形

    本人是STM32新手,所以采用CUBEMX生成项目,在MDK中采用HAL库来进行一些编程测试。 想用TIME3、TIME4作为时钟源,各自用第一通道输出频率随时可变
    发表于 08-07 12:26

    如何用一个定时器实现3路时差和占空比可调波形

    有人想实现下面的PWM输出波形,三路频率相同,占空比同步可调,且三路
    的头像 发表于 07-06 15:22 1097次阅读
    如何用一个定时器实现3路时差和<b class='flag-5'>占空比</b><b class='flag-5'>可调</b>的<b class='flag-5'>波形</b>

    STM32CubeMx普通PWM基本使用方法

    这里是使用 TIM3_CH2输出 一个频率为50kHz;占空比为50% 的PWM信号。
    发表于 06-01 14:38 1123次阅读
    <b class='flag-5'>STM32</b>CubeMx普通<b class='flag-5'>PWM</b>基本使用方法

    STM32CubeMX输出可调频率占空比PWM

    1,新建工程,我选的是STM32F103ZET6芯片,选择定时器的PWM功能。2、配置时钟,我这里配的是内部时钟,有需要的可以自己改。3、配置定时器,默认就可以,因为代码里面需要对配置的初始化代码
    的头像 发表于 05-11 10:00 2402次阅读
    <b class='flag-5'>STM32</b>CubeMX<b class='flag-5'>输出</b><b class='flag-5'>可调频率</b>与<b class='flag-5'>占空比</b>的<b class='flag-5'>PWM</b>

    【正点原子STM32探索者V3开发板体验】使用通用定时器TIM9实现STM32F407的高性能PWM输出

    STM32F407中有若干通用定时器和高级定时器,其中TIM9 TIM10 TIM11 TIM1 TIM
    发表于 05-07 22:03