static void TIM3_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;/*设置1ms 高电平*/
u16 CCR1_Val =10;/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 199; //当定时器从0计数到199,即为200次,为一个定时周期
TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置分频:7200 (72,000,000/7200=10,000=0.1ms)
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为pwm模式一
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //设置跳变值,当计数器计数到这个值时,电平发生跳变
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时为高电平
TIM_OC1Init(TIM3, &TIM_OCInitStructure); //使能通道1
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM3, ENABLE); //使能TIM3重载寄存器ARR
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE); //使能定时器3
}
TIM3_Mode_Config()函数被分为三部分:时基初始化,输出模式初始化,比较寄存器的数值。
首先是时基初始化,使用了一个TIM_TimeBaseInitTypeDef 类型的结构体。时基初始化配置基本定时器具有的那一部分功能。
时基初始化:
- TIM_Period:定时周期,脉冲计数器从0累加到这个值上溢或从这个值自减至0下溢。若给该成员赋值为199,即定时周期为
,T为时钟源周期。
- TIM_Prescaler :对定时器时钟TIMxCLK的预分频值,分频后为脉冲计数器TIMxCLK的驱动时钟,得到脉冲计数器的时钟频率为
,其中N为赋给本成员的值。
- TIM_CounterMode :配置脉冲计数器TIM_CNT的计数模式:向上计数,向下计数,中央对齐计数