平台:KEIL5+stm32f103
功能:用TIMER3在通道1上输出一个频率为36KHz,占空比自动变化的PWM波形。为了效果更明显,我把其他通道都打开了。
代码如下:这个代码是在官方例程的基础上加了一些修改:
1.增加设置PWM的频率和占空比的函数,方便调用;
2.增加了关闭通道的功能(在该例程中没有使用);
#define DUTY_CYCLCE_BUF_LEN 6//6种占空比
//DMA自动读取buf里面的内容到CCR1
uint16_t DutyCyclebuf[DUTY_CYCLCE_BUF_LEN] = {500,333,249,166,83,41};
/**
* disable CHX output
*
*/
void DisableChxOutput(uint8_t CHX)
{
switch(CHX)
{
case 1:
{
/* Disable the Channel 1: Reset the CC1E Bit */
TIM3->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC1E);
TIM_ITConfig(TIM3, TIM_IT_CC1 , DISABLE);
}
break;
case 2:
{
/* Disable the Channel 2: Reset the CC2E Bit */
TIM3->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC2E);
TIM_ITConfig(TIM3, TIM_IT_CC2 , DISABLE);
}
break;
case 3:
{
TIM3->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC3E);
TIM_ITConfig(TIM3, TIM_IT_CC3 , DISABLE);
}
break;
case 4:
{
TIM3->CCER &= (uint16_t)(~(uint16_t)TIM_CCER_CC4E);
TIM_ITConfig(TIM3, TIM_IT_CC4 , DISABLE);
}
break;
default:
break;
}
}
void TIMER3_PWM_GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOA clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RC