// 定时器频率 = 系统时钟频率 / (预分频器 + 1) / (自动重装载值 + 1)
// 定时器预分频器设置为72-1,计数器自动重装载值设置为2000-1,周期为1/20kHz=50us
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; // 定义定时器时间基准结构体变量
TIM_OCInitTypeDef TIM_OCInitStructure; // 定义定时器输出比较结构体变量
/* 初始化定时器8为PWM模式 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
// 使能TIM8的时钟,使用APB2总线上的定时器8
// 定时器预分频器设置为72-1,计数器自动重装载值设置为2000-1,周期为1/20kHz=50us
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 2000 - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); // 初始化TIM8
// PWM模式选择、输出比较通道和输出极性配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM8, &TIM_OCInitStructure); // 配置TIM8的比较输出通道1
TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable); // 使能TIM8比较输出通道1的预装载寄存器
TIM_OC2Init(TIM8, &TIM_OCInitStructure); // 配置TIM8的比较输出通道2
TIM_OC2PreloadConfig(TIM8, TIM_OCPreload_Enable); // 使能TIM8比较输出通道2的预装载寄存器
TIM_OC3Init(TIM8, &TIM_OCInitStructure); // 配置TIM8的比较输出通道3
TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable); // 使能TIM8比较输出通道3的预装载寄存器
TIM_OC4Init(TIM8, &TIM_OCInitStructure); // 配置TIM8的比较输出通道4
TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable); // 使能TIM8比较输出通道4的预装载寄存器
TIM_CtrlPWMOutputs(TIM8, ENABLE); // MOE 主输出使能
TIM_ARRPreloadConfig(TIM8, ENABLE); //使能TIMx在ARR上的预装载寄存器
TIM_Cmd(TIM8, ENABLE); //使能TIM8
|