【沁恒CH585开发板免费试用体验】+PWM呼吸灯 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

yinwuqing 关注 私信
[文章]

【沁恒CH585开发板免费试用体验】+PWM呼吸灯

串口打印信息

根据官方提供的关于该开发板的数据手册“CH585DS1.PDF”中有介绍,定时器Timer和脉宽调制PWM资源有以下:

  • 4组26位定时器,16MHz主频定时可达4.2S
  • 4路捕捉/采样,支持上升沿/下降沿/双边沿
  • 4路26位PWM输出
  • 8路8位PWM输出或前6路16位PWM输出

今天在上期的点灯例程上,修改出两路PWM输出,让开发板上的LED0、LED1实现呼吸灯的效果。
根据SDK中提供的参考例程可知,PWMX工程列举出了7路PWM,另外的一路PWM,即PWM11复用管脚PB23,该管脚从电路原理图上看是RST#复位按键,如果需要该路PWM输出,需要关闭RST#复位按键功能,将PB23复用成PWM11。今天笔者只驱动PWM4、PWM5两路通道,用来连接到板上LED0、LED1管脚上,实现呼吸灯效果,并将PWM占空比值通过串口0输出打印。
实验代码如下:

#include "CH58x_common.h"
#include "ch58x_drv_ledc.h"

uint8_t dutyCycle = 0;
uint8_t direction = 0;

/*********************************************************************
* @fn      DebugInit
*
* [url=home.php?mod=space&uid=2666770]@Brief[/url]   调试初始化
*
* [url=home.php?mod=space&uid=1141835]@Return[/url]  none
*/
void DebugInit(void)
{
    GPIOA_SetBits(GPIO_Pin_14);
    GPIOPinRemap(ENABLE, RB_PIN_UART0);
    GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
    UART0_DefInit();
}

/*********************************************************************
* @fn      main
*
* @brief   主函数
*
* @return  none
*/
int main()
{
    HSECFG_Capacitance(HSECap_18p);
    SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);

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

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

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

    while(1)
    {
        if(direction == 0)
        {
            dutyCycle+=10;
        }
        else if(direction == 1)
        {
            dutyCycle-=10;
        }
        DelayMs(80);
        PWMX_ACTOUT(CH_PWM4, (64 * dutyCycle)/ 100, Low_Level, ENABLE);  // PWM4占空比更改
        PWMX_ACTOUT(CH_PWM5, (64 * dutyCycle)/ 100, Low_Level, ENABLE);  // PWM5占空比更改

        if(dutyCycle > 90)
            direction = 1;
        else if(dutyCycle < 10)
            direction = 0;
        printf("dutyCycle = %d\r\n",dutyCycle);

    }
}

硬件实物连接见如下图:
硬件实物连线.jpg

正如上图所示,PA14连接串口调试工具的RX,PA15连接串口调试工具的TX,PA12连接LED0,PA13连接LED1。工程编译完成后,使用“WCHISPStudio”工具下载,关于下载这里不再详细赘述,断电后杜邦线短接PB22,然后再上电,自动识别到设备后再点击“下载”。
程序下载完毕后,串口输出log见顶部视频。LED0、LED1指示灯呈现呼吸灯效果,效果见底部视频。

呼吸灯

更多回帖

×
发帖