7.1 原理图分析查看ek-ra6m4的原理图,如下图所示,该开发板上的mikrobus接口上有提供一个i2c接口。
根据原理图可知,i2c1接口的两个引脚分别为:
按键sda1scl1
引脚 p511 p512
这里我们将在该i2c接口上连接 sht20 传感器(3.3v供电),实时采样当前环境的温湿度情况。
7.2 i2c接口配置首先,在fsp配置中将i2c1所用的两个gpio口配置成i2c模式。
接着选择 stacks ,点击 new stack -> connectivity -> i2c master(r_iic_master) 添加i2c master协议栈。
接下来设置i2c master的相关配置,并重新生成代码。
通过 name 字段可以修改i2c的设备名称为 g_i2c1_master,它将在ide自动生成的文件 ra_gen/hal_data.c/h 中定义i2c操作相关的变量;通过 channel 字段可以修改i2c的通道号,这里设置为1,下面的 pins 将自动选择 p511和 p512 这个引脚;通过 slava address 字段可以设置i2c从设备的地址,其中sht20 的从设备地址为 0x40;通过 callback 字段设置i2c收发的中断回调函数,它将配置在 g_i2c1_master_cfg 变量中,该函数需要我们自己实现;在这里我们也可以修改i2c中断的优先级为2级别;7.3 源码修改创建sht20温湿度传感器操作相关的头文件 src/bsp_sht20.h 如下:
#ifndef bsp_sht20_h_#define bsp_sht20_h_#include int sht20_init(void);void sht20_deinit(void);int sht20_read_data(double *temp, double *rh);#endif /* bsp_sht20_h_ */创建sht20温湿度传感器操作相关的c文件 src/bsp_sht20.c 如下:
#include #include hal_data.h#include bsp_sht20.h#include r_i2c_master_api.h#define reset_value 0x00static int i2c_write(uint8_t *data, uint32_t bytes, bool const restart);static int i2c_read(uint8_t *buf, uint32_t size, bool const restart);int sht20_init(void){ fsp_err_t err = fsp_success; /* open i2c master */ err = r_iic_master_open(&g_i2c1_master_ctrl, &g_i2c1_master_cfg); if (fsp_success != err) { printf(** r_iic_master_open api failed ** ); return err; }#if 0 /* sht20 sensor soft reset */ uint8_t buf[1] = 0xfe; err = i2c_write(buf, 1, true); if (fsp_success != err) { printf(** sht20 sensor soft reset failed ** ); return err; } r_bsp_softwaredelay(50, bsp_delay_units_milliseconds);#endif return 0;}void sht20_deinit(void){ r_iic_master_close (&g_i2c1_master_ctrl); return ;}int sht20_read_data(double *temp, double *rh){ fsp_err_t err = fsp_success; uint8_t buf[4]; /* send trigger temperature measure command and read the data */ buf[0]=0xf3; err = i2c_write(buf, 1, true); if (fsp_success != err) { printf(** sht20 send trigger temperature measure command failed ** ); return err; } /* datasheet: typ=66, max=85 */ r_bsp_softwaredelay(85, bsp_delay_units_milliseconds); /* read temperature measure data */ memset(buf, 0, sizeof(buf) ); err = i2c_read(buf, 3, false); if (fsp_success != err) { printf(** sht20 read id from location 1 failed ** ); return err; } *temp = 175.72 * (((((int) buf[0]) << 8) + buf[1]) / 65536.0) - 46.85; /* send trigger humidity measure command and read the data */ buf[0] = 0xf5; err = i2c_write(buf, 1, true); if (fsp_success != err) { printf(** sht20 send trigger humidity measure command failed ** ); return err; } /* datasheet: typ=22, max=29 */ r_bsp_softwaredelay(29, bsp_delay_units_milliseconds); /* read humidity measure data */ memset(buf, 0, sizeof(buf) ); err = i2c_read(buf, 3, false); if (fsp_success != err) { printf(** sht20 read id from location 1 failed ** ); return err; } *rh = 125 * (((((int) buf[0])
... ...#include bsp_sht20.h... ...void hal_entry(void){ double temp = 0.0; double rh = 0.0; ... ... sht20_init(); while (1) { ... ... sht20_read_data(&temp, &rh); printf(temp: %.3f rh: %.3f, temp, rh); }}7.4 编译运行代码修改完成后,在开发板上编译运行。
这时串口终端上将会实时打印sht20传感器采样的温湿度。
德州仪器进驻成都天府软件园
一分钟带你了解京东启动区块链加速器项目
滤波器的种类有哪些下篇
YDQ(C)-SF6充气式高压试验变压器电气原理说明
了解无线数据手册规格
基于单片机的I2C接口SHT20传感器采样设计
是什么让机器人更像人?是人工智能!
继电器成为智能家居系统的好朋友
【解决方案】AcrelEMS-HIW高速公路综合解决方案
基于ARM和蓝牙的无线信号采集系统的设计与实现
关于云之梦智能试衣镜在124届秋季广交会的介绍
微波扩频无线网络
整数边界杂散的仿真测试与消除方法分析
设计四层PCB电路板时,叠层一般怎样设计呢?
深度学习到底是什么卷积神经网络的结构你了解吗
PID技术规范来啦!工业园区VOCs监测将有规可依
PNT真的应该是TPN吗
采用OV7620和EPM7128S芯片实现图像采集系统的设计
不同类型的压敏电阻你知道几个?
焦耳小偷电路解析