把它连在mcu在电脑上返回数据是正常的,但插在插口板上就只返回这个。不像是个特殊值,应该是硬件布线问题,但排查不出原因
提供下原理图,看原理图设计是否有问题?
不知道你这个问题是否已经解决, 如果还没有解决的话:/********************************************
主控芯片:STM32 Controller
模块型号:MLX90614
通讯方式:SPI串口通信
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
//定义模块头文件名称
#ifndef _MLX90614_H
#define _MLX90614_H
//定义模块使用头文件
#include "sys.h"
#include "delay.h"
#include "usart.h"
//定义模块使用的引脚
#define SDA_R HAL_GPIO_ReadPin(GPIOI,GPIO_PIN_1)
#define SDA_H HAL_GPIO_WritePin(GPIOI,GPIO_PIN_1,GPIO_PIN_SET)
#define SDA_L HAL_GPIO_WritePin(GPIOI,GPIO_PIN_1,GPIO_PIN_RESET)
#define SCL_H HAL_GPIO_WritePin(GPIOI,GPIO_PIN_2,GPIO_PIN_SET)
#define SCL_L HAL_GPIO_WritePin(GPIOI,GPIO_PIN_2,GPIO_PIN_RESET)
//定义模块使用的函数
void Tempinput(void);//读取温度函数
void MLX90614_Init(void);//初始化MLX90614
//定义模块寄存器地址
#endif
/********************************************
主控芯片:STM32 Controller
模块型号:MLX90614
通讯方式:SPI串口通信
作者:苏夏雨
授权:未经作者允许,禁止转载
********************************************/
#include "mlx90614.h"
//mlx90614 端口定义
GPIO_InitTypeDef GPIO_Initure;
void MLX90614_Init()//初始化MLX90614
{
__HAL_RCC_GPIOI_CLK_ENABLE();
GPIO_Initure.Pin=GPIO_PIN_1|GPIO_PIN_2;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_OD; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_VERY_HIGH; //高速
HAL_GPIO_Init(GPIOI,&GPIO_Initure); //初始化GPIO
}
void SMBstart()//SMB发送开始标志
{
SDA_H;
delay_us(10);
SCL_H;
delay_us(10);
SDA_L;
delay_us(10);
SCL_L;
delay_us(10);
}
void SMBstop()//SMB发送停止标志
{
SCL_L;
delay_us(10);
SDA_L;
delay_us(10);
SCL_H;
delay_us(10);
SDA_H;
delay_us(10);
}
void SMBsend(u8 buf)//SMB发送一个字节
{
u8 i;
for(i=0;i<8;i++)
{
SCL_L;
if((buf&0x80)==0)
{SDA_L;}
else
{SDA_H;};
buf<<=1;
delay_us(10);
SCL_H;
delay_us(10);
}
SCL_L;
delay_us(10);
SDA_H;
delay_us(10);
SCL_H;
delay_us(10);
SCL_L;
}
u8 SMBread()//SMB接收一个字节
{
u8 i;
u8 buf;
for(i=0;i<8;i++)
{
SCL_L;
delay_us(10);
SDA_H;
delay_us(10);
SCL_H;
delay_us(10);
buf<<=1;
if(SDA_R){buf|=0x01;};
delay_us(10);
}
delay_us(10);
SCL_L;
delay_us(10);
SDA_L;
delay_us(10);
SCL_H;
delay_us(10);
SCL_L;
return buf;
}
void Tempinput()//读取温度函数
{
u8 string[]={"000.00摄氏度\r\n"};
u8 SMBdataL;
u8 SMBdataH;
u32 SMBdata;
//摄氏温度计算公式(T*0.02)-273.15
SMBstart();//开始起始标志(写)
SMBsend(0xB4);//从机地址
SMBsend(0x07);//发送命令
SMBstart();//重复起始标志(读)
SMBsend(0x01);
SMBdataL=SMBread();//接收高位
SMBdataH=SMBread();//接收低位
SMBread();
SMBstop();
delay_us(10);
SMBdata=(SMBdataH*256)+SMBdataL;
SMBdata=SMBdata*2;
SMBdata=SMBdata-27315;
string[0]=(0x30+(SMBdata/10000));
string[1]=(0x30+((SMBdata%10000)/1000));
string[2]=(0x30+((SMBdata%1000)/100));
string[4]=(0x30+((SMBdata%100)/10));
string[5]=(0x30+((SMBdata%10)/1));
HAL_UART_Transmit(&UART1_Handler,string,sizeof(string),1000);
}