PWM简介
脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率、由TIMx_CCRx寄存器确定占空比的信号。
步骤
使用CT117E蓝桥杯开发板
经查询TIM3_CH3在完全重映射情况下为PC8引脚对应板子上的LED1
STM32中文参考手册8.3.7
- 使能时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
- 初始化GPIO
GPIO_pwm_Init.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_pwm_Init.GPIO_Pin=GPIO_Pin_8;
GPIO_pwm_Init.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_pwm_Init);
- 重映射引脚
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);
- 初始化定时器
TIM3_CH3_PWMInit.TIM_ClockDivision=TIM_CKD_DIV1;
TIM3_CH3_PWMInit.TIM_CounterMode=TIM_CounterMode_Up ;
TIM3_CH3_PWMInit.TIM_Period=PWM_Period;
TIM3_CH3_PWMInit.TIM_Prescaler=PWM_Prescaler;
TIM_TimeBaseInit(TIM3,&TIM3_CH3_PWMInit);
- 初始化OC输出
TIM3_CH3_OCInit.TIM_OCMode=TIM_OCMode_PWM1;
TIM3_CH3_OCInit.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM3_CH3_OCInit.TIM_OutputState=TIM_OutputState_Enable;
TIM3_CH3_OCInit.TIM_Pulse=50;
TIM_OC3Init(TIM3,&TIM3_CH3_OCInit);
- 使能定时器
TIM_Cmd(TIM3,ENABLE);
备注
- PWM两种模式
- PWM模式一:向上计数时如果计数值(CNT)小于设定值(CCRX)则位有效电平,向下计数时如果计数值大于设定值时为无效电平。(计数值小于设定值为有效)
- PWM模式二:向上计数时如果计数值(CNT)小于设定值(CCRX)则位无效电平,向下计数时如果计数值大于设定值时为有效电平。(计数值大于设定值为有效)
- 中央对齐三种模式
- 中央对齐模式1:计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向下计数时被设置。
- 中央对齐模式2:计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,只在计数器向上计数时被设置。
- 中央对齐模式3:计数器交替地向上和向下计数。配置为输出的通道(TIMx_CCMRx寄存器中CCxS=00)的输出比较中断标志位,在计数器向上和向下计数时均被设置。
注:在计数器开启时(CEN=1),不允许从边沿对齐模式转换到中央对齐模式。
- 两种输出极性
- TIM_OCPolarity_High有效电平为高电平
- TIM_OCPolarity_Low有效电平为低电平
- 一些函数
- TIM_OCXPreloadConfig()
如果此函数使能,那么OCX通道的比较值(CCRX)在改变后立即生效否则将在下一个周期生效。 - TIM_SetCompareX(TIMY)
改变TIMY通道X的比较值(CCRX) - TIM_OCInitTypeDef
其中
TIM_OutputNState
TIM_OCNPolarity
TIM_OCNIdleState与互补输出有关没用到
TIM_OCIdleState检测定时器是否空闲没用到 - TIM_OC2PolarityConfig()
可以设置输出极性
还没有做定时器中断加PWM的实验