一、新建工程
我们点击左上角的“文件”->“新建”->“Renesas C/C++ Project”->“Renesas RA”,来开始新建一个瑞萨RA系列MCU的工程。

在弹出的界面中点击选中这个选项“Renesas RA C/C++ Project”,然后点“下一步”按钮。
新工程名字取名为
“led_project”,然后点击“下一步”按钮。

进入到工程选项界面,我们需要在这里选择 FSP 库版本、板子型号、设备(MCU)型号, 还有所使用的编程语言,还要在下方的“Toolchains”和“Debugger”栏里分别选择编译器和调试器。

这里默认选择
“Flat (Non-TrustZone) Project” 即可。然后点“下一步”。

选择
“Bare Metal - Minimal”, “Code Genera
tion Settings”那里默认勾上“Use Renesas Code Formatter”,然后点“完成”即可。 “Use Renesas Code Formatter”是 e2 studio 内置的一个代码格式化小工具, 它会自动地为我们编写的代码进行格式化,不用的话也可以取消勾选。

这是一个询问我们是否打开 FSP 库配置界面(透视图)的对话框,我们点击
“打开透视图” 按钮确认打开。 然后我们再把欢迎页面关掉之后,就会显示如下图所示的透视图界面。

二、电压检测器功能实现(SLCDC和ADC)
2.1 配置和初始化 ADC 模块
/* 初始化ADC */void adc_init(void){ fsp_err_t err = FSP_SUCCESS; /* 打开ADC模块 */ err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); assert(FSP_SUCCESS == err); /* 配置ADC通道 */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert(FSP_SUCCESS == err);}2.2 配置和初始化 SLCDC 模块
/* 初始化SLCDC */void slcdc_init(void){ fsp_err_t err = FSP_SUCCESS; /* 打开SLCDC模块 */ err = R_SLCDC_Open(&g_slcdc0_ctrl, &g_slcdc0_cfg); assert(FSP_SUCCESS == err); /* 启动SLCDC */ err = R_SLCDC_Start(&g_slcdc0_ctrl); assert(FSP_SUCCESS == err);}2.3
数据采集模块/* 读取ADC并计算电压值 */float adc_read_voltage(void){ fsp_err_t err = FSP_SUCCESS; uint16_t adc_value = 0; float voltage = 0.0f; /* 开始ADC扫描 */ err = R_ADC_ScanStart(&g_adc0_ctrl); assert(FSP_SUCCESS == err); /* 等待ADC转换完成 */ while (true) { adc_info_t info; err = R_ADC_InfoGet(&g_adc0_ctrl, &info); assert(FSP_SUCCESS == err); if (0 != (info.state & ADC_STATE_SCAN_COMPLETE)) { break; } } /* 读取ADC值 */ err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_value); assert(FSP_SUCCESS == err); /* 停止ADC扫描 */ err = R_ADC_ScanStop(&g_adc0_ctrl); assert(FSP_SUCCESS == err); /* 计算实际电压值 (考虑分压
电路) */ voltage = (float)adc_value * (ADC_VREF / ADC_RESOLUTION) * VOLTAGE_DIVIDER_RATIO; return voltage;}
2.4 显示模块
/* 在LCD上显示电压值 */void display_voltage(float voltage){ fsp_err_t err = FSP_SUCCESS; /* 格式化电压值为字符串 */ snprintf(lcd_buffer, sizeof(lcd_buffer), "V: %.2fV", voltage); /* 在LCD上显示 */ err = R_SLCDC_StringWrite(&g_slcdc0_ctrl, lcd_buffer, 0, 0); assert(FSP_SUCCESS == err);}
2.5 主循环模块
void hal_entry(void){ /* 初始化ADC和SLCDC */ adc_init(); slcdc_init(); while (1) { /* 读取电压值 */ float voltage = adc_read_voltage(); /* 在LCD上显示电压值 */ display_voltage(voltage); /* 延时一段时间 */ R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS); }}
三、
运行结果