本文主要是介绍10.通用定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
驱动电机 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,PC7RCC->APB1ENR |= 1<<1; //打开TIM3时钟TIM3->SMCR &= ~0x7; //禁止从模式––如果 CEN =“1”,预分频器时钟直接由内部时钟提供//时基配置TIM3->PSC = 84 - 1; //84分频后为1MhzTIM3->ARR = 1000 - 1; //1ms走完周期,hz为1000TIM3->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模式1TIM3->CCER |= 3; //OC1 低电平有效 开启––在相应输出引脚上输出 OC1 信号TIM3->CCR1 = ccr; //设置比较值TIM3->CR1 |= 1; //TIM3定时器使能
}
这篇关于10.通用定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!