i2c_bus_device,然后用rt_i2c_msg封装要发送或者接收的数据,最后调用rt_i2c_transfer进行数据收发。
/** 程序清单: 这是一个 I2C 设备使用例程* 例程导出了 i2c_aht10_sample 命令到控制终端* 命令调用格式:i2c_aht10_sample i2c1* 命令解释: 命令第二个参数是要使用的I2C总 线设备名称, 为空则使用默认的I2C总 线设备* 程序功能: 通过 I2C 设备读取温湿度传感器 aht10 的温湿度数据并打印*/#include<rt...
i2c_core.c中实现IIC总线设备注册,以及使用IIC总线进行数据传输,如:rt_i2c_transfer(),rt_i2c_master_send(),rt_i2c_master_recv()。 rt_err_t rt_i2c_bus_device_register(struct rt_i2c_bus_device *bus, constchar*bus_name) { rt_err_t res = RT_EOK; rt_mutex_init(&bus->lock,"i2c_bus_l...
4/* 查找I2C总线设备,获取I2C总线设备句柄 */ 5i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(name); 1. 2. 3. 4. 5. 数据传输 获取到 I2C 总线设备句柄就可以使用rt_i2c_transfer()进行数据传输。函数原型如下所示: 1rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus, 2 s...
msgs[1].flags = RT_I2C_RD; /读标志/ msgs[1].buf = buf; /读取数据指针/ msgs[1].len = len; /读取数据字节数/ if (rt_i2c_transfer(ist8310_i2c_bus, msgs, 2) == 2) { return RT_EOK; } else { return -RT_ERROR; }
rt_size_t rt_i2c_transfer(structrt_i2c_bus_device *bus,structrt_i2c_msg msgs[],rt_uint32...
首先根据 I2C 设备名称查找 I2C 名称,获取设备句柄,然后初始化 aht10 传感器。 控制传感器的 2 的函数为写传感器寄存器 write_reg() 和读传感器寄存器 read_regs(),这两个函数分别调用了 rt_i2c_transfer() 传输数据。读取温湿度信息的函数 read_temp_humi() 则是调用这两个函数完成功能。
struct rt_i2c_msg msgs; msgs.addr = 0x23; msgs.flags = RT_I2C_WR; //写标志 msgs.len = 1; msgs.buf = (rt_uint8_t*) &cmd; if (rt_i2c_transfer(i2c_bus, &msgs, 1) == 1) return RT_EOK; else return -RT_ERROR;当我们读取光强数据的时候,参数填充后调用rt_i2c_transfer...
使用i2c读取BMP280温湿度计。使用rt_i2c_transfer来读取和写入数据到传感器芯片。这里的温湿度驱动是我自己实现的。 #include<rtthread.h>#include<rtdevice.h>#include<stdio.h>#include"bme280_i2c.h"#defineBMP280_I2C_BUS_NAME"i2c1"#defineBME280_ADDR 0X76staticstructrt_i2c_bus_device*i2c_bus=RT_NUL...
ret=rt_i2c_transfer(bus, &msgs, 1);rt_thread_mdelay(1);//要加延时才能成功 if(ret==1){ ...