//通用定时器:
//STM32F407的通用定时器有哪几个:
TIM2---TIM5与TIM9---TIM14
//通用定时器的功能:
1.继承了基本定时器的所有功能,延时、更新中断
2.输出比较功能(常用脉冲宽度调制):PWM方波,用于调LED亮度、控制舵机角度、控制空心杯电机转速
3.输入捕获功能:捕获外界过来的波形(计算一段高电平/低电平时间、波形频率)
//与基本定时器相比较,通用定时器有两个额外的功能(输出比较与输入捕获)
//通用定时器的分布与各自的特点:
TIM2---TIM5(常见):
1.通用定时器包含一个16位(TIM3、TIM4)或32位(TIM2、TIM5)递增、递减和递增/递减自动重载计数器,该计数器由16bit可编程预分频器驱动
2.用于多种用途,包括测量输入信号的脉冲宽度(输入捕获)或生成输出波形(输出比较和PWM)
3.16位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于1到65536之间
4.使用外部信号控制定时器且可实现多个定时器互连的同步电路(定时器级联)
5.多达4个独立通道
TIM9和TIM12:
1.TIM9和TIM12计数器16bit,计数方向:递增
2.16位可编程预分频器
3.多达2个独立通道
TIM10/TIM11和TIM13/TIM14:
1.16 位自动重载递增计数器(属于中等容量器件)
2.16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 和 65536 之间
3.独立通道
//不同:
1.TIM2和TIM5计数器为32bit,其他通用定时器计数器为16bit
2.TIM2 - TIM5计数方向:递增、递减、中心边沿对齐,其他通用定时器只支持递增计数
3.TIM2-TIM5:4个独立通道 TIM9和TIM12:2个独立通道 TIM10/TIM11和TIM13/TIM14:1个独立通道
//通用定时器框图:
//时钟源部分:
内部时钟源:
由时钟树与挂靠总线频率决定,与基本定时器时钟源一致
一般情况下都用内部时钟源(比较稳定)
外部时钟源:
ETR:外部管脚
TI1PF1:定时器输入通道1对应的管脚
TI2PF2:定时器输入通道2对应的管脚
ITRx:定时器级联
若用了定时器级联建议查看中文参考手册表76.TIMx内部触发连接
//TIM9 / TIM12时钟源没有外部时钟模式2
//TIM10、TIM11、TIM13、TIM14时钟源只有内部时钟源可选
//框图总结:
时钟源部分:内部时钟源、外部时钟模式1、外部时钟模式2
//大部分情况都使用内部时钟源
//原因:
1.通用定时器都可以使用内部时钟源
2.方便代码配置
时基单元:与基本定时器基本一样
//输出比较的PWM模式介绍:
//pwm:脉冲宽度调制
//占空比 = 有效电平的时间占整个周期的比例
//改变PWM的占空比:
通过修改通用定时器的CCR寄存器的值来达到修改占空比的目的
//如果CCR直接设置为1000(ARR)可以吗?
CCR可以直接设置为1000,但是会一直输出有效电平
//定时器驱动IO输出PWM配置寄存器
见中文参考手册的通用定时器的TIM2--TIM5部分
//代码框架:
{
//初始化IO口
//打开GPIOC时钟
//配置PC6模式 --- 复用模式
//配置IO口与片上外设关系 AFR
//初始化TIM3
SMCR:
//时钟源 --- 内部时钟
CR1:
//计数方式
//计数方向
//设置TIM3时基单元
PSC、ARR
//配置输出比较通道1
//CCMRx
//CCER
//使能定时器
}
//例程:(通过通用定时器的PWM模式改变LED灯的亮度)
/*
函数功能:TIM3输出比较初始化
返回值:void
形参: u16
函数说明:
LED3-------PC6-------TIM3_CH1
LED4-------PC7-------TIM3_CH2
IO口——>定时器-->输出比较通道
*/
void TIM3_Init(void)
{
//打开GPIOC的时钟
RCC->AHB1ENR |= 1 << 2;
GPIOC->MODER &=~ (3 << 12);//模式寄存器清零
GPIOC->MODER &=~ (3 << 14);//模式寄存器清零
GPIOC->MODER |= 2 << 12;//PC6配置为复用模式
GPIOC->MODER |= 2 << 14;//PC7配置为复用模式
GPIOC->AFR[0] |= 2 << 24;//配置PC6与TIM3映射关系
GPIOC->AFR[0] |= 2 << 28;//配置PC7与TIM3映射关系
//TIM3初始化
RCC->APB1ENR |= 1 << 1;//打开TIM3时钟
TIM3->CR1 &=~ (3 << 5);//计数方式选择边沿对齐
TIM3->CR1 &=~ (1 << 4);//设置为递增计数
TIM3->SMCR &=~ (7 << 0);//选择时钟源为内部时钟
//设置TIM3的时基单元 1000hz
TIM3->PSC = 84 - 1;//预分频数
TIM3->ARR = 1000 - 1;//重装载值
TIM3->EGR |= 1 << 0;//UG位置一
TIM3->SR &=~ (1 << 0);//清除标志位
//TIM3通道初始化
TIM3->CCMR1 |= 6 << 4;//ch1选择输出模式为PWM模式一
TIM3->CCMR1 |= 6 << 12;//ch2选择输出模式为PWM模式一
TIM3->CCMR1 |= 1 << 3;//使能CH1 CCR寄存器影子寄存器的缓冲功能
TIM3->CCMR1 |= 1 << 11;//使能CH2 CCR寄存器影子寄存器的缓冲功能
TIM3->CCMR1 &=~ (3 << 0);//TIM3_CC1通道一配置为输出
TIM3->CCMR1 &=~ (3 << 8);//TIM3_CC2通道二配置为输出
TIM3->CCER &=~ (1 << 3);//手册:配置为输出,此位保持清零
TIM3->CCER &=~ (1 << 7);//手册:配置为输出,此位保持
TIM3->CCER |= 1 << 1;//设置有效电平为高电平
TIM3->CCER |= 1 << 5;//2设置有效电平为高电平
TIM3->CCER |= 1 << 0;//使能通道的输出比较功能
TIM3->CCER |= 1 << 4;//使能通道二的输出比较功能
TIM3->CCR1 = 0;//CNT始终大于CCR,输出无效电平
TIM3->CCR2 = 0;//CNT始终大于CCR,输出无效电平
//使能TIM3
TIM3->CR1 |= 1 << 0;
}