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

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

3天内不再提示

详解STM32的PWM输出及频率和脉宽的计算——寄存器配置六步曲!

GReq_mcu168 来源:玩转单片机 2020-07-09 09:20 次阅读

一、stm32的pwm输出引脚是使用的IO口的复用功能。

二、T2~T5这4个通用定时器均可输出4路PWM——CH1~CH4。

三、我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并在最后给出tim3的ch1和ch2两路pwm输出的c代码(已在STM32F103RBT6上测试成功,大家放心使用!)。

四、给出了PWM频率和占空比的计算公式。

步骤如下:

1、使能TIM3时钟

RCC->APB1ENR |= 1 << 1;

2、配置对应引脚(PA6)的复用输出功能

GPIOA->CRL &= 0XF0FFFFFF;//PA6清0
GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
GPIOA->ODR |= 1 << 6;//PA6上拉

3、设定计数器自动重装值及是否分频

TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
TIM3->PSC = psc;//预分频器,0为不分频

4、设置PWM的模式(有1和2两种模式,区别在于输出电平极性相反),根据需求选一种即可

注:TIMX_CCMR1决定CH1~CH2路,TIMX_CCMR2决定CH3~CH4路。

//TIM3->CCMR1 |=6 << 4;//CH1 PWM1模式 

TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 
TIM3->CCMR1 |= 1 << 3;//CH1预装载使能

5、输出使能设置

TIM3->CCER |= 1 << 0;//输入/捕获1输出使能

6、自动重装载预装载允许位(ARPE) 及 定时器使能

TIM3->CR1 = 0X0080;//ARPE使能(此句不配置也行)
TIM3->CR1 |= 0X01;//使能定时器3

下面给出TIM3_CH1及TIM3_CH2的PWM输出代码:

void PWM_Init_TIM3_CH1(u16 arr, u16 psc)
{

//1、使能TIM3时钟

RCC->APB1ENR |= 1 << 1;//使能TIM3时钟

//2、配置对应引脚(PA6)的复用输出功能

GPIOA->CRL &= 0XF0FFFFFF;//PA6清0
GPIOA->CRL |= 0X0B000000;//复用功能输出(推挽50MHz输出)
GPIOA->ODR |= 1 << 6;//PA6上拉   

//3、设定计数器自动重装值及是否分频

TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
TIM3->PSC = psc;//预分频器 0为不分频
//4、设置PWM的模式
TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式 
TIM3->CCMR1 |= 1 << 3;//CH1预装载使能    
//5、输出使能设置

TIM3->CCER |= 1 << 0;//输入/捕获1输出使能

//6、自动重装载预装载允许位(ARPE) 及 定时器使能

TIM3->CR1 = 0X0080;//ARPE使能
TIM3->CR1 |= 0X01;//使能定时器3
}

void PWM_Init_TIM3_CH2(u16 arr, u16 psc)
{
RCC->APB1ENR |= 1 << 1;//使能TIM3时钟

GPIOA->CRL &= 0X0FFFFFFF;//PA7清0
GPIOA->CRL |= 0XB0000000;//复用功能输出(推挽50MHz输出)
GPIOA->ODR |= 1 << 7;//PA7上拉

TIM3->ARR = arr;//设定计数器自动重装值(决定PWM的频率)
TIM3->PSC = psc;//预分频器 不分频

TIM3->CCMR1 |= 7 << 12;//CH2 PWM2模式
TIM3->CCMR1 |= 1 << 11;//CH2预装载使能

TIM3->CCER |= 1 << 4;//输入/捕获2输出使能
TIM3->CR1 = 0X0080;//ARPE使能
TIM3->CR1 |= 0X01;//使能定时器3
}

频率:

//Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
占空比:

//duty circle = TIM3->CCR1 / arr(单位:%)

注:本文方法的一个定时器4个通道的pwm输出的频率是相同的,但占空比可以不同!

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

    关注

    114

    文章

    5109

    浏览量

    213051
  • STM32
    +关注

    关注

    2264

    文章

    10852

    浏览量

    354100

