资源简介
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-C语言知识点
- C语言 stm32 AES加密解密
- hello world ,stm32串口打印程序
- 基于单片机的json编解码源码.zip
- mpu9250九轴姿态用STM32F103实现I2C通信
- 基于STM32F4的加速度频域二次积分振动
- STM32F3 LCD1602 I2C驱动代码 C语言
-
Jli
nk 命令行自动程序 - stm32f103的TCS34725驱动分享
- 昆仑通态屏做主机与STM32单片机从机之
- MAX30102心率血氧显程-STM32F103C8T6-C语言
- STM32的TM1650程序.zip
- HAL基础实验源码09 stm32cubemx-F429IGT6扩展
- RA8875 STM32F407 C++驱动
- STM32驱动TMP75 C语言程序
- STM32开发板实验指导1
- I0操作_LED流水灯xws
- stm32f303休眠
- STM32游戏手柄实验
- 非阻塞式AT指令发送接收工程,可驱动
- STM32F103输出相位可变方波
- 485实验(RS485总线的使用,基于阿波罗
- CS5532 的 STM32 驱动程序
- C876模板(基于战舰STM32F103开发板)
- STM32 GPIO输入输出
- 基于stm32f103的AD7091源码
- STM32F0硬件IIC
- stm32 低电平捕获
- stm32控制W5500收发
- STM32F103 串口环形队列应用程序
评论
共有 条评论