回答

收藏

[评测分享] 【RISC-V 沁恒微-CH585M-R1开发板试用体验】+呼吸灯效

#板卡评测 #板卡评测 620 人阅读 | 0 人回复 | 2025-06-24

       承接上期的点灯贴,今天来分享一下,输出两路PWM,让板上的LED0、LED1实现呼吸灯效果。

       因为CH585集成定时器Timer和脉宽调制PWM资源:

① - 4组26位定时器,16MHz主频定时可达4.2S
② - 4路捕捉/采样,支持上升沿/下降沿/双边沿
③ - 4路26位PWM输出
④ - 8路8位PWM输出或前6路16位PWM输出
       例程中的PWMX工程也列举出7路PWM,另外的一路PWM,即PWM11复用管脚PB23,该管脚从电路原理图上看是RST#复位按键,如果需要该路PWM输出,需要关闭RST#复位按键功能,将PB23复用成PWM11。今天笔者只驱动PWM4、PWM5两路通道,用来连接到板上LED0、LED1管脚上,实现呼吸灯效果,并将当前的PWM占空比值通过串口输出打印。
实验代码:
  1. #include "CH58x_common.h"
  2. #include "ch58x_drv_ledc.h"

  3. uint8_t dutyCycle = 0;
  4. uint8_t direction = 0;

  5. /*********************************************************************
  6. * @fn      DebugInit
  7. *
  8. * @brief   调试初始化
  9. *
  10. * @return  none
  11. */
  12. void DebugInit(void)
  13. {
  14.     GPIOA_SetBits(GPIO_Pin_14);
  15.     GPIOPinRemap(ENABLE, RB_PIN_UART0);
  16.     GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
  17.     GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
  18.     UART0_DefInit();
  19. }

  20. /*********************************************************************
  21. * @fn      main
  22. *
  23. * @brief   主函数
  24. *
  25. * @return  none
  26. */
  27. int main()
  28. {
  29.     HSECFG_Capacitance(HSECap_18p);
  30.     SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);

  31.     GPIOA_ModeCfg(GPIO_Pin_12, GPIO_ModeOut_PP_5mA); // PA12 - PWM4
  32.     GPIOA_ModeCfg(GPIO_Pin_13, GPIO_ModeOut_PP_5mA); // PA13 - PWM5

  33.     PWMX_CLKCfg(4);                                   // cycle = 4/Fsys
  34.     PWMX_CycleCfg(PWMX_Cycle_64);                     // 周期 = 64*cycle
  35.     PWMX_ACTOUT(CH_PWM4, 64 / 100, Low_Level, ENABLE);  // 1% 占空比
  36.     PWMX_ACTOUT(CH_PWM5, 64 / 100, Low_Level, ENABLE);  // 1% 占空比

  37.     /* 配置串口调试 */
  38.     DebugInit();

  39.     while(1)
  40.     {
  41.         if(direction == 0)
  42.         {
  43.             dutyCycle+=10;
  44.         }
  45.         else if(direction == 1)
  46.         {
  47.             dutyCycle-=10;
  48.         }
  49.         DelayMs(80);
  50.         PWMX_ACTOUT(CH_PWM4, (64 * dutyCycle)/ 100, Low_Level, ENABLE);  // PWM4占空比更改
  51.         PWMX_ACTOUT(CH_PWM5, (64 * dutyCycle)/ 100, Low_Level, ENABLE);  // PWM5占空比更改

  52.         if(dutyCycle > 90)
  53.             direction = 1;
  54.         else if(dutyCycle < 10)
  55.             direction = 0;
  56.         printf("dutyCycle = %d\r\n",dutyCycle);

  57.     }
  58. }
复制代码
硬件连接:


正如上图所示,PA14连接串口调试工具的RX,PA15连接串口调试工具的TX,PA12连接LED0,PA13连接LED1。工程编译完成后,使用“WCHISPStudio”工具下载,关于下载这里不再详细赘述,断电后杜邦线短接PB22,然后再上电下载。
串口输出:


LED0、LED1“同呼吸共命运,步调一致”,效果如下:



分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

软件工程师
40462 积分
34 主题
+ 关注
热门推荐
关闭

站长推荐上一条 /3 下一条