计数方式 预分频器 输入输出通道 互补输出
基本定时器(TIM6,7) 向上 16bit 无 无
通用定时器(TIM2,3,4,5) 向上,向下,向上|向下 16bit 4 无
高级定时器(TIM1,8) 向上,向下,向上|向下 16bit 4 有
(互补输出:是三相六步电机接口,可驱动电机,高级定时器特有的功能)
1,基本定时器
实质是在计数
定时器1s取反灯的状态,编程步骤:
1,打开时钟------TIM6
2,初始化定时器
----自动重装载寄存器的值-----10000
----预分频器的值-----7200
3,配置中断源----计数器溢出
4,配置中断优先级
5,编写中断服务函数
6,使能定时器6
2,通用定时器
PWM-脉冲宽度调制-----占空比可调
占空比:高电平占整个周期的百分比
PWM作用:可以用PWM调节声音的大小,光的亮度,速度的快慢-------调节一段时间的平均电压值
3》预装载寄存器-----影子寄存器,它是一个实际存在的寄存器,当你需要同时改变周期值和比较值时,在程序运行过程中,它不会当即发生改变,先会将这两个值存入预装载寄存器中,在当前周期结束后,同时改变这两个值
4》调试版实验步骤:
1,打开时钟------TIM3,GPIOC,AFIO
2,初始化GPIOC
----复用推挽输出
---GPIO_Pin_6|7|8
---速度----50MHZ
3,完全重映射TIM3
4,初始化定时器3
----周期值---255
----预分频器的值---1-1
----向上计数
----时钟分割-1分割
5,定时器输出通道初始化
----模式--PWM1
----有效电平--低电平
----比较值--0
----通道1|2|3
6,使能ARR的预装载寄存器
7,使能通道1|2|3的预装载寄存器
8,使能定时器3
9,设置捕获比较寄存器的值
基本定时器跟通用定时器没有什么区别下面是通用定时器的创建代码
#include "drv_commontim.h"
void TIM3_CommonTim_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
// 1》打开时钟------TIM3,GPIOC,AFIO
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOC,ENABLE);
// 2》初始化GPIOC
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode =GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed =GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
// 3》完全重映射TIM3
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
// 4》初始化定时器3
TIM_TimeBaseInitStruct.TIM_Period =255;
TIM_TimeBaseInitStruct.TIM_Prescaler =1-1;
TIM_TimeBaseInitStruct.TIM_CounterMode =TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);
// 5》定时器输出通道初始化
TIM_OCInitStruct.TIM_OCMode =TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity =TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse =0;
TIM_OC1Init(TIM3,&TIM_OCInitStruct);
TIM_OC2Init(TIM3,&TIM_OCInitStruct);
TIM_OC3Init(TIM3,&TIM_OCInitStruct);
// 6》使能ARR的预装载寄存器
TIM_ARRPreloadConfig(TIM3,ENABLE);
// 7》使能通道1|2|3的预装载寄存器
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
// 8》使能定时器3
TIM_Cmd(TIM3,ENABLE);
}
void TIM3_SetCompareValue(uint8_t R,uint8_t G,uint8_t B)
{
TIM_SetCompare1(TIM3,B);
TIM_SetCompare2(TIM3,G);
TIM_SetCompare3(TIM3,R);
}