当前位置:网站首页>rt-thread i2c 使用教程
rt-thread i2c 使用教程
2022-07-06 12:14:00 【duapple】
rt-thread i2c 使用教程
rt-thread studio
1. 创建基础工程
使用芯片级的基础工程作为环境。
2. 配置i2c
打开i2c
。
配置驱动。
CTRL+S
保存配置后,会重新生成工程。
修改board.h
文件。取消 BSP_USING_I2C1
的注释。
/** 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. 代码
使用i2c
读取BMP280温湿度计。使用rt_i2c_transfer
来读取和写入数据到传感器芯片。这里的温湿度驱动是我自己实现的。
#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. 测试
使用i2c_test
进行demo测试,读取温度为27.28℃。
KEIL
暂时无。
边栏推荐
- Logstash expressway entrance
- beegfs高可用模式探讨
- New generation garbage collector ZGC
- 范式的数据库具体解释
- 学习打卡web
- LeetCode_ Gray code_ Medium_ 89. Gray code
- 【云小课】EI第47课 MRS离线数据分析-通过Flink作业处理OBS数据
- Redisson bug analysis
- 腾讯T2大牛亲自讲解,跳槽薪资翻倍
- Speech recognition (ASR) paper selection: talcs: an open source Mandarin English code switching corps and a speech
猜你喜欢
redisson bug分析
Classic 100 questions of algorithm interview, the latest career planning of Android programmers
PowerPivot——DAX(初识)
A5000 vgpu display mode switching
[translation] micro survey of cloud native observation ability. Prometheus leads the trend, but there are still obstacles to understanding the health of the system
Systematic and detailed explanation of redis operation hash type data (with source code analysis and test results)
Tencent Android interview must ask, 10 years of Android development experience
How to customize animation avatars? These six free online cartoon avatar generators are exciting at a glance!
手把手教你学会js的原型与原型链,猴子都能看懂的教程
Selenium advanced operations
随机推荐
js获取浏览器系统语言
PHP and excel phpexcel
社招面试心得,2022最新Android高频精选面试题分享
爬虫(14) - Scrapy-Redis分布式爬虫(1) | 详解
[play with Linux] [docker] MySQL installation and configuration
CF960G - Bandit Blues(第一类斯特林数+OGF)
logstash高速入口
Groovy基础语法整理
golang的超时处理使用技巧
Period compression filter
腾讯T3大牛手把手教你,大厂内部资料
腾讯安卓开发面试,android开发的基础知识
An East SMS login resurrection installation and deployment tutorial
Example of shutter text component
Standardized QCI characteristics
PowerPivot——DAX(初识)
[translation] supply chain security project in toto moved to CNCF incubator
系统与应用监控的思路和方法
Analysis of rainwater connection
121. 买卖股票的最佳时机