赞
踩
http://blog.csdn.net/dainifeixiang/article/details/5500317
一、概念理解
1. PWM模式由TIM_ARR寄存器确定频率,由TIM_CCR寄存器确定占空比的信号。
2. 举例说明:例如TIM时钟频率设置为36MHZ,输出比较寄存器中的自装载值为3599即ARR Register = 3599,则输出的PWM频率为
frequency = 36MHZ/(ARR+1)=10KHZ。设置捕获寄存器的值CCR_Value(即高电平计数值)= 1800.,则占空比
duty cycle = 1800//3600=50%。
二、程序分析(PWM频率为10K,占空比为25%)
1. 时钟设置
RCC_PCLK1Config(RCC_HCLK_Div4); //72MHZ 4分频,由于TIM的倍频器在APB分频不为1时为2,所以TIM3的时钟频率为36MHZ
/* TIM3 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
2. GPIO配置(略)
3. TIM3配置
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 3599; //输出比较寄存器中的自装载值,ARR Register = 3599
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //定时器模式为:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //捕获寄存器TIM_CCR的值uint16_t CCR1_Val = 900;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出为高电平
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能或者失能TIMx在CCR1上的预装载寄存器
TIM_ARRPreloadConfig(TIM3, ENABLE); //使能或者失能TIMx在ARR上的预装载寄存器
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE); //启动TIM3。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。