資源簡介
HMC5883接口 驅(qū)動,STM32直接使用,其他MCU可移植,C語言!
代碼片段和文件信息
#ifndef???__HMC5883_C_
#define???__HMC5883_C_
#include????
#include????
#include?“stm32f10x.h“
#include?“HMC5883.h“
uint8_t?BUF[7];
/*?Private?functions?---------------------------------------------------------*/
/**
??*?@brief??Configure?the?used?I/O?ports?pin
??*?@param??None
??*?@retval?None
??*/
void?I2C_GPIO_Config_HMC5883(void)
{
??GPIO_InitTypeDef??GPIO_InitStructure;?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB?ENABLE);
??//?Configure?I2C??pins:?SCL?and?SDA
??GPIO_InitStructure.GPIO_Pin?=??I2C_HMC5883_SCL?|?I2C_HMC5883_SDA;?
??GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
??GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_OD;
??GPIO_Init(I2C_HMC5883_GPIO?&GPIO_InitStructure);
}
void?HMC5883_Start(void)
{
SDAH;
SCLH;
????SysTimDelay1uS(SampleDelayCnt);??????????
????SDAL;????????????????
????SysTimDelay1uS(SampleDelayCnt);???????
SCLL;??
}
void?HMC5883_Stop(void)
{
SDAL;
SCLH;
????SysTimDelay1uS(SampleDelayCnt);?????????????
????SDAH;
????SysTimDelay1uS(SampleDelayCnt);???????????
}
void?HMC5883_SendACK(u8?ack)
{
if(ack)
SDAL;
else
SDAH;
????SCLH;???????????????
????SysTimDelay1uS(SampleDelayCnt);??????????
????SCLL;????????????????
????SysTimDelay1uS(SampleDelayCnt);???????????
}
u8?HMC5883_RecvACK(void)
{
???u8?CY;
?
????SCLH;
????SysTimDelay1uS(SampleDelayCnt);???????????????
????CY=?Read_SDA;????????????
????SCLL;??????????????????
????SysTimDelay1uS(SampleDelayCnt);???????
????return?CY;
}
void?HMC5883_SendByte(BYTE?dat)
{
????BYTE?i;
????for?(i=0;?i<8;?i++)????
????{
??if(dat>=0x80)
SDAH;
else
SDAL;
????????dat?<<=?1;????????
????????SCLH;??????????
????????SysTimDelay1uS(SampleDelayCnt);???
????????SCLL;??????????
????????SysTimDelay1uS(SampleDelayCnt);?????
????}
????HMC5883_RecvACK();
}
BYTE?HMC5883_RecvByte(void)
{
????BYTE?i;
????BYTE?dat?=?0;
????SDAH;??????????????????
????for?(i=0;?i<8;?i++)????
????{
????????dat?<<=?1;
????????SCLH;?????????????
????????SysTimDelay1uS(SampleDelayCnt);??
????????dat?|=?Read_SDA;???
????????SCLL;?????????
????????SysTimDelay1uS(SampleDelayCnt);????
????}
????return?dat;
}
//***************************************************
void?Single_Write_HMC5883(unsigned?char?REG_Addressunsigned?char?REG_data)
{
????HMC5883_Start();?????????????????
????HMC5883_SendByte(I2C_SLAVE_ADDRESS7);??
????HMC5883_SendByte(REG_Address);????
????HMC5883_SendByte(REG_data);??????
????HMC5883_Stop();???
}
unsigned?char?Single_Read_HMC5883(unsigned?char?REG_Address)
{??
????unsigned?char?REG_data;
?
????HMC5883_Start();???????????????????????
????HMC5883_SendByte(I2C_SLAVE_ADDRESS7);??
????HMC5883_SendByte(REG_Address);???????
????HMC5883_Start();????????????????
????HMC5883_SendByte(I2C_SLAVE_ADDRESS7+1);?????
????REG_data=HMC5883_RecvByte();?
HMC5883_SendACK(0);?///?1???最后一個數(shù)據(jù)需要回NOACK
HM
評論
共有 條評論