【RA-Eco-RA2T1开发板】心率监测仪

【RA-Eco-RA2T1开发板】心率监测仪

本文介绍了 RA-Eco-RA2T1-48PIN-V1.0 开发板结合心率传感器模块,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、工程配置、代码、流程图、效果演示等。

项目介绍

  • 准备工作:心率传感器模块、硬件连接、环境搭建;

  • 工程测试:工程创建、工程配置、流程图、代码、编译上传、效果演示。

心率传感器

心率传感器,采用光电容积脉搏波描记法,通过测量血液中血红蛋白随心脏跳动而对氧气吸收的变化量来测量人体心率参数。

  • 具有响应快,性能稳定,适应性强等特点。

  • 模块拥有方波和脉搏波两种信号输出模式,可以通过板载开关去自由切换输出信号。

  • 脉搏波将输出一个连续的心率波形,而方波将根据心率的变化输出对应的方波。

  • 心率传感器体积小巧,可以佩戴于手指、手腕等检测位置。

硬件连接

连接心率传感器模块和 RA2T1 开发板

心率传感器RA2T1Note
SignalP013 (AN000)Data
GNDGNDGround
VCC3V3Power

使用杜邦线连接 JLINK-OB 和 RA2T1,实现工程调试、固件上传、串口通信,接线方式如下

Jlink-OBRA2T1Note
DIOSWDIOData I/O
CLKSWCLKClock
RXDTXD (P109)Transmite
TXDRXD (P110)Receive
GNDGNDGround
3V3VCCPower

实物图

环境搭建

搭建和使用 e2studio IDE 开发环境。

  • 下载并安装 瑞萨FSP (flexible software package) 灵活配置软件包 ;

  • 安装时注意选择 GNU ARM 工具链;

工程创建

  • 文件 - 新建 - 瑞萨 C/C++ 项目 -Renesas RA

  • 自定义设备选择R7FA2T1074CFL,调试器选择 J-Link ;

  • 项目创建完成后,选择进入透视图模式;

工程配置

工程配置包括引脚 GPIO 配置、时钟配置、串口配置、ADC 配置。

引脚配置

  • 进入 FSP 配置界面,打开 Pins 标签页,使能 Peripherals - Analog:ADC - ADC0,操作模式为自定义;

  • 选择输入引脚 AN000 - P013;

时钟配置

根据原理图可知,板载 XTAL 晶振频率为 20MHz;

这里使用 HOCO 内部晶振,时钟树保持默认配置。

串口配置

  • 进入 FSP 配置界面,打开 Pins 标签页,根据原理图,板载 CH340 对应串口引脚为 P109 和 P110,因此将 SCI9 配置为异步串口模式;

  • 打开Stacks标签页,新建串口通信堆栈New Stack-Connectivity-UART (r_sci_uart)

  • 串口属性配置,General 标签下的 Channel 改为 9,名称改为g_uart9,中断回调函数命名为user_uart9_callback

  • 进入 BSP 标签页,配置 RA Common 属性,RA Common 标签下的 Heap size 改为0x2000

ADC 配置

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

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

  • 在 Input 选项下,通道模式为 Scan,勾选Temperature Sensor选项;

  • 中断配置,Interrupts-Callback值修改为user_adc0_callback,优先级设置为Priority 2,触发源为软件 ;

  • 点击Generate Project Content

  • 右键项目文件夹,构建工程,确认无报错;

流程图

工程代码

打开./src/hal_entry.c文件,添加如下代码

#include "hal_data.h" #include <stdio.h> #include "hc595.h" fsp_err_t err = FSP_SUCCESS; volatile bool uart_send_complete_flag = false; void user_uart9_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; } /*------------- ADC callback -------------*/ volatile bool scan_complete_flag = false; void uaser_adc0_callback (adc_callback_args_t * p_args) { FSP_PARAMETER_NOT_USED(p_args); scan_complete_flag = true; } /* -------- ADC raw & voltage -------- */ static void get_adc_voltage(uint16_t *p_raw, float *p_volt) { uint16_t adc_raw; /* 1. 启动 ADC 并等待完成 */ R_ADC_ScanStart(&g_adc0_ctrl); adc_status_t status = { .state = ADC_STATE_SCAN_IN_PROGRESS }; while (status.state == ADC_STATE_SCAN_IN_PROGRESS) { R_ADC_StatusGet(&g_adc0_ctrl, &status); } /* 2. 读adc通道原始码值 */ err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw); assert(FSP_SUCCESS == err); /* 3. ADC 电压转换 */ float volt = (float)(adc_raw/4095.0)*3.3; /* 4. 返回数据 */ *p_raw = adc_raw; *p_volt = volt; } void hal_entry(void) { /* Initializes UART */ 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); assert(FSP_SUCCESS == err); while(1) { uint16_t adc_raw; float volt; get_adc_voltage(&adc_raw, &volt); printf("{\"adc\": %u, \"volt\": %.3f}\r\n",adc_raw,volt); R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS); } }

保存文件。

工程编译

  • 右键项目文件夹,选择属性,进入C/C++ 构建-设置选项;

  • 进入GNU Arm Cross Create Flash Image - General选项;

  • 在输出格式中选择Intel HEX,应用并关闭;

  • 右键项目文件夹,构建工程,确认无报错;

  • 查看工程目录下的Debug文件夹,生成相应的 HEX 格式的固件;

固件上传

开发板支持串口烧录、J-Link、EZ-Cube 调试器烧录等,这里使用 JLINK-OB 调试工程。

  • 点击工具栏的小虫子 Debug 按钮,进入调试界面;

  • 或右键项目文件夹,选择调试配置,选中当前项目对应的 elf 文件,调试工具为 JLINK,开始调试;

  • 进入调试界面,点击菜单栏的运行按钮,程序开始执行;

效果演示

  • 打开网页串口绘图工具: 高性能WebSerial串口绘图工具 ;
  • 配置参数,连接串口,开始采集;

  • 根据串口数据绘图结果,可获取心电图。

总结

本文介绍了 RA-Eco-RA2T1-48PIN-V1.0 开发板结合心率传感器模块,通过 ADC 电压采样、心率计算、串口通信,实现心率监测的项目设计,包括环境搭建、工程配置、代码、流程图、效果演示等,为相关产品的快速开发和应用设计提供了参考。