3RA生态之定时器输出PWM

Posted 衾许°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3RA生态之定时器输出PWM相关的知识,希望对你有一定的参考价值。

在瑞萨 RA 系列 MCU 中有两种定时器,一种是通用 PWM 定时器 GPT,另外一种是异 步通用定时器 AGT,在这里我们使用通用定时器GPT进行PWM输出。

对GPT6进行选中,从右边的芯片引脚看出GPT6有两个通道可用,分别是GTIOC6A和GTIOC6B

定时器配置 点击 Stacks->New Stack->Timers->Timer Driver on r_gpt(不同版本的cube可能会界面不一样)

stack配置

设置占空比和输出引脚

 改好即可进行SDK生成

R_GPT_Open()函数:进行初始化定时器模块并应用配置
/* Initializes the module. */ err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg); /* Handle any errors. This function should be defined by the user. */ assert (FSP_SUCCESS == err);
R_GPT_Start()函数:进行开启定时器

/* Start the timer. */ ( void ) R_GPT_Start(&g_timer0_ctrl);

 R_GPT_PeriodSet()函数:设置频率,频率=时钟源/period,若设置频率为 10K,则 period=48M/10K=4800

err = R_GPT_PeriodSet(&g_timer0_ctrl, 4800 ); // 频率 assert (FSP_SUCCESS == err); R_BSP_SoftwareDelay ( 20 , BSP_DELAY_UNITS_MILLISECONDS); // 不加延时可能会设置不成功

 R_GPT_DutyCycleSet()函数:设置占空比,占 空 比 =cycle/period , 若 设 置 + 占 空 比 为 50% , 则 cycle= + 占 空 比 * period=50%*4800=2400

err = R_GPT_DutyCycleSet(&g_timer0_ctrl, 2400 , GPT_IO_PIN_GTIOCA); // 占空比 assert (FSP_SUCCESS == err); R_BSP_SoftwareDelay ( 20 , BSP_DELAY_UNITS_MILLISECONDS); // 不加延时可能会设置不成功

 R_GPT_Reset()函数:将计数器值重置为 0

err = R_GPT_Reset(&g_timer0_ctrl); assert (FSP_SUCCESS == err);

 示例代码:

void hal_entry(void)

    /* TODO: add your own code here */
        fsp_err_t err = FSP_SUCCESS;
        /* 初始化定时器模块. */
        err = R_GPT_Open(&g_timer6_ctrl, &g_timer6_cfg);
        /* 如果初始化无错才继续. */
        assert(FSP_SUCCESS == err);
        /* 开启定时器. */
        R_GPT_Start(&g_timer6_ctrl);
        /* 延时20ms防止失败. */
        R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
        /* 设置定时器频率为10Khz. */
        err = R_GPT_PeriodSet(&g_timer6_ctrl, 4800);
        assert(FSP_SUCCESS == err);
        R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
        /* 设置占空比为50%. */
        err = R_GPT_DutyCycleSet(&g_timer6_ctrl, 2400, GPT_IO_PIN_GTIOCA);
        assert(FSP_SUCCESS == err);
        R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
        /* 复位定时器. */
        err = R_GPT_Reset(&g_timer6_ctrl);
        assert(FSP_SUCCESS == err);
        R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS);
    
#if BSP_TZ_SECURE_BUILD
    /* Enter non-secure code */
    R_BSP_NonSecureEnter();
#endif

 现象:通道P111应该会输出50%的PWM

以上是关于3RA生态之定时器输出PWM的主要内容,如果未能解决你的问题,请参考以下文章

HAL之PWM

STM32之呼吸灯实验

STM32定时器 TIM3之PWM输出

基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验

STM32笔记之PWM输出,调节频率及占空比

stm32之PWM学习