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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值