当前位置:网站首页>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 .
边栏推荐
- [network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
- 22-07-05 upload of qiniu cloud storage pictures and user avatars
- 青龙面板白屏一键修复
- 5. Wireless in vivo nano network: top ten "feasible?" problem
- 腾讯T2大牛亲自讲解,跳槽薪资翻倍
- 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
- Finally, there is no need to change a line of code! Shardingsphere native driver comes out
- 爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
- [calculating emotion and thought] floor sweeper, typist, information panic and Oppenheimer
- JVM_ Common [interview questions]
猜你喜欢
redisson bug分析
22-07-05 七牛云存储图片、用户头像上传
It's enough to read this article to analyze the principle in depth
Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022
Tencent T3 teaches you hand in hand. It's really delicious
A5000 vgpu display mode switching
Ideas and methods of system and application monitoring
BUUCTF---Reverse---easyre
(3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
随机推荐
Color is converted to tristimulus value (r/g/b) (dry stock)
22-07-05 upload of qiniu cloud storage pictures and user avatars
OceanBase社区版之OBD方式部署方式单机安装
Initial experience of addresssanitizer Technology
What happened to the kernel after malloc() was transferred? Attached malloc () and free () implementation source
学习打卡web
rt-thread i2c 使用教程
Anaconda安裝後Jupyter launch 沒反應&網頁打開運行沒執行
Transformer model (pytorch code explanation)
Finally, there is no need to change a line of code! Shardingsphere native driver comes out
POJ 3207 Ikki&#39;s Story IV – Panda&#39;s Trick (2-SAT)
系统与应用监控的思路和方法
微信小程序常用集合
HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
HMS core machine learning service creates a new "sound" state of simultaneous interpreting translation, and AI makes international exchanges smoother
腾讯字节阿里小米京东大厂Offer拿到手软,老师讲的真棒
Node. Js: express + MySQL realizes registration, login and identity authentication
Speech recognition (ASR) paper selection: talcs: an open source Mandarin English code switching corps and a speech
Method keywords deprecated, externalprocname, final, forcegenerate
RT-Thread 组件 FinSH 使用时遇到的问题