- void I2C_WriteByte(unsigned char dev_addr, unsigned int addr,unsigned char Byte)
 
- {
 
-     rt_uint8_t buf[4];
 
-     struct rt_i2c_msg msgs;
 
 
-     buf[0] = addr&0xff; //cmd
 
-     buf[1] = Byte;
 
 
-     msgs.addr = dev_addr;
 
-     msgs.flags = RT_I2C_WR;
 
-     msgs.buf = buf;
 
-     msgs.len = 2;
 
 
-     /* 调用I2C设备接口传输数据 */
 
-     rt_i2c_transfer(i2c_bus, &msgs, 1);
 
 
- }
 
 
- unsigned char I2C_ReadByte(unsigned char dev_addr, unsigned int addr)
 
- {  
 
-     rt_uint8_t buf[4];
 
-     struct rt_i2c_msg msgs[2];
 
 
-     buf[0] = addr&0xff; //cmd
 
-     msgs[0].addr = dev_addr;
 
-     msgs[0].flags = RT_I2C_WR;
 
-     msgs[0].buf = buf;
 
-     msgs[0].len = 1;
 
 
-     msgs[1].addr = dev_addr;
 
-     msgs[1].flags = RT_I2C_RD;
 
-     msgs[1].buf = buf;
 
-     msgs[1].len = 1;
 
 
-     /* 调用I2C设备接口传输数据 */
 
-     rt_i2c_transfer(i2c_bus, msgs, 2);
 
-         
 
-         return buf[0];
 
- }
 
 
 
- void I2C_PageWrite(unsigned char dev_addr,unsigned int addr,unsigned char *str,unsigned int num)   
 
- {
 
-     rt_uint8_t buf[4];
 
-     struct rt_i2c_msg msgs;
 
 
-     buf[0] = addr&0xff; //cmd
 
-     msgs.addr = dev_addr;
 
-     msgs.flags = RT_I2C_WR;
 
-     msgs.buf = buf;
 
-     msgs.len = 1;
 
-     /* 调用I2C设备接口传输数据 */
 
-     rt_i2c_transfer(i2c_bus, &msgs, 1);
 
 
-     msgs.addr = dev_addr;
 
-     msgs.flags = RT_I2C_WR;
 
-     msgs.buf = str;
 
-     msgs.len = num;
 
-     /* 调用I2C设备接口传输数据 */
 
-     rt_i2c_transfer(i2c_bus, &msgs, 1);
 
- }
 
 
- void I2C_PageRead(unsigned char dev_addr,unsigned int addr,unsigned char *str,unsigned int num)
 
- {
 
- //    rt_uint8_t buf[4];
 
- //    struct rt_i2c_msg msgs;
 
- //
 
- //    buf[0] = addr&0xff; //cmd
 
- //    msgs.addr = dev_addr;
 
- //    msgs.flags = RT_I2C_WR;
 
- //    msgs.buf = buf;
 
- //    msgs.len = 1;
 
- //    /* 调用I2C设备接口传输数据 */
 
- //    rt_i2c_transfer(i2c_bus, &msgs, 1);
 
 
- //    msgs.addr = dev_addr;
 
- //    msgs.flags = RT_I2C_RD;
 
- //    msgs.buf = str;
 
- //    msgs.len = num;
 
- //    /* 调用I2C设备接口传输数据 */
 
- //    rt_i2c_transfer(i2c_bus, &msgs, 1);
 
 
-     rt_uint8_t buf[4];
 
-     struct rt_i2c_msg msgs[2];
 
 
-     buf[0] = addr&0xff; //cmd
 
-     msgs[0].addr = dev_addr;
 
-     msgs[0].flags = RT_I2C_WR;
 
-     msgs[0].buf = buf;
 
-     msgs[0].len = 1;
 
 
-     msgs[1].addr = dev_addr;
 
-     msgs[1].flags = RT_I2C_RD;
 
-     msgs[1].buf = str;
 
-     msgs[1].len = num;
 
 
-     /* 调用I2C设备接口传输数据 */
 
-     rt_i2c_transfer(i2c_bus, msgs, 2);
 
- }
main主函数读取传感器数据:
- #include <rtthread.h>
 
 
- #define DBG_TAG "main"
 
