eefocus_4062187 发表于 2026-7-20 19:35:11

【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, &reg, 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]
查看完整版本: 【RA-Eco-RA6M4开发板评测】LM75 温度计

Baidu
map