新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2016-4-4
- 在线时间
- 25 小时
|
5金钱
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);
}
|
|