×
单片机 > 单片机程序设计 > 详情

STM32L151 PWM输出示例

发布时间:2020-05-19 发布时间:
|

最近做个项目,需要用PWM控制4线风扇的速度,调试完后顺便将其记录下来.



typedef struct {

u16 pwm_change_flag;

u16 pwm_value;

}Pwm_Fan_t;

 

 

Pwm_Fan_t Pwm_Fan;

 

void Pwm_Param_Init(void)

{

Pwm_Fan.pwm_change_flag=0;

Pwm_Fan.pwm_value=80;

}

 

 

//PD14->TIM4_CH3

void PWM_GPIO_Config(void)  

  GPIO_InitTypeDef GPIO_InitStructure; 

 

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);

 

  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_14; 

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;           // 复用推挽输出 

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; 

  GPIO_Init(GPIOD, &GPIO_InitStructure); 

}

 

 

/**************************************************************** 

2017年8月14日14:37:57:cpu的风扇是使用25Khz pwm来调制的

 ***************************************************************/  

void TIM4_Config(u16 pwm)

{  

TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

TIM_OCInitTypeDef  TIM_OCInitStructure;  

/* PWM信号电平跳变值 */     

u16 CCR3;  

 

if(pwm>160-1)

pwm=160-1;

CCR3=pwm;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);  

GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_TIM4); //对于L系列的,这句千万别漏掉了

TIM_Cmd(TIM4, DISABLE);                          

/* Time base configuration */                                            

TIM_TimeBaseStructure.TIM_Period =160 - 1;//0xEA5F;  

TIM_TimeBaseStructure.TIM_Prescaler = 8-1;                                  //设置预分频:预分频=2,即为72/3=24MHz  

TIM_TimeBaseStructure.TIM_ClockDivision = 0;                                //设置时钟分频系数:不分频  

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;                 //向上计数溢出模式  

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);  

 

/* PWM1 Mode configuration: Channel3 */  

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                           //配置为PWM模式1  

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                

TIM_OCInitStructure.TIM_Pulse = CCR3;                                       //设置跳变值,当计数器计数到这个值时,电平发生跳变  

TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_Low;                     //当定时器计数值小于CCR1时为低电平  

TIM_OC3Init(TIM4, &TIM_OCInitStructure);                                    //使能通道3     

TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  

TIM_ARRPreloadConfig(TIM4, ENABLE);                                         //使能TIM4重载寄存器ARR  

/* TIM4 enable counter */  

TIM_Cmd(TIM4, ENABLE);                                                      //使能TIM4   


关键字:STM32L151  PWM输出 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项