国产加速度传感器QMA6100P

本文聊聊上海矽睿产的加速度传感器QMA6100P的使用。

1、特性

高集成,小尺寸封装:2 x 2 x 0.95 mm LGA
14位数模转化,低噪声 ·
具有标准模式和快速模式,支持I2C和SPI接口
内置self-test
大范围操作电压1.7V-3.6V,与低功耗2~50μA
集成64位FIFO存贮器,符合RoHS标准,无卤素添加
内置运动算法 ,尤其是硬件计步算法
可在-40°C~85°C的温度中工作

2、引脚说明

在这里插入图片描述
可以看出提供了两个外部中断引脚,支持SPI或I2C通信。

3、I2C读写地址

在这里插入图片描述

4、部分寄存器

4.1、设备ID寄存器

在这里插入图片描述
可以通过读这个寄存器判断设备是否存在,默认是0x90。

4.2、软复位寄存器在这里插入图片描述

4.3、数据寄存器在这里插入图片描述

通过这6个寄存器可以读出三轴数据。

4.4、量程寄存器

在这里插入图片描述
通过这个寄存器设置测量范围。

4.5、带宽寄存器

在这里插入图片描述

4.6、电源管理寄存器

在这里插入图片描述

5、原理图设计

在这里插入图片描述

6、代码

本文使用软硬件I2C与QMA6100P通讯,通过宏切换。

void I2cInit(void)
{
   	
	GPIO_InitTypeDef  GPIO_InitStructure;
	I2C_InitTypeDef  I2C_InitStructure;


	RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK);

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
	
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF , ENABLE);
	/* Connect PXx to I2C_SCL*/
	GPIO_PinAFConfig(GPIOF, GPIO_PinSource6, GPIO_AF_1);
	/* Connect PXx to I2C_SDA*/
	GPIO_PinAFConfig(GPIOF, GPIO_PinSource7, GPIO_AF_1);
	
	
	/* GPIO configuration */  
	/* Configure sEE_I2C pins: SCL */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOF, &GPIO_InitStructure);

	/* Configure sEE_I2C pins: SDA */
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
	GPIO_Init(GPIOF, &GPIO_InitStructure);
	

	I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
	I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
	I2C_InitStructure.I2C_DigitalFilter = 0x00;
	I2C_InitStructure.I2C_OwnAddress1 = 0x00;
	I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
	I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	I2C_InitStructure.I2C_Timing = 0x40B22536;//0x20D22E37;// 0x02105070;  //0x40B22536//100k, 0x10950C27; //400kHz
    I2C_Init(I2C2, &I2C_InitStructure);

	/* Apply sEE_I2C configuration after enabling it */
	I2C_Init(I2C2, &I2C_InitStructure);

	/* sEE_I2C Peripheral Enable */
	I2C_Cmd(I2C2, ENABLE);
}

void  I2cWrite(uint8_t reg,uint8_t var)
{
      
	/* While the bus is busy */
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY) != RESET){
   };
	
	/* Send Touch address for write */	
	I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_Reload_Mode, I2C_Generate_Start_Write);
	
	while(I2C_GetFlagStatus(I2C2,  I2C_FLAG_TXIS )==RESET){
   }; // I2C_FLAG_TXE 
	
	I2C_SendData(I2C2, reg);
 
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TCR) == RESET){
   };
	
	I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_AutoEnd_Mode, I2C_No_StartStop);
	
	/* Test on EV8 and clear it */
	while (I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS) == RESET){
   }; //I2C_FLAG_TXIS
	/* Send the current byte */
	I2C_SendData(I2C2, var); 
 	
	/* Send STOP condition */
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF) == RESET){
   };
}


uint8_t  I2cRead(uint8_t reg)
{
   
	uint8_t ret=0;
	
	/* While the bus is busy */
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY) != RESET){
   };
 
	/* Generate start & wait event detection */
	I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);
 
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS ) == RESET){
   }; //I2C_FLAG_TXIS
 
	I2C_SendData(I2C2, reg);
 
	while (I2C_GetFlagStatus(I2C2, I2C_FLAG_TC) == RESET){
   };
 
	/* Send STRAT condition a second time */  
	I2C_TransferHandling(I2C2, (SLAVE_ADDR<<1), 1,  I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
	
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET){
   };
 
	/* Read a byte from the EEPROM */
	ret = I2C_ReceiveData(I2C2);   
	
	/* Enable Acknowledgement to be ready for another reception */
	while(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF) == RESET){
   };
		
	return ret;
}

#define _SCL_PORT  GPIOF
#define _SCL_PIN   GPIO_Pin_6

#define _SDA_PORT  GPIOF
#define _SDA_PIN   GPIO_Pin_7

void _I2cInit(void)
{
   
	/* sEE_I2C_SCL_GPIO_CLK and sEE_I2C_SDA_GPIO_CLK Periph clock enable */
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF 
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值