【瑞萨RA6E2地奇星开发板试用】驱动 TEMT6000 环境光传感器
本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计。
项目介绍
RA6E2 地奇星是一款基于100MHz Arm® Cortex®-M33 内核架构的核心板,主控芯片为 R7FA6E2BB3CNE;
项目包括
- 串口配置:使能 SCI9 异步串口通信功能,实现串口测试;
- ADC 配置:使能 AN000 通道 ADC 功能,并配置引脚、传感器、扫描频率、回调函数等;
- TEMT6000 驱动:通过计算获得环境光照强度数据并串口打印。
硬件连接
包括 JLINK 调试器、DHT11 模块、串口模块。
| RA6E2 |
J-Link |
Note |
|---|
| SWCLK |
SCL |
Serial Clock |
| SWDIO |
SDA |
Serial Data |
| GND |
GND |
Ground |
| 3V3 |
3V3 |
Power |
| RA6E2 |
TEMT6000 |
Note |
|---|
| P000 |
OUT |
Analog Output |
| 3V3 |
VCC |
Power |
| GND |
GND |
Ground |
| RA6E2 |
J-Link |
Note |
|---|
| TXD (P109) |
RX |
Transmit |
| RXD (P110) |
TX |
Receive |
| GND |
GND |
Ground |
实物图

动态展示见顶部视频。
串口配置
介绍了板载 USB 串口打印字符串的项目设计,以测试 UART 输出功能。
工程创建
- 打开 e^2^ studio 软件;
- 依次点击
文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA ;
- 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择
R7FA6E2BB3CNE ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ;
- 完成工程创建 ;
- 进入 FSP 配置界面,打开 Pins 标签页,根据原理图或开发板丝印,将 P109 和 P110 引脚分别配置为 TXD9 和 RXD9 串口模式;
- 新建串口通信堆栈
New Stack - Connectivity - UART (r_sci_uart) ;
- 串口属性配置,中断和回调函数
user_uart_callback 设置;
- 进入 BSP 标签页,配置 RA Common 属性,配置内存空间
0x2000 ;
- 点击
Generate Project Content 按钮,生成工程代码。
详见:【瑞萨RA6E2】ADC 电压温度计 .
ADC 配置
在完成前面关于 UART 串口创建的基础上,进一步实现 ADC 项目的添加。
- 进入 Stacks 标签页,新建 ADC 堆栈
New Stack - Analog - ADC (r_adc) ;
属性配置
- Input 选项下勾选 Channel 0 ;
- 中断配置 - Interrupts - Callback 值修改为 adc_callback - 优先级设置为 Priority 2 ;
- 引脚 Pins 开启 AN000 对应 P000 引脚;
ADC 及串口配置完成后,
- 点击
Generate Project Content ,构建工程。
代码
修改 .../src/hal_entry.c 主程序,代码如下
#include "hal_data.h"
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)
{
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
while(1)
{
uint16_t adc_data0=0;
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0);
assert(FSP_SUCCESS == err);
printf("P000(AN0)=%d\\n",adc_data0);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
}
}
保存代码,编译工程并调试。
效果
- JLINK CDC UART 接收端连接开发板串口发送端 P109;
- 运行串口调试助手,配置端口号、波特率等参数;
- 打开串口,即可接收 ADC 原始值和 MCU 温度数据;

TEMT6000 光感
TEMT6000 环境光(可见光)传感器,对可见光照度的反应特性与人眼的特性类似,可以模拟人对环境光线的强度的判断,从而方便做出与人友好互动的应用。

原理
通过 RA6E2 板载 ADC 功能读取 TEMT6000 模块模拟输出引脚的电压,获取环境光强度。

代码
while(1)
{
uint16_t adc_raw=0;
int32_t temp_c = get_temperature_c();
float volt=0;
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw);
assert(FSP_SUCCESS == err);
volt = (float)(adc_raw *3.3/4096);
printf("P000(AN0) = %d, Temp: %ld ℃, Voltage: %.2f\\n", adc_raw, temp_c, volt);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay (950, BSP_DELAY_UNITS_MILLISECONDS);
}
保存代码,编译工程并调试。
效果
- 运行串口调试助手,配置端口号、波特率等参数;
- 打开串口,即可接收 ADC 电压和 TEMT6000 光感数据;

动态效果见底部视频。
总结
本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计,为相关产品的快速开发和应用设计提供了参考。