nRF52832的I2C例程代码

2023-05-16

nRF52832的I2C例程代码

#include "nrf_drv_i2c.h"
#include "app_error.h"

#define I2C_SCL_PIN     0   // SCL引脚号
#define I2C_SDA_PIN     1   // SDA引脚号
#define MAX_PENDING_TRANSACTIONS    5   // 最大等待事务数

static const nrf_drv_i2c_t i2c = NRF_DRV_I2C_INSTANCE(0);   // I2C实例号

static uint8_t m_sample[4];   // 读取数据缓冲区

// 完成事件处理函数
void i2c_event_handler(nrf_drv_i2c_evt_t const * p_event, void * p_context)
{
    switch (p_event->type)
    {
        case NRF_DRV_I2C_EVT_DONE:
            if (p_event->xfer_desc.type == NRF_DRV_I2C_XFER_RX)
            {
                // 读取完成,执行对应操作
            }
            break;
        default:
            break;
    }
}

// 初始化I2C 
void i2c_init(void)
{
    ret_code_t err_code;

    nrf_drv_i2c_config_t config = NRF_DRV_I2C_DEFAULT_CONFIG;
    config.scl = I2C_SCL_PIN;
    config.sda = I2C_SDA_PIN;

    err_code = nrf_drv_i2c_init(&i2c, &config, i2c_event_handler, NULL);
    APP_ERROR_CHECK(err_code);

    nrf_drv_i2c_enable(&i2c);
}

// 读取数据示例
void i2c_read_data(uint8_t address, uint8_t reg, uint8_t * data, uint8_t len)
{
    ret_code_t err_code;

    nrf_drv_i2c_xfer_desc_t xfer_desc;
    xfer_desc.address = address;
    xfer_desc.type = NRF_DRV_I2C_XFER_TXRX;
    xfer_desc.primary_length = 1;
    xfer_desc.secondary_length = len - 1;
    xfer_desc.p_primary_buf = ®
    xfer_desc.p_secondary = data;

    err_code = nrf_drv_i2c_schedule(&i2c, &xfer_desc, MAX_PENDING_TRANSACTIONS);
    APP_ERROR_CHECK(err_code);
}

// 写入数据示例
void i2c_write_data(uint8_t address, uint8_t reg, uint8_t * data, uint8_t len)
{
    ret_code_t err_code;

    uint8_t buffer[20];
    buffer[0] = reg;
    memcpy(&buffer[1], data, len);

    nrf_drv_i2c_xfer_desc_t xfer_desc;
    xfer_desc.address = address;
    xfer_desc.type = NRF_DRV_I2C_XFER_TX;
    xfer_desc.primary_length = len + 1;
    xfer_desc.p_primary_buf = buffer;

    err_code = nrf_drv_i2c_schedule(&i2c, &xfer_desc, MAX_PENDING_TRANSACTIONS);
    APP_ERROR_CHECK(err_code);
}

