文章来源 Cytech Engineer

瑞萨 RX23E-A MCU UART 和 ADC 调试经验分享

背景介绍

瑞萨 RX23E-A 系列微控制器配备模拟前端,无需校准即可测量温度、压力、流量和重量,精度优于 0.1%,是高精度传感、测试和测量设备的理想之选。CPU 配备 RXv2 内核,在 DSP/FPU 运行中表现卓越,可以单芯片实现高精度测量、控制和通信。

瑞萨 RX23E-A MCU 特性

  • 双 24 位 delta sigma 模数转换器:高达 23 位的有效分辨率,可编程数据速率为 7.6sps 至 15,625ksps
  • PGA:轨到轨模拟输入,增益 1 至 128 倍,失调漂移 10nV/°C,增益漂移 1ppm/°C
  • 基准电压源:10ppm/°C 的低温漂特性,具有良好的温度稳定性
  • 励磁电流源:匹配可编程电流源
  • CPU:32 位 RXv2 (32MHz)
  • 数字信号处理的 DSP/FPU
  • 接口:SPI x 1 通道、UART x 4 通道、I2C x 1 通道、CAN x 1 通道
  • 可以直接连接传感器,如 PT100、扩散硅压力传感器

下图 (图1) 为瑞萨 RX23E-A MCU 的系统框图:

图1 瑞萨 RX23E-A MCU 系统框图
图1 瑞萨 RX23E-A MCU 系统框图

调试步骤

一、新建工程文件

如下图 (图2) 所示,打开 e2studio,添加 RX23E-A_UART_ADC 工程文件。 

图2 新建 RX23E-A_UART_ADC 工程文件
图2 新建 RX23E-A_UART_ADC 工程文件

创建完成后,对该工程进行编译,同时需确保编译无错误,具体操作如下图 (图3) 所示:

图3 编译工程文件
图3 编译工程文件

二、配置串口

首先打开左侧资源管理器中的 RX23EA UART ADC.scfg 文件,选中该文件 Components 功能区后,点击下图 (图4) 中第 3 个红色方框内标记的 button 以打开 Software Component Selection:

图4 打开 Software Component Selection
图4 打开 Software Component Selection

接下来根据下图 (图5) 的步骤,从可选的组件中选择 SCI/SCIF Asynchronous Mode,为新组件添加新配置,选择“SCI1”模块。

图5 Add new configuration for selected component
图5 Add new configuration for selected component

完成以上操作后,配置串口参数,具体参数可参考下图 (图6):

图6 配置串口参数
图6 配置串口参数

配置完成后,点击“Generate Code”生成代码。回到 RX23E-A_UART_ADC 工程文件即可看到串口文件,如下图 (图7) 所示:

图7 生成的串口文件
图7 生成的串口文件

接下来打开 Config_SCI1_user.c 文件,在下图 (图8) 所标记箭头处添加代码,相应的注意事项请参考图内说明。

图8 添加代码
图8 添加代码

下图 (图9) 为代码添加成功后的显示信息界面:

图9 添加代码成功示意图
图9 添加代码成功示意图

在使用 printf 函数进行串口打印前,我们需要对串口重定向,具体步骤如下图 (图10):

图10 串口重定向
图10 串口重定向

具体代码如下:

#include "r_smc_entry.h"
#include "platform.h"


void main(void);

extern volatile uint8_t g_sci1_tx_end;
void my_sw_charput_function(char output_char);



void main(void)
{
R_Config_SCI1_Start();//串口初始化



while(1)
{


printf(" Renesas RX23E-A MCU \r\n");
}
}


//串口重定向
void my_sw_charput_function(char output_char)
{
R_Config_SCI1_Serial_Send((uint8_t *) &output_char,1);
while(g_sci1_tx_end == false);
g_sci1_tx_end = false;


}

接下来对工程进行编译,确认无错误后进行烧录,烧录完成后开始运行,如下图 (图11) 所示:

图11 工程编译、烧录及运行步骤
图11 工程编译、烧录及运行步骤

完成上述操作后,使用 printf 函数进行串口打印,串口打印信息如下图 (图12):

图12 串口打印信息
图12 串口打印信息

下图 (图13) 为 RX23E-A 串口配置成功硬件连接示意图:

图13 RX23E-A 串口配置成功
图13 RX23E-A 串口配置成功

三、配置 24bit ADC

像前面配置串口一样,点击左侧资源管理器中的 RX23EA UART ADC.scfg 文件,选择该文件 Components 功能区后打开 Software Component Selection,选择“DSAD0”模块。

图14 选择 DSAD0 模块
图14 选择 DSAD0 模块

接下来设置 ADC 的采样率、通道数等参数,各参数如下图 (图15) 所示。在配置完成后点击界面右上方“Generate Code”即可生成代码。

图15 设置 ADC 的采样率、通道数等参数
图15 设置 ADC 的采样率、通道数等参数

