之前发帖:
【瑞萨RA4系列开发板体验】1. 新建工程+按键控制LED
【瑞萨RA4系列开发板体验】2. KEIL环境搭建+STLINK调试+FreeRTOS使用
【瑞萨RA4系列开发板体验】3. KEIL下UART实现printf与scanf重定向
前言
本文将讲解如何使用RA4M2的PWM,板载的三个LED都连接到了GPT上,可以复用为PWM输出。
本文是在KEIL基础上开发的,E2开发方法类似。
本文重点如下:
- 使用RASC配置三个LED引脚为PWM输出模式;
- 驱动LED1PWM由暗到亮周期性闪烁。
硬件连接
查看原理图,LED连接情况如下:
LED1 - P415
LED2 - P404
LED3 - P405
查看数据手册,了解P415,P404与P405的复用关系如下:
P415 - 复用为GPT0 A
P404 - 复用为GPT3 B
P405 - 复用为GPT1 A
该信息需要记住,配置时需要用到
RASC配置
KEIL菜单 -> Tools -> RA Smart Configurator打开RASC配置工具。
配置引脚
之前将P404,P405,P415引脚配置为了普通IO口,需要先取消掉,选择Disable,否则不能配置为复用关系。
配置GPT复用关系
选择GPT,配置GPT0,GPT1,GPT3,分别对应P415,P404与P405。
选择操作模式为GTIOCA or GTIOCB,因为不需要同时使用GTIOCA与GTIOCB,如果需要同时使用,选择GPTICA and GPIOCB。
配置GPT
配置好了引脚复用关系之后,到Stacks配置窗口配置驱动,选择Timers -> Timer General PWM(r_gpt),使用普通PWM,如下图,需要选择三个,因为需要用到三路GPT。
配置PWM
上一步骤配置了三个GPT,则这一步骤需要将三个GPT都配置为PWM模式并输出,无需设置中断,以下为GPT0的配置,GPT1与GPT3是一样的。
- 首先需要使能输出;
- 设置名字,为了在代码中调用使用;
- 设置Channel,使用那一路GPT,就设置Channel为几,P415为0,P404为3,P405为1;
- 设置模式为PWM;
- 使能输出设置GTIOCA或者GTIOCB,参考数据手册描述,见上文 硬件连接
上述就是所有的配置,配置完成电击生成代码,然后关闭RASC,开始代码开发。
代码实现
因为只是作为测试,所以代码中只驱动了LED1,及使用了timer0,LED2与LED3可根据具体情况自行实现。
代码如下:
uint32_t aa = 0;
void hal_entry(void)
{
Uart_Init();
fsp_err_t err = FSP_SUCCESS;
err = R_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);
assert(FSP_SUCCESS == err);
err = R_GPT_Open(&g_timer1_ctrl, &g_timer1_cfg);
assert(FSP_SUCCESS == err);
err = R_GPT_Open(&g_timer3_ctrl, &g_timer3_cfg);
assert(FSP_SUCCESS == err);
(void) R_GPT_Start(&g_timer0_ctrl);
err = R_GPT_PeriodSet(&g_timer0_ctrl, 10000);
assert(FSP_SUCCESS == err);
while (1)
{
err = R_GPT_DutyCycleSet(&g_timer0_ctrl, aa, GPT_IO_PIN_GTIOCA);
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (10, BSP_DELAY_UNITS_MILLISECONDS);
aa += 10;
if (aa > 10000)
aa = 0;
}
#if BSP_TZ_SECURE_BUILD
R_BSP_NonSecureEnter();
#endif
}
效果展示
见底部视频