之前发帖:
【瑞萨RA4系列开发板体验】1. 新建工程+按键控制LED
【瑞萨RA4系列开发板体验】2. KEIL环境搭建+STLINK调试+FreeRTOS使用
【瑞萨RA4系列开发板体验】3. KEIL下UART实现printf与scanf重定向
本文将讲解如何使用RA4M2的PWM,板载的三个LED都连接到了GPT上,可以复用为PWM输出。
本文是在KEIL基础上开发的,E2开发方法类似。
本文重点如下:
查看原理图,LED连接情况如下:
LED1 - P415
LED2 - P404
LED3 - P405
查看数据手册,了解P415,P404与P405的复用关系如下:
P415 - 复用为GPT0 A
P404 - 复用为GPT3 B
P405 - 复用为GPT1 A
该信息需要记住,配置时需要用到
KEIL菜单 -> Tools -> RA Smart Configurator打开RASC配置工具。
之前将P404,P405,P415引脚配置为了普通IO口,需要先取消掉,选择Disable,否则不能配置为复用关系。
选择GPT,配置GPT0,GPT1,GPT3,分别对应P415,P404与P405。
选择操作模式为GTIOCA or GTIOCB,因为不需要同时使用GTIOCA与GTIOCB,如果需要同时使用,选择GPTICA and GPIOCB。
配置好了引脚复用关系之后,到Stacks配置窗口配置驱动,选择Timers -> Timer General PWM(r_gpt),使用普通PWM,如下图,需要选择三个,因为需要用到三路GPT。
上一步骤配置了三个GPT,则这一步骤需要将三个GPT都配置为PWM模式并输出,无需设置中断,以下为GPT0的配置,GPT1与GPT3是一样的。
上述就是所有的配置,配置完成电击生成代码,然后关闭RASC,开始代码开发。
因为只是作为测试,所以代码中只驱动了LED1,及使用了timer0,LED2与LED3可根据具体情况自行实现。
代码如下:
uint32_t aa = 0;
void hal_entry(void)
{
/* Initialize the uart for implement the 'printf' and 'scanf' */
Uart_Init();
fsp_err_t err = FSP_SUCCESS;
/* 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);
err = R_GPT_Open(&g_timer1_ctrl, &g_timer1_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
err = R_GPT_Open(&g_timer3_ctrl, &g_timer3_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Start the timer. */
(void) R_GPT_Start(&g_timer0_ctrl);
/* Only driver P415 for Demo */
err = R_GPT_PeriodSet(&g_timer0_ctrl, 10000);// frequency
assert(FSP_SUCCESS == err);
while (1)
{
err = R_GPT_DutyCycleSet(&g_timer0_ctrl, aa, GPT_IO_PIN_GTIOCA);// duty cycle
assert(FSP_SUCCESS == err);
R_BSP_SoftwareDelay (10, BSP_DELAY_UNITS_MILLISECONDS);
aa += 10;
if (aa > 10000)
aa = 0;
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
见底部视频
更多回帖