/***********************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();
}
|