这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » ADI » MAX32662EVKIT IIC通信

共2条 1/1 1 跳转至

MAX32662EVKIT IIC通信

助工
2025-02-18 21:46:36     打赏

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

94~(P0A{6%FPBZZ}1RU75C1.png

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

image.png





关键词: MAX32662 IIC通信    

专家
2025-02-19 09:40:05     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]