浅谈stm32 pwm

    xiaoxiao2021-12-14  19

    ①   使能定时器3和相关IO口时钟。

            使能定时器3时钟:RCC_APB1PeriphClockCmd();

            使能GPIOB时钟:RCC_APB2PeriphClockCmd();

    ②     初始化IO口为复用功能输出。函数:GPIO_Init();

           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;      

    ③   这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

          所以需要开启AFIO时钟。同时设置重映射。

           RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

           GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

    ④    初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

    ⑤    初始化输出比较参数:TIM_OC2Init();

    ⑥   使能预装载寄存器:TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

    ⑦   使能定时器。TIM_Cmd();

    ⑧   不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare2();

     

    u  PWM输出库函数

    void TIM_OCxInit(TIM_TypeDef* TIMx,TIM_OCInitTypeDef* TIM_OCInitStruct);

    typedef struct

    {

     uint16_t TIM_OCMode;  //PWM模式1或者模式2

     uint16_t TIM_OutputState; //输出使能 OR失能

     uint16_t TIM_OutputNState;

     uint16_t TIM_Pulse; //比较值,写CCRx

     uint16_t TIM_OCPolarity; //比较输出极性

     uint16_t TIM_OCNPolarity;

     uint16_t TIM_OCIdleState; 

     uint16_t TIM_OCNIdleState;

    } TIM_OCInitTypeDef;

     

    TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_PWM2; //PWM模式2

    TIM_OCInitStructure.TIM_OutputState =TIM_OutputState_Enable; //比较输出使能

    TIM_OCInitStructure. TIM_Pulse=100;

    TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

    TIM_OC2Init(TIM3,&TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3OC2

     

    CCR1:捕获比较()寄存器(x=1,2,3,4):设置比较值。

    CCMR1:OC1M[2:0]位:

                  对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】

    CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。

    CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。

    转载请注明原文地址: https://ju.6miu.com/read-968300.html

    最新回复(0)