当前位置:网站首页>RT thread I2C tutorial
RT thread I2C tutorial
2022-07-06 20:09:00 【duapple】
rt-thread i2c Use the tutorial
rt-thread studio
1. Create basic engineering
Use chip level basic engineering as the environment .
2. To configure i2c
open i2c
.
Configure driver .
CTRL+S
After saving the configuration , The project will be regenerated .
modify board.h
file . Cancel BSP_USING_I2C1
Notes .
/** if you want to use i2c bus(soft simulate) you can use the following instructions. * * STEP 1, open i2c driver framework(soft simulate) support in the RT-Thread Settings file * * STEP 2, define macro related to the i2c bus * such as #define BSP_USING_I2C1 * * STEP 3, according to the corresponding pin of i2c port, modify the related i2c port and pin information * such as #define BSP_I2C1_SCL_PIN GET_PIN(port, pin) -> GET_PIN(C, 11) * #define BSP_I2C1_SDA_PIN GET_PIN(port, pin) -> GET_PIN(C, 12) */
#define BSP_USING_I2C1
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN GET_PIN(B, 10)
#define BSP_I2C1_SDA_PIN GET_PIN(B, 11)
#endif
3. Code
Use i2c
Read BMP280 Temperature and humidity meter . Use rt_i2c_transfer
To read and write data to the sensor chip . The temperature and humidity drive here is implemented by myself .
#include <rtthread.h>
#include <rtdevice.h>
#include <stdio.h>
#include "bme280_i2c.h"
#define BMP280_I2C_BUS_NAME "i2c1"
#define BME280_ADDR 0X76
static struct rt_i2c_bus_device *i2c_bus = RT_NULL;
static rt_bool_t initialized = RT_FALSE;
static int write_bytes(struct rt_i2c_bus_device *bus, uint8_t slave_addr, uint8_t reg_addr, uint8_t *data, uint8_t len)
{
uint8_t buffer[128] = {
0 };
buffer[0] = reg_addr;
memcpy(buffer + 1, data, len);
struct rt_i2c_msg msgs;
msgs.addr = BME280_ADDR;
msgs.flags = RT_I2C_WR;
msgs.buf = buffer;
msgs.len = len + 1;
if (rt_i2c_transfer(bus, &msgs, 1) == 1)
{
return RT_EOK;
}
else
return -RT_ERROR;
}
static int read_bytes(struct rt_i2c_bus_device *bus, uint8_t slave_addr, uint8_t reg_addr, uint8_t *data, uint8_t len)
{
struct rt_i2c_msg msgs[2];
msgs[0].addr = BME280_ADDR;
msgs[0].flags = RT_I2C_WR;
msgs[0].buf = ®_addr;
msgs[0].len = 1;
msgs[1].addr = BME280_ADDR;
msgs[1].flags = RT_I2C_RD;
msgs[1].buf = data;
msgs[1].len = len;
if (rt_i2c_transfer(bus, msgs, 2) == 2)
{
return RT_EOK;
}
else
return -RT_ERROR;
}
static int write(uint8_t slave_addr, uint8_t reg_addr, uint8_t *bytes, uint32_t len)
{
return write_bytes(i2c_bus, BME280_ADDR, reg_addr, bytes, len);
}
static int read(uint8_t slave_addr, uint8_t reg_addr, uint8_t *bytes, uint32_t len)
{
return read_bytes(i2c_bus, BME280_ADDR, reg_addr, bytes, len);
}
static void delay_us(uint32_t us)
{
rt_thread_mdelay(us / 1000);
}
static int i2c_test(void)
{
i2c_bus = (struct rt_i2c_bus_device *) rt_device_find(BMP280_I2C_BUS_NAME);
if (i2c_bus == RT_NULL)
{
rt_kprintf("can't find %s device!\n", BMP280_I2C_BUS_NAME);
return RT_ERROR;
}
bme280_init(write, read, delay_us, NULL, 0);
int32_t temperature = 0;
bme280_read_temperature(&temperature);
rt_kprintf("temp: %d\n", temperature);
return RT_EOK;
}
MSH_CMD_EXPORT(i2c_test, i2c test);
4. test
Use i2c_test
Conduct demo test , The reading temperature is 27.28℃.
KEIL
Temporarily none .
边栏推荐
- (3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
- Introduction to enterprise lean management system
- Vscode debug run fluent message: there is no extension for debugging yaml. Should we find yaml extensions in the market?
- Appx code signing Guide
- Groovy基础语法整理
- Technology sharing | packet capturing analysis TCP protocol
- Li Kou 101: symmetric binary tree
- 数据的同步为每个站点创建触发器同步表
- mod_ WSGI + pymssql path SQL server seat
- New generation garbage collector ZGC
猜你喜欢
Selenium advanced operations
BeagleBoneBlack 上手记
永磁同步电机转子位置估算专题 —— 基波模型与转子位置角
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
Cesium Click to draw a circle (dynamically draw a circle)
Li Kou 101: symmetric binary tree
腾讯T3手把手教你,真的太香了
【计网】第三章 数据链路层(3)信道划分介质访问控制
Classic 100 questions of algorithm interview, the latest career planning of Android programmers
Speech recognition (ASR) paper selection: talcs: an open source Mandarin English code switching corps and a speech
随机推荐
Tencent T2 Daniel explained in person and doubled his job hopping salary
腾讯T3大牛手把手教你,大厂内部资料
The "white paper on the panorama of the digital economy" has been released with great emphasis on the digitalization of insurance
js获取浏览器系统语言
POJ 3207 Ikki&#39;s Story IV – Panda&#39;s Trick (2-SAT)
A5000 vGPU显示模式切换
范式的数据库具体解释
5. 无线体内纳米网:十大“可行吗?”问题
腾讯字节阿里小米京东大厂Offer拿到手软,老师讲的真棒
Synchronization of data create trigger synchronization table for each site
方法关键字Deprecated,ExternalProcName,Final,ForceGenerate
Transformer model (pytorch code explanation)
永磁同步电机转子位置估算专题 —— 基波模型类位置估算概要
HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
BeagleBoneBlack 上手记
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
Alibaba data source Druid visual monitoring configuration
String length limit?
A5000 vgpu display mode switching
腾讯架构师首发,2022Android面试笔试总结