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 Linux主机驱动和外设驱动分离思想 外设驱动 API 主机驱动 板级逻辑 具体的i2c设备 xff08 camera xff0c ts xff0c eeprom等等 xff09 主机驱动 xff1a 根据控制器硬件手册 xf
  • PX4使用I2C方式添加自定义传感器(1)

    PX4使用I2C方式添加自定义传感器 xff08 1 xff09 前言 毕业设计就是要在PX4上添加一个传感器 xff08 角度传感器 xff09 xff0c 由于板子上的接口数量很少 xff0c 很是宝贵 最后只能选择通过I2C通信方式
  • stm32使用MPU6050读取温度值验证I2C

    通过MPU6050测温来进行I2C的验证学习 关于MPU6050寄存器相关可以参考https blog csdn net he yuan article details 76559569 I2C时序很多 xff0c 我是直接以原子I2C的程
  • 什么是I2C通信

    ARM体系 I2C通信 一 什么是I2C 1 I2C总线是由Philips公司开发的一种简单 双向二线制同步串行总线 它只需要两根线即可在连接于总线上的设备之间传送信息 2 主设备用于启动总线传送数据 xff0c 并产生时钟以开放传送的设备
  • I2C接口及时序

    1 I2C学习要点 1 有2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL 如果只做master SCL可以只是输出 SDA在PAD上一定是inout pin xff0c 当然转为数字信号时可以分为两组 inout
  • STM32软件模拟I2C从机的实现方法

    1 1 前言 在使用I2C通信时 xff0c 一般会用到软件模拟I2C 目前网络上能搜索到的软件模拟I2C一般都是模拟I2C主机 xff0c 很少有模拟I2C从机的例程 由于I2C主机在进行数据收发时 xff0c 有明确的可预见性 xff0
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基
  • stm32的HAL库i2c从机实现

    stm32的i2c默认就是slave模式 xff0c 本文基于HAL库实现中断方式的接收和发送 xff0c 首先是初始化gpio和i2c xff0c 代码如下 xff1a I2C HandleTypeDef I2cHandle void H
  • nRF52832 — 连接指定name、UUID、addr的蓝牙设备

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要
  • BH1750 传感器实战教学 —— 驱动移植篇

    前言 上一篇 BH1750 的实战教学我们说明的实际应用中传感器的硬件设计 BH1750 传感器实战教学 硬件设计篇 我们提到过在本次使用的芯片为 51 内核 I2C 通讯驱动实现与 STM32 上还是有很大区别的 对于我们来说 已经掌握了
  • 外设驱动库开发笔记22:ADXL345三轴数字加速度计驱动

    移动设备的广泛应用增加对移动过程中各种参数的检测需求 ADXL345三轴数字加速度计可以用来检测加速度 进而测量倾斜角度等 在这一篇中 我们将讨论ADXL345三轴数字加速度计驱动程序的设计与实现 1 功能概述 ADXL345是一款小而薄的
  • Linux下CH452数码管芯片驱动调试(GPIO模拟I2C)

    1 设备连接 主控板处理器为Cortex A5处理器 内核4 9 0 主控板和CH452引脚定义如下表1 1所示 表1 1 主控板和CH452引脚定义 序号 CH452引脚定义 主控板引脚定义 1 SDA PB29 2 SCL PB30 3
  • nRF52832 — 外部中断BSP(Board Support Package)

    原文链接 http blog csdn net a369000753 article details 51312839 转载文章 若有不妥 通知后我会立即删除 首先来分析下主要的代码 cpp view plain copy brief Fu
  • nRF52832 — 多通道ADC接口的使用

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX 作 者 文化人 XX 联系方式 XX 版权声明 原创文章 欢迎评论和转载 转载时能告诉我一声就最好了 XX 要说的
  • NRF52832学习笔记(1)—— 添加自有service(基于SDK15.3)

    前言 SDK版本15 3 评估板 pca10040 在uart的例程中添加battery service 添加之前 手机连上设备之后扫描到的service如下 一 分配ram空间 softdevice的flash code是确定 但ram是
  • Raspberry Pi 4 I2C 总线无法正常工作

    尽管 i2cDetect 确实检测到目标 但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作 我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C
  • MCP23017 I2C 设备驱动程序探测函数未调用

    我正在使用以下 I2C GPIO设备驱动 https github com torvalds linux blob master drivers gpio gpio mcp23s08 c访问 MCP23017 GPIO 使用 insmod
  • 读取时不返回写入 I2C 的缓冲区

    我试图在写入后从 I2C 总线上的内存位置读取一个值 当我在终端中运行它时 我得到奇怪的输出 这是我的程序 include
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb

随机推荐