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的主要内容,如果未能解决你的问题,请参考以下文章