瑞萨RA MCU众测宝典 | 手把手搞定瑞萨FPB-RA0E2串口打印ADC电压

描述

 

前期回顾

瑞萨RA MCU众测宝典 | 手把手搞定瑞萨FPB-RA0E2驱动OLED显示


 

本文介绍了瑞萨FPB-RA0E2开发板实现串口打印ADC值和电压值的项目设计。


 

项目介绍


 

串口通信测试:串口printf重定向,打印字符串;

串口输出ADC采集数值并实现电压转换。
 


 

串口输出


 

介绍了通过板载J-Link虚拟串口打印字符串的项目设计,以测试UART输出功能。


 

工程创建


 

打开e2studio软件,依次选择:文件-新建-C/C++-RA项目;

设备选择:Board-选择FPB-RA0E2,选择正确的工具链和调试器,点击下一步。


 

mcu


 

进入工程配置界面:

mcu


 

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

mcu


 

串口属性配置:

mcu


 

进入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}
 


 

保存文件,右键项目-构建程序;

右键项目-调试项目-上传固件至开发板。

mcu


 

测试效果

TypeC-USB数据线连接开发板串口和电脑;

打开串口调试助手,配置对应的波特率等参数;

打开串口,即可接收芯片发送的字符串。

mcu


 

ADC配置


 

介绍了ADC模数转换配置、串口打印ADC原始数值、ADC电压转换的项目设计流程。


 

工程创建

在前面串口打印项目的基础上,进一步添加ADC配置。


 

进入Stacks标签页,新建ADC堆栈New Stack-Analog-ADC(r_adc_d);

选中ADC堆栈,进入属性标签及参数配置。

mcu


 

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

mcu


 

如模拟输入引脚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数值和转换电压值。

mcu


 

总结


 

本文介绍了瑞萨FPB-RA0E2开发板实现串口打印ADC值和电压值的项目设计,为后续开发和实时显示ADC电压做好铺垫,也为瑞萨相关产品的快速开发和应用提供了参考。


 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分