1) pwm初始化函数
void pwm_init()
{
GPIO_InitTypeDef GPIO_InitStructure; //初始化 GPIO
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//初始化定时器
TIM_OCInitTypeDef TIM_OCInitStructure;//根据 TIM_OCInitStruct 中指定的参数初始化外设 TIMx
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* 配置 GPIO 的模式和 IO 口 */
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_Init(GPIOC,&GPIO_InitStructure);//TIM3 定时器初始化
TIM_TimeBaseInitStructure.TIM_Period = 899; //设置自动重装载寄存器周期的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 0;//设置用来作为 TIMx 时钟频率预分频值,100Khz 计数频率
TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM 向上计数模式
TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OC2Init(TIM3,&TIM_OCInitStructure);//注意此处初始化时 TIM_OC2Init
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能或者失能
TIMx 在 CCR2 上的预装载寄存器
TIM_Cmd(TIM3,ENABLE);//使能或者失能 TIMx 外设
}
|