前期回顾
瑞萨RA MCU众测宝典 | 手把手搞定瑞萨FPB-RA0E2驱动OLED显示 |
本文介绍了瑞萨FPB-RA0E2开发板实现串口打印ADC值和电压值的项目设计。
一
项目介绍
串口通信测试:串口printf重定向,打印字符串;
串口输出ADC采集数值并实现电压转换。
二
串口输出
介绍了通过板载J-Link虚拟串口打印字符串的项目设计,以测试UART输出功能。
工程创建
打开e2studio软件,依次选择:文件-新建-C/C++-RA项目;
设备选择:Board-选择FPB-RA0E2,选择正确的工具链和调试器,点击下一步。

进入工程配置界面:

进入Stacks标签页,新建串口通信堆栈New Stack-Connectivity-UART(r_uarta);

串口属性配置:

进入BSP标签页,配置RA Common属性,修改Heap size(bytes)值为0x2000;
点击Generate Code按钮,生成工程代码。
工程代码
在左侧的项目目录中,打开src/hal_entry.c文件,添加如下关键代码:
滑动查看完整内容
#include"hal_data.h"#include
FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_t event);FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;volatilebool uart_send_complete_flag = false;voiduarta_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_UARTA_Write(&g_uarta_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 { __io_putchar(*pBuffer++); }return size;}
voidhal_entry(void){/* TODO: add your own code here */ err = R_UARTA_Open(&g_uarta_ctrl, &g_uarta_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}
保存文件,右键项目-构建程序;
右键项目-调试项目-上传固件至开发板。

测试效果
TypeC-USB数据线连接开发板串口和电脑;
打开串口调试助手,配置对应的波特率等参数;
打开串口,即可接收芯片发送的字符串。

三
ADC配置
介绍了ADC模数转换配置、串口打印ADC原始数值、ADC电压转换的项目设计流程。
工程创建
在前面串口打印项目的基础上,进一步添加ADC配置。
进入Stacks标签页,新建ADC堆栈New Stack-Analog-ADC(r_adc_d);
选中ADC堆栈,进入属性标签及参数配置。

Input选项下,通道模式为扫描,输入通道可根据开发板Arduino扩展接口选择;

如模拟输入引脚A0对应Channel 7,即P015,Pins选项中需开启AN007并将P015管脚配置为模拟输出模式;
中断配置,Interrupts-Callback值修改为adc_callback,优先级设置为Priority 2;
引脚Pins开启AN007对应P015引脚;
配置完成后,点击Generate Project Content,构建工程。
工程代码
在左侧的项目目录中,打开src/hal_entry.c文件,添加如下关键代码:
滑动查看完整内容
#include"hal_data.h"#include
FSP_CPP_HEADERvoidR_BSP_WarmStart(bsp_warm_start_event_t event);FSP_CPP_FOOTER
fsp_err_t err = FSP_SUCCESS;volatilebool uart_send_complete_flag = false;voiduarta_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_UARTA_Write(&g_uarta_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 { __io_putchar(*pBuffer++); } return size;}
/*------------- ADC callback -------------*/volatilebool scan_complete_flag = false;voidadc_callback(adc_callback_args_t * p_args){ FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true;}
voidhal_entry(void){ /* TODO: add your own code here */ err = R_UARTA_Open(&g_uarta_ctrl, &g_uarta_cfg); assert(FSP_SUCCESS == err); //printf("hello world!\n");
/* Initializes the module. */ err = R_ADC_D_Open(&g_adc_ctrl, &g_adc_cfg); /* Handle any errors. This function should be defined by the user. */ assert(FSP_SUCCESS == err);
/* Enable channels. */ err = R_ADC_D_ScanCfg(&g_adc_ctrl, &g_adc_channel_cfg); assert(FSP_SUCCESS == err);
while(1) { uint16_t adc_data0=0; double a0; /* Enable scan triggering from ELC events. */ (void) R_ADC_D_ScanStart(&g_adc_ctrl); scan_complete_flag = false; while (!scan_complete_flag) { /* Wait for callback to set flag. */ }
err = R_ADC_D_Read(&g_adc_ctrl, ADC_CHANNEL_7, &adc_data0); assert(FSP_SUCCESS == err); a0 = (double)(adc_data0/4095.0)*3.3; // define voltage formula printf("P015(AN007)=%d, voltage=%f\n",adc_data0,a0);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS); }#if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter();#endif}
保存文件,右键项目-构建程序,
右键项目-调试项目-上传固件至开发板。
测试效果
TypeC-USB数据线连接开发板串口和电脑;
打开串口调试助手,配置对应的波特率等参数;
打开串口,即可接收芯片采集的ADC数值和转换电压值。

四
总结
本文介绍了瑞萨FPB-RA0E2开发板实现串口打印ADC值和电压值的项目设计,为后续开发和实时显示ADC电压做好铺垫,也为瑞萨相关产品的快速开发和应用提供了参考。
全部0条评论
快来发表一下你的评论吧 !