stm32f4软件模拟iic读不了电子罗盘数据

2019-07-20 22:16发布

stm32f4软件模拟iic读电子罗盘数据一直是常数怎么动都不变,我在52上用可以读出数据,可移植到stm32就不行了用的正点原子的iic程序主要用myiic.c和myiic.h。器件地址应该是没错的在51能读出数据。
#include "HMC5883L.h"
#include "lcd.h"

void Init_HMC5883(void)
{
        IIC_Init();
        Write_HMC5883(0x02, 0x00);               
}
char op=0;
void Write_HMC5883(u8 add, u8 da)
{
    IIC_Start();                  
    IIC_Send_Byte(SlaveAddress);   
        IIC_Wait_Ack();
       

    IIC_Send_Byte(add);   
        IIC_Wait_Ack();

    IIC_Send_Byte(da);      
        IIC_Wait_Ack();

    IIC_Stop();                  
}

u8 Read_HMC5883(u8 REG_Address)
{   
        u8 REG_data;
    IIC_Start();                          
    IIC_Send_Byte(SlaveAddress);           
        IIC_Wait_Ack();

    IIC_Send_Byte(REG_Address);                          
        IIC_Wait_Ack();

    IIC_Start();                        
    IIC_Send_Byte(SlaveAddress+1);         
        IIC_Wait_Ack();

    REG_data=IIC_Read_Byte(0);            
        IIC_Stop();                          
    return REG_data;
}

//******************************************************
//
//
//
//******************************************************
void Multiple_read_HMC5883(u8*BUF)
{   u8 i;
    IIC_Start();                          
    IIC_Send_Byte(SlaveAddress);           
        IIC_Wait_Ack();
    IIC_Send_Byte(0x03);                          
        IIC_Wait_Ack();
    IIC_Start();                          
    IIC_Send_Byte(SlaveAddress+1);         
        IIC_Wait_Ack();
         for (i=0; i<6; i++)                     
    {

        if (i == 5)
        {
           BUF[i] = IIC_Read_Byte(0);         
        }
        else
        {
          BUF[i] = IIC_Read_Byte(1);         
       }
   }
    IIC_Stop();                          
         delay_ms(5);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。