驱动电机 RGB LED亮度(呼吸灯) 舵机(遥控车、机械臂)
通用定时器作用
1.延时
2.定时器更新中断
3.输出比较(PWM波、驱动IO输出波形(脉冲))
4.输入捕获(捕获高低电平时间、记录按键按下事件)
TIM2,TIM3,TIM4,TIM5,
其中TIM2和TIM5为32位计数器
4条独立通道
TIM9和TIM12
2条独立通道
TIM10,TIM11,TIM13,TIM14
1条独立通道
通用定时器框图
特别注意的是在使用通用定时器进行PWM的输出时,要考虑复用的IO口是否能被当前时钟复用,因为IO口能被复用的功能本质其中是在内部电路设计中已经把时钟与IO口连接了,软件配置只是把连接打开,不然复位的时候这种电路通常都是关闭的,所以我们可以在数据手册中直接搜IO口,可以查到对应能复用的表,有的IO口是没有定时器的复用功能的,所以这样的IO口是不能被定时器复用,那怕软件复用也没有用,它的本质不存在!
配置定时器输出PWM步骤
IO口端口使能,IO口模式配置为复用模式
定时器复用到IO口(映射)
时基配置,定时器时钟使能,选择时钟源,配置分频数PSC,重装载值ARR,计算周期,将配置好的参数写进计数器
配置输出比较通道,具体如下
void TIM3_PWM_Init(u16 ccr)
{
GPIOC->MODER &= ~(0xf << 12);//模式清零
GPIOC->MODER |= 0xa << 12; //PC6,PC7为复用模式
GPIOC->AFR[0] |= 0x22 << 24; //TIM3映射到PC6,PC7
RCC->APB1ENR |= 1<<1; //打开TIM3时钟
TIM3->SMCR &= ~0x7; //禁止从模式––如果 CEN =“1”,预分频器时钟直接由内部时钟提供
//时基配置
TIM3->PSC = 84 - 1; //84分频后为1Mhz
TIM3->ARR = 1000 - 1; //1ms走完周期,hz为1000
TIM3->CNT = 0; //当前值清零
TIM3->EGR |= 1; //UG=1,更新事件产生,自动重装载
TIM3->SR &= ~1; //标志位清零
//配置输出比较通道
TIM3->CR1 |= 1<<7; //ARR影子寄存器使能
TIM3->CR1 &= ~(3 << 5); //边沿对齐模式。计数器根据方向位 (DIR) 递增计数或递减计数。
TIM3->CR1 &= ~(1<<4); //方向为递增
TIM3->CCMR1 &= ~3; //CC1 通道配置为输出。
TIM3->CCMR1 |= 1<<3; //输出比较 1 预装载使能
TIM3->CCMR1 |= 6<<4; //PWM模式1
TIM3->CCER |= 3; //OC1 低电平有效 开启––在相应输出引脚上输出 OC1 信号
TIM3->CCR1 = ccr; //设置比较值
TIM3->CR1 |= 1; //TIM3定时器使能
}