matlab中pwm占空比计算代码,详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!(转)...

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

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

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

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

步骤如下:

1、使能TIM3时钟

8d09d04492b1120a5a30948b507be52e.png

447befdba9e98ec17be4578744830631.png

RCC->APB1ENR |= 1 << 1;

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

27337ba075e7798689ee9ca2069f56c6.png

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两种模式,区别在于输出电平极性相反),根据需求选一种即可

d5244250e1d3b9d8416299afc0c5a24d.png

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

92eef7abe82f3c0639454464454fee65.png

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

TIM3->CCMR1 |= 7 << 4;//CH1 PWM2模式

TIM3->CCMR1 |= 1 << 3;//CH1预装载使能

5、输出使能设置

89c43e5b57a0bdb37984c913cacb9369.png

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

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

a7e725d7bad8f22b43097a4d6da779dc.png

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输出的频率是相同的,但占空比可以不同!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值