// 定時器頻率 = 系統時鐘頻率 / (預分頻器 + 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
|