PWM

该示例使用 TIM ,实现输出周期为0.1s、占空比为50%的 PWM 功能,为了便于观察,使用P0_1(LED0)作为PWM输出,实现LED0的闪烁。

环境需求

该示例支持以下开发套件:

开发套件

Hardware Platforms

Board Name

RTL87x2G HDK

RTL87x2G EVB

更多信息请参考 快速入门

硬件连线

连接P0_1和LED0小灯。

LED驱动电路如下图所示。

这里应该是LED驱动电路图片

LED驱动电路图

编译和下载

该示例的工程路径如下:

Project file: samples\peripheral\timer\pwm\proj\rtl87x2g\mdk

Project file: samples\peripheral\timer\pwm\proj\rtl87x2g\gcc

请按照以下步骤操作构建并运行该示例:

  1. 打开工程文件。

  2. 按照 Quick StartGenerating App Image 给出的步骤构建目标文件。

  3. 编译成功后,在路径 mdk\bingcc\bin 下会生成 app bin app_MP_xxx.bin 文件。

  4. 按照 Quick StartMPTool Download 给出的步骤将app bin烧录至EVB内。

  5. 按下复位按键,开始运行。

测试验证

  1. 当EVB启动后,在DebugAnalyzer工具内观察如下LOG。

    Start pwm test!
    
  2. 通过逻辑分析仪看P0_1输出的PWM波形或者看LED0的闪烁情况。P0_1输出周期为0.1s,占空比为50%的PWM波,LED0每0.1s闪烁一次。

这里应该是timer输出pwm的图片

Timer PWM的输出波形

代码介绍

该章节分为以下几个部分:

  1. 源码路径

  2. 初始化函数将在 初始化 章节介绍。

源码路径

  • 工程路径: sdk\samples\peripheral\timer\pwm\proj

  • 源码路径: sdk\samples\peripheral\timer\pwm\src

该工程的工程文件代码结构如下:

└── Project: input_interrupt
    └── secure_only_app
        └── Device                   includes startup code
            ├── startup_rtl.c
            └── system_rtl.c
        ├── CMSIS                    includes CMSIS header files
        ├── CMSE Library             Non-secure callable lib
        ├── Lib                      includes all binary symbol files that user application is built on
            └── rtl87x2g_io.lib
        ├── Peripheral               includes all peripheral drivers and module code used by the application
            ├── rtl_rcc.c
            ├── rtl_pinmux.c
            └── rtl_tim.c
        └── APP                      includes the ble_peripheral user application implementation
            ├── main_ns.c
            └── io_timer.c

初始化

初始化流程包括了 board_pwm_initdriver_pwm_init


board_pwm_init 中包含了PAD与PINMUX设置。

  1. 配置PAD:设置引脚、PINMUX模式、PowerOn、无内部上拉。

  2. 配置PINMUX:分配引脚分别为PWM_OUT_PIN_PINMUX,即PWM输出功能。


driver_pwm_init 包含了对TIM外设的初始化。

  1. 使能PCC时钟。

  2. 设置 TIM_Mode 为TIM_Mode_UserDefine,即用户自定义模式。

  3. 设置 TIM_PWM_En 为ENABLE,即打开TIM的PWM功能。

  4. 设置 TIM_PWM_High_CountTIM_PWM_Low_Count ,用户可以根据需求分配高电平周期值和低电平周期值。

  5. 使能TIM2,即可输出PWM波形。

/* Configure TIMER parameters */
TIM_TimeBaseInitTypeDef TIM_InitStruct;
TIM_StructInit(&TIM_InitStruct);
TIM_InitStruct.TIM_Mode = TIM_Mode_UserDefine;
TIM_InitStruct.TIM_PWM_En         = ENABLE;
TIM_InitStruct.TIM_PWM_High_Count = PWM_HIGH_COUNT;
TIM_InitStruct.TIM_PWM_Low_Count  = PWM_LOW_COUNT;
TIM_TimeBaseInit(PWM_TIMER_NUM, &TIM_InitStruct);

TIM_Cmd(PWM_TIMER_NUM, ENABLE);