|
发表于 2013-9-3 10:18:51
|
显示全部楼层
这个讲解怪麻烦,给你发一个例程吧,假如用8M晶振超频到72M,用STM32定时器3产生一个周期为20ms,高电平时间1.5ms的PWM 的代码如下:
void PWM_Configuration(void)//PWM初始化函数
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//T3时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE); //使能PORTC时钟
//配置PWM输出通道初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//选择PC
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //管脚频率为50MHZ
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //模式为推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIOC寄存器
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 , ENABLE); ///管脚重映射 将PC口和TIM3连接
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器初始化结构
TIM_OCInitTypeDef TIM_OCInitStructure;//通道输出初始化结构
//(1)TIM3初始化,时间基部分
TIM_TimeBaseStructure.TIM_Period =19999; //周期0~999
TIM_TimeBaseStructure.TIM_Prescaler = 71; //时钟分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //基本初始化
//(2)TIM3通道初始化 ,CCP部分
// 1通道
TIM_OCStructInit(& TIM_OCInitStructure); //默认参数
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //工作状态
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码
TIM_OCInitStructure.TIM_Pulse =1500 ; //占空长度
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平
TIM_OC4Init(TIM3, &TIM_OCInitStructure); //通道初始化
// 2通道
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //工作状态
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码
TIM_OCInitStructure.TIM_Pulse =1500 ; //占空长度
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //通道初始化
// 3通道
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //工作状态
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码
TIM_OCInitStructure.TIM_Pulse =1500 ; //占空长度
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
// 4通道
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //工作状态
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //设定为输出,需要PWM输出才需要这行代码
TIM_OCInitStructure.TIM_Pulse =1500 ; //占空长度
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_ARRPreloadConfig(TIM3, ENABLE); //
TIM_Cmd(TIM3, ENABLE); //使能TIM3,到此在TIM中已配置完成
} |
|