资源简介
HMC5883接口 驱动,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 最后一个数据需要回NOACK
HM
相关资源
- STM32读CS1237实现秤重测量
- 基于STM32单片机的心率体温测量仪
- 基于STM32F103ZET6控制舵机旋转(ts90a/
- stm32f103zet6控制蓝牙小车
- STM32F407驱动OLED显示DS18B20数字温度
- vscode作为编辑器开发stm32f103c8
- STM32 多路PWM输出
- STM32烧写算法flash包
- STM32 LIN通信数据发送实现 测试通过
- FFT电流检测 stm32f4
- DS1302万年历设计 stm32
- 超声波定高(基于STM32)
- STM32(神舟III号 串口1发送实验程序)
- STM32 模拟信号采集
- STM32-ads1256
- STM32跑马灯实验58159
- STM32429的串口收发程序
- STM32连接EC20使用内置MQTT协议接入阿里
- ADS1256-STM32参考程序
- stm32 AD7506
- STM32F10实现照相功能照相机
- 基于STM32的嵌入式flash读写控制
- stm32f103c8t6开发板原理图+pcb
- STM32内部FLASH模拟eerom
- stm32的半导体除湿机程序
- stm32实现高精度频率测定
- stm32库函数代码自动生成器V1.2
- stm32 DMA例程
- stm32蓝牙小车
- 显示屏操作(stm32f103c8t6(SAN))
评论
共有 条评论