mlx90614返回数值42949400是什么问题

把它连在mcu在电脑上返回数据是正常的,但插在插口板上就只返回这个。不像是个特殊值,应该是硬件布线问题,但排查不出原因

提供下原理图,看原理图设计是否有问题?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 咚咚咚————【封装驱动】MLX90614医用级红外温度传感器,分享交流自己编写的程序。中的 咚咚咚————【封装驱动】MLX90614医用级红外温度传感器,自己编写封装的驱动程序。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    /********************************************
    主控芯片: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);
    } 
    
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^