PWM Breath
PWM Breath示例工程用于实现PWM的呼吸模式。当示例工程工作时,可以通过逻辑分析仪观察其波形的占空比从0至100%变化,同时通过LED的闪烁快慢变化来呈现。
PWM Breath示例的源代码和工程文件位于SDK_Folder\projects\peripheral\pwm\pwm_breath,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图图 22所示:
- 配置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。
- active_channel:PWM通道选择,可选择HAL_PWM_ACTIVE_CHANNEL_A、HAL_PWM_ACTIVE_CHANNEL_B、
- 调用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); } }
测试验证
- 用GProgrammer下载pwm_breath.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示PWM执行过程。
- 观察逻辑分析仪其波形的占空比从0至100%变化。