[APM32F4] 【APM32F402R Micro-EVB开发板测评】+呼吸灯效果

[复制链接]
 楼主| jinglixixi 发表于 2025-7-22 23:56 | 显示全部楼层 |阅读模式

利用PWM的调节功能可以实现LED的呼吸灯效果,为调整呼吸灯的快慢,可为其配置一个时间很短的延时函数。
该延时函数的内容为:
  1. void Delay(void)
  2. {
  3. volatile uint32_t delay = 0x2ffff;
  4. while(delay--);
  5. }

为进行PWM调节,其初始化函数为:
  1. void TMR_Config(void)
  2. {
  3. RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR5);
  4. tmrBaseConfig.countMode = TMR_COUNTER_MODE_UP;
  5. tmrBaseConfig.clockDivision = TMR_CLOCK_DIV_1;
  6. tmrBaseConfig.period = 999;
  7. tmrBaseConfig.division = 119;
  8. tmrBaseConfig.repetitionCounter = 0;
  9. TMR_ConfigTimeBase(TMR5, &tmrBaseConfig);
  10. tmrOCConfig.mode = TMR_OC_MODE_PWM1;
  11. tmrOCConfig.outputState = TMR_OC_STATE_ENABLE;
  12. tmrOCConfig.outputNState = TMR_OC_NSTATE_DISABLE;
  13. tmrOCConfig.polarity = TMR_OC_POLARITY_HIGH;
  14. tmrOCConfig.nPolarity = TMR_OC_NPOLARITY_HIGH;
  15. tmrOCConfig.idleState = TMR_OC_IDLE_STATE_RESET;
  16. tmrOCConfig.nIdleState = TMR_OC_NIDLE_STATE_RESET;
  17. tmrOCConfig.pulse = 0;
  18. TMR_ConfigOC2(TMR5, &tmrOCConfig);
  19. TMR_EnablePWMOutputs(TMR5);
  20. TMR_Enable(TMR5);
  21. }

对PWM输出引脚的配置函数为:
  1. void TMR_GPIO_Config(void)
  2. {
  3. GPIO_Config_T gpioConfig;
  4. RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);
  5. gpioConfig.speed = GPIO_SPEED_50MHz;
  6. gpioConfig.mode = GPIO_MODE_AF_PP;
  7. gpioConfig.pin = GPIO_PIN_1;
  8. GPIO_Config(GPIOA, &gpioConfig);
  9. }

经前面几个函数的配合,实现呼吸灯效果的主程序为:
  1. int main(void)
  2. {
  3. uint8_t f=0;
  4. BOARD_LED_Config(LED2);
  5. TMR_GPIO_Config();
  6. TMR_Config();
  7. while (1)
  8. {
  9. if(f==0)
  10. {
  11. t=t+1;
  12. if(t>100) f=1;
  13. }
  14. else
  15. {
  16. t=t-1;
  17. if(t<1) f=0;
  18. }
  19. tmrOCConfig.pulse = t;
  20. TMR_ConfigOC2(TMR5, &tmrOCConfig);
  21. Delay();
  22. }
  23. }

经程序的编译和下载,则可在PA1引脚所连接的LED模块上见到所呈现的呼吸灯效果。

演示效果:




HeartbeatEcho 发表于 2025-7-23 10:36 | 显示全部楼层
一个timer控制PWM改变频率,一个timer输出变化的PWM的duty。
got it!
硬件门外汉joker 发表于 2025-8-7 10:10 | 显示全部楼层
请问,函数TMR_GPIO_Config()中虽然有配置GPIOA1的模式,但是如何将PA1和TMR5映射在一起的呢
 楼主| jinglixixi 发表于 2025-8-7 12:47 | 显示全部楼层
硬件门外汉joker 发表于 2025-8-7 10:10
请问,函数TMR_GPIO_Config()中虽然有配置GPIOA1的模式,但是如何将PA1和TMR5映射在一起的呢 ...

找相关的复用引脚对照表
阳光爆裂 发表于 2025-8-11 17:03 | 显示全部楼层
也是啊!使用一个小延时函数即可完成PWM频率输出的间隔设定。
心跳回响 发表于 2025-8-13 14:15 | 显示全部楼层
还是呼吸灯看着效果好
 楼主| jinglixixi 发表于 2025-8-13 19:47 | 显示全部楼层
心跳回响 发表于 2025-8-13 14:15
还是呼吸灯看着效果好

感谢支持!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

517

主题

2932

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部