【RA-Eco-RA6M4开发板评测】LM75 温度计
# 【RA-Eco-RA6M4开发板评测】LM75 温度计本文介绍了 RA-Eco-RA6M4-100PIN-V2.0 开发板通过 IIC 协议驱动 LM75 温度传感器实现环境温度检测的项目设计,包括项目介绍、工程创建、参数配置、工程调试以及效果演示等。
## 项目介绍
- 模块设计:LM75 传感器、模块 PCB 设计、原理图;
- 准备工作:硬件连接、环境搭建;
- 工程测试:工程创建、工程配置、流程图、代码、编译上传、效果演示。
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193455kyekfoag066iog6y.jpg)
## LM75 模块
LM75 是一款数字温度传感器,集成了 Delta-Sigma 模数转换器和带有 I2C 接口的过温保护功能。
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/192937kzejhqj351i5i71u.jpg)
更多参数详见:(https://www.nxp.com.cn/products/sensors/i3c-ic-digital-temp-sensors/digital-temperature-sensor-and-thermal-watchdog:LM75B) .
原理图
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/192957dkf2wooouhguoif2.jpg)
PCB 项目详见:(https://oshwhub.com/jinleili/project_icnlzyno) .
## 硬件连接
使用杜邦线连接 LM75 模块与 RA6M4-Eco 开发板;
| LM75 | RA6M4 | Note |
| ---- | ----- | ------------ |
| SDA| P400| Serial Data|
| SCL| P401| Serial Clock |
| GND| GND | Ground |
| VCC| 3V3 | Power |
使用杜邦线连接 JLINK-OB 和 RA6M4,实现工程调试、固件上传、串口通信,接线方式如下
| Jlink-OB | RA6M4 | Note |
| :------- | :--------- | :-------- |
| DIO | SWDIO | Data I/O|
| CLK | SWCLK | Clock |
| RXD | TXD (P109) | Transmite |
| TXD | RXD (P110) | Receive |
| GND | GND | Ground |
| 3V3 | VCC | Power |
实物图
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193106qbhh4vtz4dkzzd2v.jpg)
自制 JLINK-OB 工程详见:(https://oshwhub.com/jinleili/j-link-ob-gai-jin-ban) .
## 环境搭建
搭建和使用 e^2^ studio IDE 开发环境。
- 下载并安装 [瑞萨FSP (flexible software package) 灵活配置软件包](https://www.renesas.cn/zh/software-tool/flexible-software-package-fsp) ;
- 安装时注意选择 GNU ARM 工具链;
## 工程创建
- 文件 - 新建 - 瑞萨 C/C++ 项目 - `Renesas RA ` ;
- 自定义设备选择 `R7FA6M4AF3CFP` ,调试器选择 J-Link ;
- 项目创建完成后,选择进入透视图模式;
## 工程配置
工程配置包括引脚时钟配置、串口配置、IIC 配置。
### 时钟配置
根据原理图可知,板载 XTAL 晶振频率为 12MHz,需要重新配置 IDE 时钟树。
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193124gptpsxopllyppmgm.jpg)
### 串口配置
- 进入 FSP 配置界面,打开 Pins 标签页,根据原理图,板载 CH340 对应串口引脚为 P109 和 P110,因此将 SCI9 配置为异步串口模式;
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193141k4yqigj8yexyqpyt.jpg)
- 打开 `Stacks` 标签页,新建串口通信堆栈 `New Stack` - `Connectivity` - `UART (r_sci_uart)` ;
- 串口属性配置,General 标签下的 Channel 改为 9,名称改为 `g_uart9`,中断回调函数命名为 `user_uart9_callback`;
- 进入 BSP 标签页,配置 RA Common 属性,RA Common 标签下的 Heap size 改为 `0x2000`;
详见:[瑞萨RA-Eco-RA6M4评测 - 介绍、环境搭建、工程测试](//m.qjumbo.com/forum/thread-235881-1-1.html) .
### IIC 配置
- 打开 `Stacks` 标签页,新建硬件 IIC 总线堆栈 `New Stack` - `Connectivity` - `IIC Master (r_iic_master)` ;
- IIC 属性配置,Module 标签下的 Channel 设置为 0,名称为 `g_i2c_master0`,地址 `0x48`,中断回调函数命名为 `IIC_master_callback`;
- 检查引脚定义 SCL0 对应 P400,SDA0 对应 P401 ;
- 点击 `Generate Project Content` ;
- 右键项目文件夹,构建工程,确认无报错;
## 流程图
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193202dpf8u7gyww0jg0gb.jpg)
## 工程代码
包括主程序和 LM75 传感器驱动程序。
### 主程序
打开 `./src/hal_entry.c` 文件,添加如下代码
```c++
#include "hal_data.h"
#include "lm75.h"
#include <stdio.h>
/********************************
* UART Configurations
* see
* //m.qjumbo.com/forum/thread-235881-1-1.html
* for details
********************************/
// I2C Callback
i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
void IIC_master_callback(i2c_master_callback_args_t *p_args)
{
i2c_event = I2C_MASTER_EVENT_ABORTED;
if (NULL != p_args)
{
i2c_event = p_args->event;
}
}
void hal_entry(void)
{
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
float temp = 0.0f;
printf("===== System Start =====\r\n");
while(1)
{
printf("Try LM75 Init ...\r\n");
err = LM75_Init();
if(FSP_SUCCESS == err)
{
printf("LM75 init success!\r\n");
while(1)
{
err = LM75_ReadTemp(&temp);
if(FSP_SUCCESS == err)
{
printf("LM75 Temp: %.2f ℃\r\n", temp);
}
else
{
printf("LM75 read error, err = %d\r\n", err);
}
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}
}
else
{
printf("LM75 init failed! err = %d, retry after 1s...\r\n", err);
R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);
}
}
}
```
保存文件。
### 驱动程序
在 `./src` 文件夹新建 `lm75.h` 驱动头文件,
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193225x3l4aat3j4b3bqki.jpg)
添加如下代码
```c++
#ifndef LM75_H
#define LM75_H
#include "hal_data.h"
#include <stdint.h>
#define LM75_ADDR 0x48
#define LM75_TEMP_REG 0x00
#define LM75_CONF_REG 0x01
#define LM75_THYST_REG0x02
#define LM75_TOS_REG 0x03
extern const i2c_master_instance_t g_i2c_master0;
#define I2C_HANDLEg_i2c_master0.p_ctrl
fsp_err_t LM75_ReadReg(uint8_t reg, uint8_t *p_buf, uint8_t len);
fsp_err_t LM75_GetTemperature(float *temp);
#define LM75_ReadTemp LM75_GetTemperature
fsp_err_t LM75_Init(void);
#endif
```
保存文件。
同理,新建 `lm75.c` 驱动源文件,并添加如下代码
```c++
#include "lm75.h"
#include <string.h>
// 带超时等待I2C传输完成
static fsp_err_t iic_wait_transfer_timeout(uint32_t timeout_ms)
{
uint32_t tick = 0;
fsp_err_t err;
while (1)
{
err = R_IIC_MASTER_StatusGet(I2C_HANDLE, NULL);
if (FSP_SUCCESS == err)
{
break;
}
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
tick++;
if (tick >= timeout_ms)
{
return FSP_ERR_TIMEOUT;
}
}
return FSP_SUCCESS;
}
fsp_err_t LM75_ReadReg(uint8_t reg, uint8_t *p_buf, uint8_t len)
{
fsp_err_t err = FSP_SUCCESS;
// 发送寄存器地址
err = R_IIC_MASTER_Write(I2C_HANDLE, ®, 1, false);
if (FSP_SUCCESS != err)
return err;
err = iic_wait_transfer_timeout(100);
if(FSP_SUCCESS != err)
return FSP_ERR_TIMEOUT;
// 读取数据
err = R_IIC_MASTER_Read(I2C_HANDLE, p_buf, len, true);
if (FSP_SUCCESS != err)
return err;
err = iic_wait_transfer_timeout(100);
if(FSP_SUCCESS != err)
return FSP_ERR_TIMEOUT;
return FSP_SUCCESS;
}
fsp_err_t LM75_GetTemperature(float *temp)
{
fsp_err_t err;
uint8_t temp_data;
int16_t raw_temp;
err = LM75_ReadReg(LM75_TEMP_REG, temp_data, 2);
if (FSP_SUCCESS != err)
{
return err;
}
raw_temp = (int16_t)((temp_data << 8) | temp_data);
*temp = (float)raw_temp / 2.0f;
return FSP_SUCCESS;
}
fsp_err_t LM75_Init(void)
{
fsp_err_t err;
uint8_t conf = 0;
err = LM75_ReadReg(LM75_CONF_REG, &conf, 1);
return err;
}
```
保存文件。
## 工程编译
- 右键项目文件夹,选择 `属性` ,进入 `C/C++ 构建` - `设置` 选项;
- 进入 `GNU Arm Cross Create Flash Image - General` 选项;
- 在输出格式中选择 `Intel HEX` ,应用并关闭;
- 右键项目文件夹,构建工程,确认无报错;
- 查看工程目录下的 `Debug` 文件夹,生成相应的 HEX 格式的固件;
## 固件上传
开发板支持串口烧录、J-Link、EZ-Cube 调试器烧录等,这里使用 JLINK-OB 调试工程。
- 点击工具栏的小虫子 Debug 按钮,进入调试界面;
- 或右键项目文件夹,选择调试配置,选中当前项目对应的 elf 文件,调试工具为 JLINK,开始调试;
- 进入调试界面,点击菜单栏的运行按钮,程序开始执行;
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193243mdy7ipovad00oohy.jpg)
使用 USB 烧录固件的方案详见:[瑞萨RA-Eco-RA6M4评测 - 介绍、环境搭建、工程测试](//m.qjumbo.com/forum/thread-235881-1-1.html) .
## 效果演示
- 运行串口调试助手软件,连接 Jlink CDC 虚拟串口,配置波特率等参数;
- 打开串口,接收 LM75 温度数据;
!(//m.qjumbo.com/forum/data/attachment/forum/202607/20/193257yj6v9s94jr7jzl6r.jpg)
## 总结
本文介绍了 RA-Eco-RA6M4-100PIN-V2.0 开发板通过 IIC 协议驱动 LM75 温度传感器实现环境温度检测的项目设计,包括项目介绍、工程创建、参数配置、工程调试以及效果演示等,为相关产品的开发设计提供了参考。
页:
[1]