PWM输出实验

一.参考资料

  • 探索者STM32F4开发板:
    《STM32F4开发指南-库函数版本》-第14章 PWM实验
  • STM32F4xx官方资料:
    《STM32F4xx中文参考手册》-第16章 通用定时器

二.通用定时器PWM概述

1.STM32 PWM工作过程

STM32 PWM工作过程1STM32 PWM工作过程3

STM32 PWM工作过程2

STM32 PWM工作过程3

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:打开。

2.PWM模式1 & PWM模式2

寄存器TIMx_CCMR1的OC1M[2:0]位来分析:

位分析

3.向上计数配置

向上计数配置

4.STM32 PWM

PWM模式

5.自动重载的预装载寄存器

ARPE=1的更新事件

ARPE=0的更新事件

void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

简单的说,ARPE=1,ARR立即生效。。。APRE=0,ARR下个比较周期生效。

6.STM32 定时器14输出通道引脚

输出通道引脚

这里需要纠正,通用定时器9-14,有的有2个通道,有的只有一个。

Datasheet中表格会有详细说明

7.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指定的参数初始化外设TIM3 OC2
  • 设置比较值函数:

    void TIM_SetCompareX(TIM_TypeDef* TIMx, uint16_t Comparex);
  • 使能输出比较预装载:

    void TIM_OCxPreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
  • 使能自动重装载的预装载寄存器允许位:

    void TIM_ARRPreloadConfig(TIM_TypeDef* TIMx, FunctionalState NewState);

三.PWM输出实验

1.要求

使用定时器14的PWM功能,输出占空比可变的PWM波,用来驱动LED灯,从而达到LED【PF9]亮度由暗变亮,又从亮变暗,如此循环。

2.PWM输出配置步骤

  1. 使能定时器14和相关IO口时钟。

            使能定时器14时钟:RCC_APB1PeriphClockCmd();
            使能GPIOF时钟:RCC_AHB1PeriphClockCmd ();
  2. 初始化IO口为复用功能输出。函数:GPIO_Init();

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        //复用功能
  3. GPIOF9复用映射到定时器14

        GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);     
  4. 初始化定时器:ARR,PSC等:TIM_TimeBaseInit();
  5. 初始化输出比较参数:TIM_OC1Init();
  6. 使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);
  7. 使能自动重装载的预装载寄存器允许位TIM_ARRPreloadConfig(TIM14,ENABLE);
  8. 使能定时器。
  9. 不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare1();
最后修改:2020 年 02 月 06 日 11 : 50 AM
如果觉得我的文章对你有用,请随意赞赏