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
    +关注

    关注

    116

    文章

    5847

    浏览量

    223726
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371060

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【NCS随笔】nRF54L15使用UICR寄存器保存数据

    nRF54L15使用UICR寄存器保存数据 本文章主要是讲解如何使用nRF54L15的UICR寄存器保存一些基础数据 一、UICR寄存器的说明 UICR(用户信息配置
    的头像 发表于 11-27 17:09 1103次阅读

    HbirdV2-SoC自带pwm配置介绍

    1 队伍介绍 本篇主要介绍蜂鸟HbirdV2-SoC自带外设PWM配置 2 PWM寄存器介绍 在芯来的e203官方手册中,外设部分对PWM
    发表于 10-30 06:53

    蜂鸟内核中DMA的硬件实现——寄存器配置

    DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只需要向DMA控制下达指令(配置DMA寄存器),传输数据
    发表于 10-24 08:46

    PWM信号是如何控制舵机的?

    逻辑 舵机的控制依赖于特定频率PWM 信号,关键参数如下: PWM 信号频率:固定为
    的头像 发表于 09-29 10:48 627次阅读

    ‌SN74LVC595A 8位移位寄存器技术文档总结

    SN74LVC595A器件包含一个8位串行输入、并联输出移位寄存器,该寄存器为8位D型存储寄存器供电。存储寄存器具有并行的 3 态
    的头像 发表于 09-28 15:09 1103次阅读
    ‌SN74LVC595A 8位移位<b class='flag-5'>寄存器</b>技术文档总结

    ‌SN74HCT595 8位移位寄存器技术解析与应用指南

    Texas Instruments SN74HCT595/SN74HCT595-Q1 8位移位寄存器包含8位串进并出移位寄存器,向8位D类存储寄存器馈送信号。存储寄存器具有并行 3 状
    的头像 发表于 09-19 14:31 567次阅读
    ‌SN74HCT595 8位移位<b class='flag-5'>寄存器</b>技术解析与应用指南

    如何理解无刷电机中的六步换向?

    无刷电机中的六步换向是一种用于无刷直流电机(BLDC)的换相控制策略,它主要通过电子开关控制电机绕组的通电顺序,从而实现电机的旋转。以下是对无刷电机中六步换向的详细理解: 一、六步换向的基本原理 无
    的头像 发表于 07-23 07:39 1170次阅读

    使用stm32f405做6pwm输出时,定时配置由强制输出转为pwm,com触发后会有延迟生效的现象,怎么解决?

    我在使用stm32f405做6pwm输出时发现,定时配置
    发表于 03-13 07:24

    ADS1115在配置和转换时的具体操作步骤,每一寄存器配置是怎样的?

    ADS1115在配置和转换时的具体操作步骤,每一寄存器配置是怎样的???希望能给出配置和读取数据的模块函数
    发表于 02-12 08:25

    74HC594-Q100;74HCT594-Q100带输出寄存器的8位移位寄存器规格书

    电子发烧友网站提供《74HC594-Q100;74HCT594-Q100带输出寄存器的8位移位寄存器规格书.pdf》资料免费下载
    发表于 02-09 15:19 0次下载
    74HC594-Q100;74HCT594-Q100带<b class='flag-5'>输出</b><b class='flag-5'>寄存器</b>的8位移位<b class='flag-5'>寄存器</b>规格书

    STC15系列常用寄存器汇总免费下载

    基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可
    发表于 01-22 17:24 10次下载

    XILINX FPGA CLB单元之移位寄存器

    一、移位寄存器 SLICEM函数发生也可以配置为32位移位寄存器,而无需使用slice中可用的触发。以这种方式使用,每个LUT可以将串行
    的头像 发表于 01-16 17:45 1443次阅读
    XILINX FPGA CLB单元之移位<b class='flag-5'>寄存器</b>

    STM32驱动ADS7952时怎么配置AD的寄存器

    STM32驱动ADS7952时不懂怎么配置AD的寄存器,不知道发送什么数据偶去才能使它工作,PDF看不懂,貌似要发很多次不同的数据,请尽快求解
    发表于 01-02 07:08

    STM32F407和ADS8684进行SPI通信,寄存器怎么配置

    通过STM32F407和ADS8684进行SPI通信,阅读了ADS8684的手册,配置STM32F407为主,CPOL为0,CPHA为1,这样对吗? 配置好后应该先设置ADS8684
    发表于 12-20 06:25

    中科芯CKS32K148 MCU SCG时钟工作频率范围和寄存器设置

    接第四十五期的SCG介绍,下文对SCG时钟工作频率范围、寄存器设置等进行详细阐述。
    的头像 发表于 12-09 14:55 1331次阅读
    中科芯CKS32K148 MCU SCG时钟工作<b class='flag-5'>频率</b>范围和<b class='flag-5'>寄存器</b>设置