1、简介
MAX32662EVKIT的IIC通信是使用官方库来实现,这些IIC库函数是比较有特色的,其他如SPI、CAN通信库也是如此。一方面将通信外设的参数配置、数据写入读取函数全部封装到mxc_i2c_req_t结构体中,方便用户调用。
2、IIC外设初始化
这里选取SHT20温度传感器进行IIC通信测试。SHT20的通信原理可以查阅其数据手册说明,这里就不特别介绍了,仅提供在这个评估板上的驱动源程序
main.h头文件内容
#ifndef __MAIN_H #define __MAIN_H #include <stdio.h> #include <stdint.h> #include "string.h" #include "mxc_device.h" #include "led.h" #include "board.h" #include "mxc_delay.h" #include "gpio.h" #include "i2c.h" #endif
main.c文件关于硬件IIC的初始化内容
#define I2C_MASTER MXC_I2C1 ///< I2C instance
#define I2C_FREQ 100000 ///< I2C clock frequency
/***** Globals *****/
static mxc_i2c_req_t req; ///< I2C request
uint8_t txBuff[3];
uint8_t txLen=3;
uint8_t rxBuff[3];
uint8_t rxLen=3;
/***** Functions *****/
void IIC_HardWare_Init(){
int error = E_NO_ERROR;
error = MXC_I2C_Init(I2C_MASTER, 1, 0);
MXC_I2C_SetFrequency(I2C_MASTER, I2C_FREQ);
}
static int i2c_transfer(mxc_i2c_req_t *req, uint8_t *txData, int txSize, uint8_t *rxData,int rxSize){
req->tx_buf = txData; // Write data buffer
req->tx_len = txSize; // Number of bytes to write
req->rx_buf = rxData; // Read data buffer
req->rx_len = rxSize; // Number of bytes to read
return MXC_I2C_MasterTransaction(req);
}
static int i2c_write(mxc_i2c_req_t *req, uint8_t *txData, int txSize){
return i2c_transfer(req, txData, txSize, NULL, 0); // Create I2C write request
}
static int i2c_read(mxc_i2c_req_t *req, uint8_t *txData, uint8_t *rxData, int rxSize){
return i2c_transfer(req, txData, 1, rxData, rxSize); // Create I2C read request
}SHT20读取温度数据程序,可以看到温度传感器的程序非常简洁,这是因为美信提供了硬件IIC的通信库函数。如果使用软件IIC方式,至少还得写一长段的软件IIC程序
float Measure_Data_Conversion(uint8_t Buffer[]){
float Temperature = 0.00f;
Temperature = 175.72f * (float)((Buffer[0]<<8) | Buffer[1]) / 65536 - 46.85f;
return (float)Temperature;
}
void TempMeasure(){
req.i2c = I2C_MASTER;
req.addr = 0x40; //SHT20地址
req.tx_buf = NULL;
req.tx_len = 0;
req.rx_buf = NULL;
req.rx_len = 0;
req.restart = 0;
req.callback = NULL;
uint8_t txCMD=0xE3;//温度读取指令
}测试代码
int main(void){
TempMeasure();
while (1) {
i2c_read(&req,&txCMD,rxBuff,3);
printf("Temp:%0.2f C\n",(float)Measure_Data_Conversion(rxBuff));
MXC_Delay(500000);
}
}3、运行结果
从评估板电路原理图得到,MXC_I2C1外设的通信接口为P06、P09

将SHT20的SCL接入评估板P06引脚,SDA接入P09引脚,温度测量结果如下所示

我要赚赏金
