• 大小: 12KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: 其他
  • 标签: MLX90614  

资源简介

SMBUS两线制协议 模拟IIC main函数里面先初始化 然后直接调用ReadTemperature函数就可以了

资源截图

代码片段和文件信息

/*******************************************************************************
* 文件名 : mlx90614.c
* 作  者 : 
* 版  本 : 
* 日  期 : 2015-11-25
* 描  述 : mlx90614函数
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include “mlx90614.h“
#include “stm32f10x.h“

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define ACK  0
#define NACK 1
#define SA 0x00 //Slave address 默认为0x5a
#define RAM_ACCESS 0x00 //RAM access command
#define EEPROM_ACCESS 0x20 //EEPROM access command
#define RAM_TOBJ1 0x07 //To1 address in the eeprom

#define SMBUS_PORT     GPIOB
#define SMBUS_SCK GPIO_Pin_6
#define SMBUS_SDA GPIO_Pin_7

#define RCC_APB2Periph_SMBUS_PORT RCC_APB2Periph_GPIOB

#define SMBUS_SCK_H()     SMBUS_PORT->BSRR = SMBUS_SCK  //置高
#define SMBUS_SCK_L()     SMBUS_PORT->BRR = SMBUS_SCK   //置低
#define SMBUS_SDA_H()     SMBUS_PORT->BSRR = SMBUS_SDA
#define SMBUS_SDA_L()     SMBUS_PORT->BRR = SMBUS_SDA

#define SMBUS_SDA_PIN()     SMBUS_PORT->IDR & SMBUS_SDA //读取引脚电平

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/

/*******************************************************************************
* Function Name  : SMBus_StartBit
* Description    : Generate START condition on SMBus
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SMBus_StartBit(void)
{
    SMBUS_SDA_H(); // Set SDA line
    SMBus_Delay(5);     // Wait a few microseconds
    SMBUS_SCK_H(); // Set SCL line
    SMBus_Delay(5);     // Generate bus free time between Stop
    SMBUS_SDA_L(); // Clear SDA line
    SMBus_Delay(5);     // Hold time after (Repeated) Start
    // Condition. After this period the first clock is generated.
    //(Thd:sta=4.0us min)
    SMBUS_SCK_L();     // Clear SCL line
    SMBus_Delay(5);     // Wait a few microseconds
}

/*******************************************************************************
* Function Name  : SMBus_StopBit
* Description    : Generate STOP condition on SMBus
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void SMBus_StopBit(void)
{
    SMBUS_SCK_L(); // Clear SCL line
    SMBus_Delay(5);     // Wait a few microseconds
    SMBUS_SDA_L(); // Clear SDA line
    SMBus_Delay(5);     // Wait a few microseconds
    SMBUS_SCK_H(); // Set SCL line
    SMBus_Delay(5);     // Stop condition setup time(Tsu:sto=4.0us min)
    SMBUS_SDA_H(); // Set SDA line
}

/*********************************************************************

评论

共有 条评论