这个例程中,i2c_init()函数用于初始化I2C,并设置了SCL和SD引脚号。i2c_read_data()函数用于读取数据,i2c_write_data()函数用于写入数据。在读取完成后会调用i2c_event_handler()进行处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nRF52832的I2C例程代码 的相关文章

  • I2C设备主机与从机地址设置

    1 I2C主机与从机定义 I2C设备一般使用MCU作为主机 xff0c 主机与从机通过总线连接起来 xff0c 分别是SCL时钟总线和SDA数据总线 xff0c 主机发送给从机SCL时钟信号 xff0c SDA发送数据 xff0c 如下图所
  • 【STM32】入门(六):I2C协议

    STM32 STM32单片机总目录 1 常见I2C设备 EEPROM 温湿度传感器 xff0c 例如 xff1a AHT10 电量计 xff0c 例如 xff1a TI的BQ34Z100 日历时钟 模数或数模转换器 2 I2C总线结构 I2
  • I2C的 SCL和SDA为什么要上拉

    因为允许把多个I2C总线器件连接到总线上 xff0c 连接到I2C总线上的器件是漏极开路或集电极开路的 xff0c 可以实现线与功能 同时 xff0c 因为接了上拉电阻 xff0c 在总线空闲期间 xff0c SDA和SCL都是高电平 xf
  • 关于I2C和SPI总线协议

    关于I2C和SPI总线协议 IICvs SPI 现今 xff0c 在低端数字通信应用领域 xff0c 我们随处可见IIC Inter Integrated Circuit 和 SPI Serial Peripheral Interface
  • 通信方式梳理:GPIO,I2C,SPI,UART,USART,USB的区别

    GPIO xff0c I2C xff0c SPI xff0c UART xff0c USART xff0c USB的区别 1 简单区别 xff1a 1 xff09 GPIO xff08 General Purpose Input Outpu
  • stm32使用MPU6050读取温度值验证I2C

    通过MPU6050测温来进行I2C的验证学习 关于MPU6050寄存器相关可以参考https blog csdn net he yuan article details 76559569 I2C时序很多 xff0c 我是直接以原子I2C的程
  • STM32 I2C_OLED显示汉字及屏幕滚动

    STM32 I2C OLED显示汉字及屏幕滚动 文章目录 STM32 I2C OLED显示汉字及屏幕滚动一 I2C以及AHT20温湿度传感器介绍二 用0 96寸OLED屏幕显示数据1 OLED介绍2 样例测试 三 汉字编码原理编码排序A0A
  • nRF52832 — UART和指纹模块

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的
  • 【总线】I2C 通信协议

    目录 I2C 总线协议概述 参数总结 I2C 的工作原理 寻址 读 写位 数据帧 I2C数据传输的步骤 具有多个从机的单个主机 具有多个从机的多个主机 I2C的优缺点 优点 缺点 文章参考 I2C 总线协议概述 I2C 总线广泛应用在 OL
  • ESP8266如何使用u8g2(I2C)驱动SH1106的OLED

    u8g2是一款单色图形库 非常适合12864之类的显示屏 基本上支持了市面上的主流显示控制器 可是偏偏对SH1106不是那么友好 使用起来不是很方便 打开IDE的示例程序可以看到对SH1106列出来的几乎都SPI通信方式 仅仅只有一条是使用
  • nRF52832 — Keil中如何配置RAM地址

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的
  • nRF52832 — 1.44寸 TFT屏

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的
  • nRF52832学习记录(九、SAADC)

    nRF52xx 处理器中的ADC为一个逐次逼近的模拟数字转换器 所有nRF52xx 系列处理器的内部 ADC 称为 SAADC 目录 nRF52xx SAADC基础介绍 SAADC采样示例 SAADC EasyDMA 缓冲采样示例 SAAD
  • nRF52832 — 使用nRF52832的I2S播放音频

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的话
  • Linux:从用户空间实例化:eeprom new_device

    环境 x86 Ubuntu 14 04 我想获得类似的东西 i2c0 eeprom eeprom 50 compatible at 24c32 reg lt 0x50 gt 但因为在 x86 中没有可用的设备树 所以我遵循i2c insta
  • 如何在 QEMU x86 上模拟 i2c 设备?

    我正在研究 QEMU 1 5 1 6 但还没有看到任何在 i2c 总线上添加设备的文档 有人可以帮忙吗 Thanks 好吧 没人对这个问题感兴趣 我发布我自己的解决方案 由于 QEMU 不支持 I2C 总线级数据传输 因此在将多点触摸数据从
  • Raspberry Pi 4 I2C 总线无法正常工作

    尽管 i2cDetect 确实检测到目标 但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作 我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C
  • 为什么我只收到第一个地址字节? (I2C协议)

    期望从机确认并返回数据 但它没有 这是我的协议 这是我的数据表 数据表提到 从机将通过首先发送 MSB 字节来应答 Byte0 和 byte1 包含 预测值 所有字节均由主机确认 Edit 源库 另外仅供参考 我使用的是 Arduino F
  • ADXL345 与 ESP32 I2C 垃圾值问题

    我已根据以下教程使用 I2C 接口将 ESP32 与 ADXL345 连接起来Tutorial http www esp32learning com code esp32 and adxl345 sensor example php 但是
  • MCP23017 I2C 设备驱动程序探测函数未调用

    我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod

随机推荐