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(使用前将#替换为@)