stm32之PWM
1、PWM 是脉冲宽度可调制的波, 也就是说通过调节占空
比的变化来调节信号、 能量等的变化, 占空比就是指在一
个周期内, 信号处于高电平的时间占据整个信号周期的百
分比, 例如方波的占空比就是50%。
PWM 波可以由GPIO口产生, 通过GPIO口输出高电平,
延时, 输出低电平, 延时来产生PWM波。 还可以使用定时
器, 利用比较寄存器形成PWM
2、如何产生PWM波:定时器定时时长:PWM的周期、定时器比较寄存器:PWM的占空比。
3、工作过程:
4、如何产生PWM波
1 #include "pwm.h" 2 3 //LED1 -- PB1 -- TIM3_CH4 4 //psc 分频值 arr 重装载值 ccr 比较值 5 void TIM3_CH4Init(u16 psc,u16 arr,u16 ccr) 6 { 7 GPIO_InitTypeDef GPIO_InitStruct; 8 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; 9 TIM_OCInitTypeDef TIM_OCInitStruct; 10 11 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); 12 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); 13 14 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; 15 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; 16 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1; 17 GPIO_Init(GPIOB,&GPIO_InitStruct); 18 19 // TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频因子 --输入 20 TIM_TimeBaseInitStruct.TIM_Period = arr-1; //重装载值 21 TIM_TimeBaseInitStruct.TIM_Prescaler = psc-1;//分频 22 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 23 // TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; 24 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); 25 26 /********输出比较*********/ 27 TIM_OCInitStruct.TIM_Pulse = ccr;//比较值 28 TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//PWM1模式1 29 TIM_OCInitStruct.TIM_OCPolarity =TIM_OCPolarity_Low;//极性:低电平有效 30 TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 31 TIM_OC4Init(TIM3,&TIM_OCInitStruct); 32 33 TIM_Cmd(TIM3,ENABLE);//使能计数器 34 }