- #define DBG_LVL DBG_LOG
 
- #include <rtdbg.h>
 
 
- #include <rtdevice.h>
 
 
- #include "gpio_i2c.h"
 
- #include "RPR-0521RS.h"
 
- #include "BM1422AGMV.h"
 
- #include "BM1383AGLV.h"
 
 
- #ifndef LED2_PIN_NUM
 
-     #define LED2_PIN_NUM            61  /* PD13 */
 
- #endif
 
- #ifndef LED3_PIN_NUM
 
-     #define LED3_PIN_NUM            62  /* PD14 */
 
- #endif
 
- #ifndef LED4_PIN_NUM
 
-     #define LED4_PIN_NUM            63    /* PD15 */
 
- #endif
 
 
- int main(void)
 
- {
 
-     uint8_t         utbuff[6];
 
-     float press; float temp;
 
-     uint16_t ps; float als;
 
 
-     i2c_gpio_init();
 
 
-     rt_pin_mode(LED2_PIN_NUM, PIN_MODE_OUTPUT);
 
-     rt_pin_write(LED2_PIN_NUM, PIN_HIGH);
 
-     rt_pin_mode(LED3_PIN_NUM, PIN_MODE_OUTPUT);
 
-     rt_pin_write(LED3_PIN_NUM, PIN_HIGH);
 
-     rt_pin_mode(LED4_PIN_NUM, PIN_MODE_OUTPUT);
 
-     rt_pin_write(LED4_PIN_NUM, PIN_HIGH);
 
 
-     if(RPR0521RS_Init() == 0)
 
-     {
 
-         rt_kprintf("RPR0521RS_Init OK\r\n");
 
-     }
 
-     if(BM1422AGMV_Init() == 0)
 
-     {
 
-         rt_kprintf("BM1422AGMV_Init OK\r\n");
 
-     }
 
-     if(BM1383AGLV_Init() == 0)
 
-     {
 
-         rt_kprintf("BM1383AGLV_Init OK\r\n");
 
-     }
 
 
-     while (1)
 
-     {
 
-         //LOG_D("Hello RT-Thread!");
 
-         rt_thread_mdelay(500);
 
-         rt_pin_write(LED4_PIN_NUM, PIN_HIGH);
 
-         rt_pin_write(LED2_PIN_NUM, PIN_LOW);
 
-         rt_thread_mdelay(500);
 
-         rt_pin_write(LED2_PIN_NUM, PIN_HIGH);
 
-         rt_pin_write(LED3_PIN_NUM, PIN_LOW);
 
-         rt_thread_mdelay(500);
 
-         rt_pin_write(LED3_PIN_NUM, PIN_HIGH);
 
-         rt_pin_write(LED4_PIN_NUM, PIN_LOW);
 
 
 
-         RPR0521RS_get_psalsval(&ps,&als);
 
-         rt_kprintf("RPR0521RS:Lx=%u\t\tPs=%d\n",(uint16_t)als,ps);
 
-         BM1383AGLV_get_val(&press,&temp);
 
-         rt_kprintf("BM1383AGLV:P=%u\t\tTem=%u\n",(uint16_t)press,(uint16_t)temp);
 
-         BM1422AGMV_get_rawdata(utbuff);
 
-         rt_kprintf("BM1422AGMV:xx=%u\t\tyy=%u\t\tzz=%u\r\n\n",(uint16_t)(utbuff[1]<<8)|utbuff[0],
 
-                                                         (uint16_t)(utbuff[3]<<8)|utbuff[2],
 
-                                                         (uint16_t)(utbuff[5]<<8)|utbuff[4]);
 
 
-    }
 
 
-     return RT_EOK;
 
- }
通过串口输出的数据:
 
 
代码工程: