【RA-Eco-RA2L1-48PIN】ADC 电压表
本文介绍了 RA-Eco-RA2L1-48PIN 开发板通过瑞萨 e2 Studio 灵活软件包(FSP)编程实现 ADC 串口采集电压的项目设计,包括 串口通信、打印字符串、UART 和 ADC 配置、关键代码、ADC 电压转换、电压值串口打印、效果展示等流程。
项目介绍
- 使用 FSP 灵活软件包和 e2 studio 软件创建工程;
- 配置串口,实现串口printf重定向,打印 字符串;
- 进一步配置 ADC 实现 GPIO 电压信号采集和串口打印电压值。
串口通信
介绍了串口打印字符串的项目设计流程。
工程创建
-
打开 e2 studio 软件
-
依次点击
文件
-新建
-瑞萨 C/C++ 项目
-Renesas RA
-
依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择
R7FA2L1AB2DFL
,工具链选择GNU ARM Embedded
,调试器选择 J-Link -
完成工程创建
串口配置
-
设置目标串口对应的 GPIO 引脚
- 依次选择
Pins
-Peripherals
-Connectivity:SCI
-SCI9
对应 P109 (TXD9) 和 P110 (RXD9) 引脚;
- 依次选择
-
新建串口通信堆栈
New Stack
-Connectivity
-UART (r_sci_uart)
- 选中 uart 堆栈方框,打开属性标签,配置串口参数
-
属性设置:
属性
-Module g_uart9 UART (r_sci_uart)
-General
、Baud
、Interrupts
设置回调函数 -
点击
Generate Code
按钮,生成工程代码。
工程代码
工程框架创建完成后,进入左侧主函数所在文件夹,打开 src/hal_entry.c
文件,添加串口printf重定向及驱动代码
#include "hal_data.h"
#include <stdio.h>
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
// 重定向 printf 到 UART9
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE {
fsp_err_t err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if (FSP_SUCCESS != err) __BKPT();
while (uart_send_complete_flag == false) {}
uart_send_complete_flag = false;
return ch;
}
// 重定向 _write 函数(支持 printf)
int _write(int fd, char *pBuffer, int size) {
for (int i = 0; i < size; i++) {
__io_putchar(*pBuffer++);
}
return size;
}
void hal_entry(void)
{
/* TODO: add your own code here */
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
while(1)
{
printf("Hello World!\n");
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
保存代码,构建工程,调试工程。
Tips
若报错,则打开项目属性 - C/C++ 构建 - 设置 - 工具设置 - GNU Arm Cross C Linker
勾选 Use float with nano printf
选项,在 Other linker flags
填写代码 --specs=rdimon.specs
,点击 应用并关闭
,
重新构建工程即可。
工程调试
- 点击上方工具栏
小锤子
按钮(或右键工程选择调试方式
-调试配置
); - 选择
Renesas GDB Hardware Debugging
,选择构建的相应的 Flat ; - 确保调试器已正确连接,点击调试按钮,进入调试模式;
- 点击左上角绿色三角形启动按钮,再次点击启动调试;
- 打开串口调试助手,配置串口信息,打开串口,可获得相应的字符串输出。
详见:fsp5.0.0 cannot print data to UART by redirecting printf .
硬件连接
SWDIO
-> J-Link (DIO)SWCLK
-> J-Link (CLK)P109
-> J-Link (RXD)P110
-> J-Link (TXD)
这里使用 JLink-OB 调试器,详见:J-Link OB 改进版(含外壳) - 立创开源硬件平台 .
ADC 采集电压
在完成串口通信的基础上,介绍了进一步实现 ADC 电压值采集和串口发送的项目设计。
工程创建
-
设置 ADC 通道对应的 GPIO 配置
- 依次选择
Pins
-Peripherals
-Analog:ADC
-ADC0
- 右侧通道选项AN000
打开对应值P000
引脚;
- 依次选择
-
新建 ADC 堆栈
New Stack
-Analog
-ADC (r_adc)
-
属性配置
-
General 选项下设置 ADC 单次扫描
-
Input
选项下勾选Channel0
,配置中断与回调函数;
-
ADC 及串口配置完成后,构建工程,确保无误。
工程代码
#include "hal_data.h"
#include <stdio.h>
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
if(p_args->event == UART_EVENT_TX_COMPLETE)
{
uart_send_complete_flag = true;
}
}
/*------------- 串口重定向 -------------*/
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#endif
PUTCHAR_PROTOTYPE
{
err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
return ch;
}
int _write(int fd,char *pBuffer,int size)
{
for(int i=0;i<size;i++)
{
__io_putchar(*pBuffer++);
}
return size;
}
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
void hal_entry(void)
{
/* TODO: add your own code here */
/* Open the transfer instance with initial configuration. */
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
/* Initializes the module. */
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
/* Handle any errors. This function should be defined by the user. */
assert(FSP_SUCCESS == err);
/* Enable channels. */
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
while(1)
{
uint16_t adc_data0 = 0;
double a0;
/* Enable scan triggering from ELC events. */
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
/* Wait for callback to set flag. */
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0);
assert(FSP_SUCCESS == err);
a0=(double)(adc_data0/4095.0)*3.3;
printf("P510(AN0)=%d,voltage=%f\n",adc_data0,a0);
R_BSP_SoftwareDelay (500, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
保存代码,重新构建工程。
工程调试
- 点击上方工具栏
小锤子
按钮(或右键工程选择调试方式
-调试配置
); - 选择
Renesas GDB Hardware Debugging
,选择构建的相应的 Flat ; - 确保调试器已正确连接,点击调试按钮,进入调试模式;
- 点击左上角绿色三角形启动按钮,再次点击启动调试;
- 打开串口调试助手,配置串口信息,打开串口,可获得相应的字符串输出。
效果演示
- 使用 USB 转 TTL 工具或 JLink 虚拟串口连接开发板对应串口引脚
P109
-> J-Link (RXD)P110
-> J-Link (TXD)
- 打开串口调试助手,配置串口参数,打开串口,即可接收主控发送的信息。
串口打印 Hello World!
串口打印ADC值和转换电压值
硬件展示
Typora 软件绿色版制作详见:Typora-Portable 和 Typora 2025 .
总结
本文介绍了 RA-Eco-RA2L1-48PIN 开发板通过瑞萨 e2 Studio 灵活软件包(FSP)编程实现 ADC 串口采集电压的项目设计,包括 串口通信、打印字符串、UART 和 ADC 配置、关键代码、ADC 电压转换、电压值串口打印、效果展示等流程,为瑞萨单片机 串口通信和 ADC 的相关产品设计和快速应用提供了参考。