CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

PWM Breath

PWM Breath示例工程用于实现PWM的呼吸模式。当示例工程工作时,可以通过逻辑分析仪观察其波形的占空比从0至100%变化,同时通过LED的闪烁快慢变化来呈现。

PWM Breath示例的源代码和工程文件位于SDK_Folder\projects\peripheral\pwm\pwm_breath,其中工程文件在文件夹Keil_5下。

代码理解

示例工程流程图图 22所示:

图 22 PWM Breath示例工程流程图
  1. 配置PWM模块。
    led1_handle.p_instance = PWM1_MODULE;
    led1_handle.active_channel = HAL_PWM_ACTIVE_CHANNEL_B;
    led1_handle.init.mode = PWM_MODE_BREATH;
    led1_handle.init.align = PWM_ALIGNED_EDGE;
    led1_handle.init.freq = 100;   //PWM output freq = 100Hz
    led1_handle.init.bperiod = 500;  //breath period = 500ms
    led1_handle.init.hperiod = 200;  //hold period = 200ms, max = 262ms
    led1_handle.init.channel_b.duty = 50;
    led1_handle.init.channel_b.drive_polarity = PWM_DRIVEPOLARITY_POSITIVE;
    hal_pwm_init(&led1_handle);
        
    led2_handle.p_instance = PWM0_MODULE;
    led2_handle.active_channel = HAL_PWM_ACTIVE_CHANNEL_C;
    led2_handle.init.mode = PWM_MODE_BREATH;
    led2_handle.init.align = PWM_ALIGNED_EDGE;
    led2_handle.init.freq = 100;  //PWM output freq = 100Hz
    led2_handle.init.bperiod = 500; //breath period = 500ms
    led2_handle.init.hperiod = 200; //hold period = 200ms, max = 262ms
    led2_handle.init.channel_c.duty = 50;
    led2_handle.init.channel_c.drive_polarity = PWM_DRIVEPOLARITY_POSITIVE;
    hal_pwm_init(&led2_handle);
    
    • active_channel:PWM通道选择,可选择HAL_PWM_ACTIVE_CHANNEL_A、HAL_PWM_ACTIVE_CHANNEL_B、

      HAL_PWM_ACTIVE_CHANNEL_C、HAL_PWM_ACTIVE_CHANNEL_ALL、

      HAL_PWM_ACTIVE_CHANNEL_CLEARED。

    • init.mode:PWM模式选择,可选择PWM_MODE_FLICKER、PWM_MODE_BREATH。
    • init.align:PWM对齐方式,可选择PWM_ALIGNED_EDGE、PWM_ ALIGNED_CENTER。在breath mode下选择对齐方式无效。
    • init.freq:PWM频率,取值范围0 ~ SystemCoreClock/2。
    • init.bperiod:呼吸模式下指定PWM呼吸周期,取值范围0 ~ 0xFFFFFFFF/SystemCoreClock * 1000,单位(ms)。
    • init.hperiod:呼吸模式下的PWM保持时间,取值范围0 ~ 0xFFFFFFFF/SystemCoreClock * 1000,单位(ms)。
    • init.channel_b.duty:PWM B通道输出模式占空比,取值范围0 ~ 100。在breath mode下占空比设置无效。
    • init.channel_b.drive_polarity:PWM B 通道输出模式驱动器极性,可选择PWM_DRIVEPOLARITY_NEGATIVE、PWM_DRIVEPOLARITY_POSITIVE。
  2. 调用led_breath_on()开启PWM BREATH模式。代码如下:
    void led_breath_on(uint8_t id)
    {
        if (id == LED1)
        {
            hal_pwm_start(&led1_handle);
        }
        else if (id == LED2)
        {
            hal_pwm_start(&led2_handle);
        }
    }
    

测试验证

  1. 用GProgrammer下载pwm_breath.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示PWM执行过程。
  4. 观察逻辑分析仪其波形的占空比从0至100%变化。

扫描关注

打开微信,使用“扫一扫”即可关注。