MCU学习笔记---LPC55S69 I2C

I2C最常用通讯方式之一,做了一个lpcxpresso55S69学习笔记。

一、引脚配置

通过MCUXpresso Config工具(引脚,时钟,外设)从MCUXpresso lpcxpresso55S69 SDK设置I2C驱动程序,如下是引脚配置:

二、I2C读写实例:

#include "pin_mux.h"
#include "clock_config.h"
#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_i2c.h"

#include "fsl_gpio.h"
#include "fsl_power.h"

/*******************************************************************************
 * Definitions
 ******************************************************************************/
#define SENSOR_I2C_CLK_SRC		I2C1_BASE
#define SENSOR_I2C_CLK_FREQ		12000000U
#define I2C_BAUDRATE			100000U
#define I2C_RELEASE_BUS_COUNT	100U

#define BOARD_SENSOR_I2C_BASEADDR		I2C1
#define BOARD_SENSOR_I2C_CLOCK_FREQ		12000000

#define DEV_ADDR			    0x4C    //I2C地址为7位
#define REG_ADDR        		0x00

//I2c init
void I2C_InitModule(void)
{
    i2c_master_config_t masterConfig;
    uint32_t sourceClock = 0;

    /*
     * masterConfig.baudRate_Bps = 100000U;
     * masterConfig.enableStopHold = false;
     * masterConfig.glitchFilterWidth = 0U;
     * masterConfig.enableMaster = true;
     */
    I2C_MasterGetDefaultConfig(&masterConfig);
    masterConfig.baudRate_Bps = I2C_BAUDRATE;
    sourceClock               = SENSOR_I2C_CLK_FREQ;
    I2C_MasterInit(BOARD_SENSOR_I2C_BASEADDR, &masterConfig, sourceClock);
}


/*
 * base: i2c总线; deviceAddress:设备i2c地址; subAddress:寄存器地址
 * subaddressSize:寄存器长度; rxBuff:读到数据; rxBuffSize:一次读几个数据
 */
status_t I2C1_read(I2C_Type *base,
                           uint8_t deviceAddress,
                           uint32_t subAddress,
                           uint8_t subaddressSize,
                           uint8_t *rxBuff,
                           uint8_t rxBuffSize)
{
    i2c_master_transfer_t masterXfer;
    memset(&masterXfer, 0, sizeof(masterXfer));

    /* Prepare transfer structure. */
    masterXfer.slaveAddress   = deviceAddress;
    masterXfer.subaddress     = subAddress;
    masterXfer.subaddressSize = subaddressSize;
    masterXfer.data           = rxBuff;
    masterXfer.dataSize       = rxBuffSize;
    masterXfer.direction      = kI2C_Read;
    masterXfer.flags          = kI2C_TransferDefaultFlag;

    return I2C_MasterTransferBlocking(base, &masterXfer);
}

/*
 * base: i2c总线; deviceAddress:设备i2c地址; subAddress:寄存器地址
 * subaddressSize:寄存器长度; rxBuff:写到数据; rxBuffSize:一次写几个数据
 */
status_t I2C1_write(I2C_Type *base,
                        uint8_t deviceAddress,
                        uint32_t subAddress,
                        uint8_t subaddressSize,
                        uint8_t *txBuff,
                        uint8_t txBuffSize)
{
    i2c_master_transfer_t masterXfer;

    /* Prepare transfer structure. */
    masterXfer.slaveAddress   = deviceAddress;
    masterXfer.direction      = kI2C_Write;
    masterXfer.subaddress     = subAddress;
    masterXfer.subaddressSize = subaddressSize;
    masterXfer.data           = txBuff;
    masterXfer.dataSize       = txBuffSize;
    masterXfer.flags          = kI2C_TransferDefaultFlag;

    return I2C_MasterTransferBlocking(base, &masterXfer);
}

int main(void)
{
    I2C_InitModule();
    //I2C read
    uint8_t readBuff;
    uint8_t value = 21;

    I2C1_read(BOARD_SENSOR_I2C_BASEADDR, DEV_ADDR, DEV_ADDR, 1, &readBuff, 1);
    PRINTF("reg0x00: %x\n", readBuff);
    //I2C write
    I2C1_write(BOARD_SENSOR_I2C_BASEADDR, DEV_ADDR, DEV_ADDR, 1, &value, 1);

    return 0;
}


参考链接:https://www.nxpic.org.cn/module/forum/thread-620699-1-1.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sorry0619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值