10.通用定时器

发布于:2024-04-29 ⋅ 阅读:(22) ⋅ 点赞:(0)

驱动电机          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步骤

  1. IO口端口使能,IO口模式配置为复用模式

  2. 定时器复用到IO口(映射)

  3. 时基配置,定时器时钟使能,选择时钟源,配置分频数PSC,重装载值ARR,计算周期,将配置好的参数写进计数器

  4. 配置输出比较通道,具体如下

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定时器使能
}