生成 ADC 代码后,打开工程文件,在 Config_DSAD0.h 添加如下代码:

bool r_dsad0_IsConversionEnd (void);
void r_dsad0_ClearIrFlag (void);

在 Config_DSAD0.c 文件下面添加如下代码:

bool r_dsad0_IsConversionEnd (void)
{
return (bool) ((1U == IR(DSAD0, ADI0)) ? true : false);
}
void r_dsad0_ClearIrFlag (void)
{
IR(DSAD0, ADI0)= 0U;
}

ADC 配置完成,在主函数页面添加如下图 (图16) 代码:

图16 主函数下的代码
图16 主函数下的代码

完整代码如下:

/***********************************************************************
*
* FILE : RX23EA_UART_ADC.c
* DATE : 2024-10-24
* DESCRIPTION : Main Program
*
* NOTE:THIS IS A TYPICAL EXAMPLE.
*
***********************************************************************/
#include "r_smc_entry.h"
#include "platform.h"

void main(void);
extern volatile uint8_t g_sci1_tx_end;
void my_sw_charput_function(char output_char);
//bool timer_flag = false;

void main(void)
{
uint32_t dsad0_reg; /**DSAD0.DR register storage variable */
float ADC_Data0_0,ADC_Data0_1,ADC_Data0_2,ADC_Data0_3,ADC_Data0_4,ADC_Data0_5;
int32_t dsad0_value_0,dsad0_value_1,dsad0_value_2,dsad0_value_3,dsad0_value_4,dsad0_value_5;

R_Config_SCI1_Start();//串口初始化
R_Config_DSAD0_Start();//ADC初始化
R_Config_DSAD0_Set_SoftwareTrigger();//软件触发方式

while(1)
{
r_dsad0_ClearIrFlag(); /** clear DSAD0 IR flag*/

if(DSAD0.DR.BIT.CCH == 0x01) //Channel 1 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_0 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_0 = dsad0_value_0 * (5.0)/8388608;
}

if(DSAD0.DR.BIT.CCH == 0x02) //Channel 2 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_1 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_1 = dsad0_value_1 * (5.0)/8388608;
}
if(DSAD0.DR.BIT.CCH == 0x03) //Channel 3 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_2 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_2 = dsad0_value_2 * (5.0)/8388608;
}
if(DSAD0.DR.BIT.CCH == 0x04) //Channel 4 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_3 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_3 = dsad0_value_3 * (5.0)/8388608;
}
if(DSAD0.DR.BIT.CCH == 0x05) //Channel 5 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_4 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_4 = dsad0_value_4 * (5.0)/8388608;
}
if(DSAD0.DR.BIT.CCH == 0x06) //Channel 6 data
{
/** Get A/D value */
R_Config_DSAD0_Get_ValueResult( &dsad0_reg);
/** Flag mask, Sign extension */
dsad0_value_5 = (int32_t) ((dsad0_reg & 0x00FFFFFFU) <<8) >> 8;
ADC_Data0_5 = dsad0_value_5 * (5.0)/8388608;
}
printf("Channel_1 = %f \r\n",ADC_Data0_0);
printf("Channel_2 = %f \r\n",ADC_Data0_1);
printf("Channel_3 = %f \r\n",ADC_Data0_2);
printf("Channel_4 = %f \r\n",ADC_Data0_3);
printf("Channel_5 = %f \r\n",ADC_Data0_4);
printf("Channel_6 = %f \r\n",ADC_Data0_5);
R_BSP_SoftwareDelay((uint32_t)100, BSP_DELAY_MILLISECS);
//printf(" Renesas RX23E-A MCU \r\n");
}
}

//串口重定向
void my_sw_charput_function(char output_char)
{
R_Config_SCI1_Serial_Send((uint8_t *) &output_char,1);
while(g_sci1_tx_end == false);
g_sci1_tx_end = false;
}

代码添加完毕后,可点击如下图 (图17) 所示界面图标进行编译代码:

图17 编译代码
图17 编译代码

四、烧录程序

最后烧录程序。烧录成功后,可以给 RX23E-A 模拟输入口给一个模拟量,测试一下 ADC 性能。我们以 ADC0 (1-6 通道) 为例,硬件连接如下图 (图18) 所示:

图18 ADC0 (1-6 通道) 硬件连接
图18 ADC0 (1-6 通道) 硬件连接

分别为 6 个通道设置的电压值如下表:

通道第一通道第二通道第三通道第四通道第五通道第六通道
电压值4.35V3.64V2.91V2.18V1.45V0.73V

实测结果 (用串口打印) 如下图 (图19) 所示:

图19 实测结果
图19 实测结果

总结

本文主要介绍瑞萨 RX23E-A 这款 MCU 的串口和 ADC 调试方法。欲了解更多瑞萨相关方案或技术信息,可点击下方「联系我们」,提交您的需求,骏龙科技公司愿意为您提供更详细的技术解答。

 

更多信息: