LM3S2D93的I2C读写代码
时间: 2023-06-27 20:08:33 浏览: 204
以下是针对 LM3S2D93 的 I2C 读写代码,可供参考:
```c
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "inc/hw_i2c.h"
#include "inc/hw_types.h"
#include "driverlib/i2c.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#define SLAVE_ADDRESS 0x68 // I2C 从设备地址
uint8_t data[2];
int main(void) {
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ); // 设置系统时钟为 8MHz
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); // 使能 I2C0
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // 使能 GPIOB
GPIOPinConfigure(GPIO_PB2_I2C0SCL); // 配置 PB2 为 I2C0 SCL
GPIOPinConfigure(GPIO_PB3_I2C0SDA); // 配置 PB3 为 I2C0 SDA
GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3); // 配置 PB2 和 PB3 为 I2C 功能
I2CMasterInitExpClk(I2C0_BASE, SysCtlClockGet(), true); // 配置 I2C 主设备,使用系统时钟,高速模式
while (1) {
// 向从设备写入数据
data[0] = 0x00; // 寄存器地址为 0x00
data[1] = 0x01; // 要写入的数据为 0x01
I2CMasterSlaveAddrSet(I2C0_BASE, SLAVE_ADDRESS, false); // 设置从设备地址,写模式
I2CMasterDataPut(I2C0_BASE, data[0]); // 设置要写入的寄存器地址
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_START); // 发送起始位和地址
while (I2CMasterBusy(I2C0_BASE)); // 等待传输结束
I2CMasterDataPut(I2C0_BASE, data[1]); // 设置要写入的数据
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH); // 发送数据和停止位
while (I2CMasterBusy(I2C0_BASE)); // 等待传输结束
SysCtlDelay(10000000); // 延时
// 从从设备读取数据
I2CMasterSlaveAddrSet(I2C0_BASE, SLAVE_ADDRESS, true); // 设置从设备地址,读模式
I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE); // 发送起始位和地址,接收单个字节数据
while (I2CMasterBusy(I2C0_BASE)); // 等待传输结束
data[0] = I2CMasterDataGet(I2C0_BASE); // 读取数据
}
}
```
以上代码实现了向从设备写入数据并从从设备读取数据的操作,其中 `SLAVE_ADDRESS` 宏定义了从设备的地址,可以根据实际情况进行修改。这里使用了 LM3S2D93 的 I2C0 总线进行通讯,同时使用 PB2 和 PB3 作为 I2C0 SCL 和 SDA 引脚。具体的 I2C 通讯流程可以参考代码中的注释。
阅读全文