STM32定时器输出PWM

STM32定时器输出PWM

在这里插入图片描述
我们设置ARR值,就是设置CNT的上限,设置CCRX的值就是设置了一个临界点,CNT是一直随时间变化而变化的,当CNT>CCRX的时候输出 高/低电平 当CNT<CCRX的时候输出相反的电平,当CNT达到上限时,下一刻就变成0了。又开始CNT小于或者大于两种状态。
CNT从0到ARR是一个周期
CNT<CCRX输出高/低
CNT>CCRX输出低/高
只要TIM不关闭,CNT就一直循环上面两个状态。这样就形成了PWM
PWM周期:ARR决定
PWM占空比:CCRX决定

STM32定时器TIM3使用PWM模式

代码中相关寄存器和一些时钟的配置:
1:打开TIM3时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

2:因为想使用PB5作为输出脚所以打开复用时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

3:设置TIM3 CH2的部分映射

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	
AFIO->MAPR&=0XFFFFF3FF;
AFIO->MAPR|=1<<11;PA7-->>PB5

4:使能GPIOB,设置GPIO_PB5为复用推挽输出设置GPIO的速率为最大50MHZ

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_INIT;
GPIO_INIT.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_INIT.GPIO_Pin=GPIO_Pin_5;
GPIO_INIT.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_INIT);

5:设定计数器自动重装值,预分频器值,设置TIM CH2为PWM模式,预装载使能,输出使能,计数使能

TIM3->ARR=25; //设定计数器自动重装值
TIM3->PSC=72; //预分频器不分频
TIM3->CCMR1|=7<<12; //CH2 PWM2 模式
TIM3->CCMR1|=1<<11; //CH2 预装载使能 
TIM3->CCER|=1<<4; //OC2 输出使能 
TIM3->CR1=0x0080; //ARPE 使能
TIM3->CR1|=0x01; //使能定时器 3

6:我们可以通过改变CCR2的值设置PWM占空比

TIM3->CCR2=8;

7:可以通过改变ARR值改变PWM周期

TIM3->ARR=25; //设定计数器自动重装值

总结:这个可以把之前的用延迟做的PWM改成用通用定时器做的。因为定时器做的PWM不占用主循环,硬件自动输出。我们只要改变寄存器的值就可以控制PWM。软件延迟做的话,需要占用主循环,不能做别的事情。交流学习的可以+2197358160一起学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值