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

    文章

    4897

    浏览量

    209889
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348720

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

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

收藏 人收藏

    评论

    相关推荐

    如果是使用六步方波的方法来控制电机,要如何实现过电流保护?

    请问一下如果是使用六步方波的方法来控制电机,要如何实现过电流保护? 以免电流过大造成板子损坏
    发表于 04-22 08:10

    请问workbench生成代码时怎么选择foc或梯形六步法?

    workbench生成代码时怎么选择foc或梯形六步法?
    发表于 04-19 07:53

    需使STM32F103C8T6的PB1输出为高电平,请问相关的模式寄存器输出寄存器该如何配置

    需使STM32F103C8T6的PB1输出为高电平,请问相关的模式寄存器输出寄存器该如何配置
    发表于 03-27 07:51

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

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

    GTM模块的子模块ATOM怎么配置输出PWM

    GTM模块的子模块ATOM怎么配置输出PWM,有没有大佬可以详细说一下,主要是不知道怎么设置它输出
    发表于 02-05 08:07

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

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

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

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

    LTC6993CS6-1在5.6us时必须使用179KHZ的频率吗?

    我想设置5.6us的,根据仿真的表示,频率必须在179khz下在可以,经过试验,确实在该频率下芯片
    发表于 11-15 06:08

    PWM和定时测量精度

    您好!请问PWM和定时测量精度是多少?
    发表于 11-02 22:51

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

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

    FAQ0097 AT32F421 BLDC电机六步驱动方式设置说明

    AT32F421_BLDC电机六步驱动方式设置说明
    发表于 10-23 06:49

    运用DMA功能实现高级定时和ADC的同步触发采样

    ,故计数周期为 2 倍的 ARR 寄存器的值,即 PWM频率为 20kHz。 通过设置 ATIM 的控制寄存器(CR)的 COMP 位为 1,使得
    发表于 09-15 06:09

    基于DWC2的USB驱动开发-发送相关的寄存器DMA寄存器详解

    本文转自公众号,欢迎关注 基于DWC2的USB驱动开发-发送相关的寄存器DMA寄存器详解 (qq.com) 前言 如下寄存器DIEPxxx,对应IN端点,和发送数据相关,这一篇先介绍和
    的头像 发表于 07-16 16:42 879次阅读
    基于DWC2的USB驱动开发-发送相关的<b class='flag-5'>寄存器</b>DMA<b class='flag-5'>寄存器</b><b class='flag-5'>详解</b>

    工程监测无线中继采集仪的寄存器(参数)汇总详解

    。仅列出较为常用的参数,当需要配置设备完成复杂、特殊的应用时,请查看“无线中继采集发送仪寄存器汇总说明” 。 1 寄存器(读/写)如下图: 工程监测无线中继采集仪的寄存器(参数)汇总
    的头像 发表于 05-19 10:39 371次阅读
    工程监测无线中继采集仪的<b class='flag-5'>寄存器</b>(参数)汇总<b class='flag-5'>详解</b>

    如何计算OPWFMB模式下的PWM频率

    频率 = CORE_CLK / 全局预分频 / 内部预分频 / (B1+1) “ B1 是写入通道 B 寄存器的值。 ” 但是根据这个计算
    发表于 04-27 06:16