原文标题:详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解寄存器模型镜像值

    DUT的配置寄存器的值是实际值,reg_model有镜像值、期望值的概念。
    的头像 发表于 10-23 09:43 125次阅读
    <b class='flag-5'>详解</b><b class='flag-5'>寄存器</b>模型镜像值

    寄存器的输入输出方式

    寄存器的输入输出方式是数字电路设计中至关重要的部分,它决定了数据如何在寄存器中进出以及处理的效率。下面将详细探讨寄存器的几种主要输入输出方式
    的头像 发表于 09-05 14:09 520次阅读

    Jacinto7 DDRSS寄存器配置工具

    电子发烧友网站提供《Jacinto7 DDRSS寄存器配置工具.pdf》资料免费下载
    发表于 08-27 10:11 0次下载
    Jacinto7 DDRSS<b class='flag-5'>寄存器</b><b class='flag-5'>配置</b>工具

    寄存器是什么意思?寄存器是如何构成的?

    计算机科学中,寄存器(Register)是一个高速存储单元,它位于中央处理(CPU)内部,用于存储计算机程序执行过程中所需要的数据、指令地址或状态信息。
    的头像 发表于 08-02 18:23 2742次阅读
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何构成的?

    六步换相法pwm控制bldc电机,电机超过额定电压控制的原因?

    六步换相法pwm控制bldc电机,供电设置为额定电压24v,设置为额定转速为3000rpm,此时占空比100%。 如果以超过额定电压的母线电压供电给H桥,转速还是设置额定,那么在控制的时候,占空比
    发表于 07-24 07:11

    寄存器分为基本寄存器和什么两种

    寄存器计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。 一、基本
    的头像 发表于 07-12 10:31 957次阅读

    STM32F103ZET6产生pwm可调

    32新手,想请教一下各位用STM32F103ZET6产生pwm波可不可以设计成可调,就是将占空比每次可增加百分之一转变成每次可增加几秒或者几微秒的
    发表于 06-05 10:13

    STM32PWM输出模式中,如何做到PWM移向输出

    PWM输出模式中,如何做到PWM移向输出?在DSP中有时基相位寄存器,可以移向配置占空比。但是
    发表于 05-15 06:02

    如何根据自己设计中的寄存器配置总线定义来生成一套寄存器配置模版

    无论是FPGA还是ASIC,系统设计中总会存在配置寄存器总线的使用,我们会将各种功能、调试寄存器挂载在寄存器总线上使用。
    的头像 发表于 03-04 13:56 1005次阅读
    如何根据自己设计中的<b class='flag-5'>寄存器</b><b class='flag-5'>配置</b>总线定义来生成一套<b class='flag-5'>寄存器</b><b class='flag-5'>配置</b>模版

    寄存器的逻辑功能有保持功能吗 寄存器的输入输出的方式有分别有哪几种

    寄存器计算机中用于存储和操作数据的一种重要元件。它可以暂时存储数据,提供对数据的读取和写入功能,并且可以进行各种数据操作和运算。在计算机体系结构中,寄存器可用于多种目的,如存储指令、
    的头像 发表于 02-18 09:39 1777次阅读

    TCPWM输入捕获数据异常的原因?

    您好,最近尝试使用TCPWM实现捕获的时候遇到了奇怪的问题,我将通道配置成了捕获模式,并且配置CC0为上升沿捕获,CC1为下降沿捕获,但观察实际值却是CC0和CC1一同刷新了,这是
    发表于 01-18 07:42

    MC17XS6500高边驱动芯片寄存器的介绍

    本文主要是对MC17XS6500高边驱动芯片寄存器进行的介绍,MC17XS6500寄存器分为输入寄存器输出寄存器,对常用的几个输入和
    的头像 发表于 12-29 08:27 690次阅读
    MC17XS6500高边驱动芯片<b class='flag-5'>寄存器</b>的介绍

    请问ADXL355的输出速率配置哪些寄存器

    请问ADXL355的输出速率配置哪些寄存器,刚用了这个传感,资料文档显示输出频率为4000hz
    发表于 12-28 08:29

    Keil仿真调试STM32与LED

    ;led.h"#include"delay.h"/*GPIO的控制寄存器配置1、配置输出引脚2、打开对应的输出
    的头像 发表于 11-30 08:00 828次阅读
    Keil仿真调试<b class='flag-5'>STM32</b>与LED

    寄存器开发,HAL开发和LL开发的区别和参考代码

    1,寄存器开发【难度值:难】寄存器开发是一种直接访问微控制寄存器的编程方法,它提供了对硬件的极大灵活性和直接控制。在寄存器级开发中,程序员
    的头像 发表于 11-17 08:00 1205次阅读
    <b class='flag-5'>寄存器</b>开发,HAL开发和LL开发的区别和参考代码