本次实验要实现使用瑞萨 R7FA4E2B93CFM 进行PWM输出,并对之前TFT-LCD屏幕实验中的屏幕进行亮度调节测试。
之前是将TFT屏幕的BL引脚接在了P014上,调节P014输出高电平实现屏幕背光常亮。该屏幕BL引脚的输入电压在0~VCC之间都可以使得背光亮度随输入电压变化,因此可以使用PWM进行精确控制该引脚的电压,从而实现调光。
我们只需要把BL引脚接到支持PWM输出的IO口即可,通过e2s内的配置可以得知,我们能使用GPT5的P206
实现这一操作。
将先前创建的04_SPI_TFT文件夹复制一份,并将文件夹重命名为06_PWM_Dimming
。TFT文件的前去论坛该帖子中的末尾附件处下载。
在e2s里面,选择菜单栏的文件--导入--常规--现有项目到工作空间中--选择根目录"浏览"--完成。
GPT即General PWM Timer,是 RA MCU 的其中一种 32/16 位的定时器外设。
如下图所示找到GPT5,并把通道B配置为P206。
点击Stacks,New Stack--Timers--Timer General PWM(r_gpt)。点击刚生成的模块-属性,我们只需要改动下图所示的地方。
保存配置文件,并点击Generate Project Content让其自动为我们生成代码。
修改hal_entry.c文件,在hal_entry函数之前
,添加如下内容:
void GPT_PWM_SetDuty(uint8_t duty);
void GPT_PWM_SetDuty(uint8_t duty)
{
timer_info_t info;
uint32_t current_period_counts;
uint32_t duty_cycle_counts;
if (duty > 100)
duty = 100; //限制占空比范围:0~100
/* 获得GPT的信息 */
R_GPT_InfoGet(&g_timer5_ctrl, &info);
/* 获得计时器一个周期需要的计数次数 */
current_period_counts = info.period_counts;
/* 根据占空比和一个周期的计数次数计算GTCCR寄存器的值 */
duty_cycle_counts = (uint32_t)(((uint64_t) current_period_counts * duty) / 100);
/* 最后调用FSP库函数设置占空比 */
R_GPT_DutyCycleSet(&g_timer5_ctrl, duty_cycle_counts, GPT_IO_PIN_GTIOCB);
}
上面是加了个设置PWM占空比的函数
将hal_entry函数内
让用户编写的部分改为如下内容
uint8_t brightness = 100;
fsp_err_t err = R_SPI_Open(&g_spi1_ctrl, &g_spi1_cfg);
assert(FSP_SUCCESS == err);
R_IOPORT_PinWrite(&g_ioport_ctrl, RST, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, RST, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(150, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Init();
LED_ON();
R_GPT_Open(&g_timer5_ctrl, &g_timer5_cfg);
R_GPT_Start(&g_timer5_ctrl);
GPT_PWM_SetDuty(brightness);
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
LCD_ShowString(32,20,(uint8_t *)"RA4E2",RED,BLACK,24,0);
LCD_ShowString(8,50,(uint8_t *)"SPI-LCD",BLUE,BLACK,32,0);
LCD_ShowString(4,80,(uint8_t *)"brightness",GREEN,BLACK,24,0);
while(1){
GPT_PWM_SetDuty(brightness);
LCD_ShowIntNum(48,110,brightness,2,GREEN,BLACK,32);
brightness--;
if(brightness <1)
brightness = 100;
R_BSP_SoftwareDelay(50, BSP_DELAY_UNITS_MILLISECONDS);
}
这段内容是每隔50ms就降低1%的占空比,从0~100循环,并把占空比实时显示在屏幕上。
编译、下载,将屏幕的BL线接到P206上面去。
观察屏幕,可以看到屏幕亮度逐步降低,即将为0时被重置为最高亮度。如结尾视频所示
更多回帖