/***********************TIM4初始化PWM相關GPIO*************************/
static void GENERAL_TIM_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //初始化結構體
RCC_APB2PeriphClockCmd(GENERAL_TIM4_CH1_GPIO_CLK, ENABLE);//使能GPIOB端口時鐘
GPIO_InitStructure.GPIO_Pin = GENERAL_TIM4_CH1_PIN; //PB6
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //推挽速度50MH
GPIO_Init(GENERAL_TIM4_CH1_PORT, &GPIO_InitStructure); //初始化相關GPIO
}
/**************************TIM2PWM配置********************************/
static void GENERAL_TIM_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定時器基本配置結構體
TIM_OCInitTypeDef TIM_OCInitStructure; //通道配置結構體
GENERAL_TIM4_APBxClock_FUN(GENERAL_TIM4_CLK,ENABLE); //TIM2 掛載在APB1 32M
// 自動重裝載寄存器的值,累計TIM_Period+1個頻率后產生一個更新或者中斷
TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM4_Period; //配置計數720次
// 驅動CNT計數器的時鐘 = Fck_int/(psc+1)
TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM4_Prescaler; //CNT時鐘不分頻
// 時鐘分頻因子 ,配置死區時間時需要用到
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //時鐘不分頻
// 計數器計數模式,設置為向上計數
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上計數
// 重復計數器的值,沒用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
// 初始化定時器
TIM_TimeBaseInit(GENERAL_TIM4, &TIM_TimeBaseStructure); //初始化定時器配置
/*--------------------輸出比較結構體初始化-------------------*/
// 配置為PWM模式1
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM模式1
// 輸出使能
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能輸出
// 輸出通道電平極性配置
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高電平使能
// 輸出比較通道 1
TIM_OCInitStructure.TIM_Pulse = 0; //初始值為0
TIM_OC1Init(GENERAL_TIM4, &TIM_OCInitStructure); //初始化配置
TIM_OC1PreloadConfig(GENERAL_TIM4, TIM_OCPreload_Enable); //使能加載寄存器
TIM_Cmd(GENERAL_TIM4, ENABLE);
}
/*************************TIM4初始化函數****************************************/
void TIM4_PWM_Init(void)
{
GENERAL_TIM_GPIO_Config();
GENERAL_TIM_Mode_Config();
}
|