瑞萨单片机论坛
直播中

大雨淅淅

8年用户 109经验值
擅长:嵌入式技术 接口/总线/驱动 控制/MCU RF/无线
私信 关注
[经验]

【RA4L1-SENSOR】e2 studio新建工程+电压检测器实验(SLCDC和ADC)

一、新建工程
我们点击左上角的“文件”->“新建”->“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 Generation 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);    }}
三、运行结果




更多回帖

发帖
×
20
完善资料,
赚取积分