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 }
LED1--PWM波

  

原文地址:https://www.cnblogs.com/juan-4-14/p/12795787.html