【51单片机快速入门指南】4.4:I2C 读取HMC5883L / QMC5883L 磁力计

目录

  • 硬知识
    • 简介
    • 操作模式
      • HMC5883L
        • 连续测量模式
        • 单次测量模式
        • 闲置模式
      • QMC5883L
        • 连续测量模式
        • 待命模式
    • 主要差异
    • 寄存器
      • 寄存器列表
        • HMC5883L
        • QMC5883L
      • 配置寄存器
        • HMC5883L
          • 配置寄存器 A
          • 配置寄存器 B
          • 模式寄存器
        • QMC5883L
          • 控制寄存器1
          • 控制寄存器2
          • SET/RESET Period Register
      • 数据输出寄存器
        • HMC5883L
        • QMC5883L
      • 状态寄存器
        • HMC5883L
        • QMC5883L
      • 识别寄存器
        • HMC5883L
        • QMC5883L
  • 示例程序
    • XMC5883L.c
    • XMC5883L.h
    • 测试程序
      • 实验现象

STC15F2K60S2 16.384MHz
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0
上位机:Vofa+ 1.3.10


硬知识

摘自《HMC5883L中文规格书》、《QMC5883L Datasheet 1.0》、《QMC5883L寄存器对比及参考设置》、QMC5883L说明文档 —— yedongnan001

简介

HMC5883L
        霍尼韦尔 HMC5883L 是一种表面贴装的高集成模块,并带有数字接口的弱磁传感器芯片,应用于低成本罗盘和磁场检测领域。
QMC5883L
        QMC5883L源于霍尼韦尔的HMC5883L,是一款表面贴装的集成了信号处理电路的三轴磁性传感器,应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些高精度的场合。
性能对比
在这里插入图片描述

操作模式

HMC5883L

连续测量模式

        连续测量模式,在客户所选择的速率下进行连续的测量,并所测量的更新数据输出寄存器。如果有必要,数据可以从数据输出寄存器重新读取,但是,如果主机并不能确保在下次测量完成之前可以访问数据寄存器,数据寄存器上的旧的数据会被新的测量数据取代。为了保存测量之间的电流,该装置被放置在一个类似闲置模式的状态,但模式寄存器没有改变成空闲模式。即MD[n]位不变。配置寄存器A的设置在连续测量模式时会影响数据输出速率(比特DO[n]) ,测量配置(bits MS[n]),和增益(bits GN[n])。所有寄存器在连续测量模式中保留数值。 在连续测量模式下I2C总线可被网络内的其他装置启用。

单次测量模式

        这是预设的供电模式。在单测量模式,该装置进行单次测量并将测量数据更新至输出数据寄存器中。在完成测量和输出数据寄存器的更新以后,通过设置MD[n] bits,该装置被置于闲置模式,模式寄存器变更为闲置模式。配置寄存器的设置在单一测量模式时影响测量配置(bits MS[n])。。在单测量模式中所有寄存器保留数值。 在单测量模式下I2C总线可被网络内其他装置启用。

闲置模式

        在此模式下,装置可以通过I2C总线访问,但主要电源能耗是禁用的,如ADC,放大器,传感器偏置电流,但不仅限于这些。在空闲模式下所有寄存器保留数值。在闲置测量模式下I2C总线可被网络内其他装置启用。

QMC5883L

连续测量模式

        此模式下,磁性传感器连续进行测量并把测量数据置于数据输出寄存器中。测量数据的偏移和温度的影响将会自动得到补偿。

        正常情况下的读顺序:

  1. 检查DRDY引脚或轮询状态寄存器(06H)中DRDY 位的状态
  2. 读取测量数据,数据寄存器被读取的同时,DRDY和DOR被置0
  3. 数据寄存器一旦被读取,数据保护将启动。直到最后一个数据寄存器(05H)被读取,数据保护才会被解除。其流程图如下:

在这里插入图片描述
        测量时读取
        测量过程中读取的将是之前测量过并保存过的数据,并且这一次测量完成后DRDY将不会被置“1”,即这一次测量的数据丢失掉了。
在这里插入图片描述
        数据未读取
        如果第N个数据被跳过,当前的数据将会被接下来的数据覆盖掉,此种情形下,DRDY保持高电平直到数据被读取,DOR被置“1”,表示有一串数据丢失,同样,下一次读取操作后DOR将被置“0”。
在这里插入图片描述
        数据锁定直至下次测量结束
        只要任意一个数据寄存器被读取,所有测量数据将处于被锁定状态。如果下一次测量结束后,最后一个数据寄存器(05H)仍未被读取,数据寄存器将会拒绝新数据更新当前数据的操作,注意看下图,新数据将会被丢失。此类情形下,DOR将会被置“1”,直至下下次数据被读取。
在这里插入图片描述

待命模式

        QMC5883L上电后默认为待命模式。此状态下,寄存器值将会通过一个超低功耗的LDO保持,对任意寄存器的读写操作都将会唤醒I2C总线接口。内部时钟被停止,同时也不会进行磁场测量。

主要差异

        HMC5883L和QMC5883L的寄存器地址配置不能说一模一样,只能说毫不相关,甚至数据寄存器的顺序及高位低位的先后都不一样,程序如果不加以区分是绝对不能通用的。
        如下表所示,
        HMC5883的七位地址为0x1e(0x3c >> 1 = 0x1e)
        QMC5883的七位地址为0x0d(0x18 >> 1 = 0x0d)(默认,SI接GND) 或 0x0c(0x1a >> 1 = 0x0c)(SI接VDD)
在这里插入图片描述
外观差异
        引自《用前必读.txt》
        进口HMC5883 —— IC丝印 L883
        国产QMC5883 —— IC丝印 D5883
        实际如下图所示,我买到的是QMC5883L
在这里插入图片描述

寄存器

寄存器列表

HMC5883L

在这里插入图片描述

QMC5883L

在这里插入图片描述

配置寄存器

HMC5883L

配置寄存器 A

        配置寄存器是用来配置该装置设置的数据输出速率和测量配置。 CRA0 通过 CRA7 表明位的位置,用 CAR 指示在配置寄存器中的位。 CRA7 指示数据流的第一位。括号中的数目显示是该位的默认值。
在这里插入图片描述
在这里插入图片描述
        下表的数据显示在连续测量模式下的所有可选的输出速率。所有这三个通道应在某一特定数据速率下测量。其他输出速率可以通过控制单测量模式下的 DRDY 中断引脚来获得,最大速率为 160Hz。
在这里插入图片描述
在这里插入图片描述

配置寄存器 B

        配置寄存器 B 设置装置的增益。 CRB0 通过 CRB7 识别位的位置,用 CRB 指示在配置寄存器里的位。CRB7 表示数据流中的第一位。括号中的数目显示的是位的默认值。
在这里插入图片描述
在这里插入图片描述
        下表描述增益设置。使用以下“增益”一栏将counts转换成Guass。在总共磁场强度引起所有数据输出存储器中一个溢位(饱和)时选择较低的增益值(高GN#值)。
在这里插入图片描述

模式寄存器

        该寄存器是一个8位可读可写的寄存器。该寄存器是用来设定装置的操作模式。 MR0通过MR7识别位的位置,MR表明模式寄存器里的位。MR7指示数据流中的第一位。括号中的数字显示的是位的默认值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QMC5883L

控制寄存器1

        控制寄存器1位于地址09H,它设置操作模式(MODE)。输出数据更新速率(ODR),磁场测量范围或传感器的灵敏度(RNG)和过采样率(OSR)。
        两个MODE寄存器可以传输设备中的操作模式,两种模式是待机模式和连续测量模式。POR (Power-on-Reset)后默认模式为standby。模式之间的切换没有任何限制。
        输出数据速率由ODR寄存器控制。数据更新频率可选择10Hz、50Hz、100Hz和200Hz四种频率。对于大多数的封装应用,我们推荐10hz的低功耗。对于游戏,可以使用高更新率,如100Hz或200Hz。
        磁传感器的磁场范围可以通过寄存器RNG来选择。全量程范围由应用环境决定。对于磁清晰的环境,可以使用低场范围,如+/- 2高斯。磁场范围与磁传感器的灵敏度密切相关。最低的视场范围有最高的灵敏度,因此,更高的分辨率。
        过采样率(OSR)寄存器用于控制内部数字滤波器的带宽。OSR值越大,滤波器带宽越小,带内噪声越小,功耗越高。它可以用来达到噪音和功率之间的良好平衡。有四种过采样率可选,64,128,256或512。
在这里插入图片描述

控制寄存器2

        控制寄存器2位于地址0AH。它控制中断引脚启用(INT_ENB),点滚过功能启用(POL_PNT)和软复位(SOFT_RST)。
        中断启用由控制寄存器2中的INT_ENB控制。一旦中断被启用,当新的数据在数据输出寄存器中,它将置位。
        INT_ENB:“0”:允许中断PIN,“1”:禁止中断PIN
指针滚转函数由ROL_PNT寄存器控制。开启点滚转功能后,如果I2C读取从00H ~ 06H的任意地址开始,则I2C数据指针自动在00H~06H之间滚动。
        ROL_PNT: 0:正常,1:开启指针滚转功能
        软复位可以通过将寄存器SOFT_RST更改为set来实现。软复位可以在任何时间、任何模式下调用。例如,如果软复位发生在连续模式读取中间,由于模式寄存器默认被重置为“00”,QMC5883L立即切换到待机模式。
        SOFT_RST:“0”:正常。“1”:软复位,恢复所有寄存器的默认值。
在这里插入图片描述

SET/RESET Period Register

        SET/RESET周期由FBR[7:0]控制。建议将寄存器0BH写成0x01。
在这里插入图片描述

数据输出寄存器

HMC5883L

数据输出 X 寄存器 A 和B
        数据输出 X 寄存器是两个 8 位寄存器,数据输出寄存器 A 和 B。这些寄存器储存从通道 X 所测量结果。数据输出 X 寄存器 A 储存一个来自测量结果中的 MSB(高位数据),数据输出 X 寄存器 B 储存一个来自测量结果中的 LSB(低位数据)。存储在这两个寄存器的值是一个 16 位值以二进制的补码形式存在,其范围是 0xF800到 0x07FF。DXRA0 至 DXRA7、DXRB0 至 DXRB7 标识出位置, DXRA 和 DXRB 标识出在数据输出寄存器 X 中的位。DXRA7 和 DXRB7 标识出数据流的第一位,括号中的数目显示该位的默认值。
        在事件的ADC上溢或下溢阅读给定的通道,或者如果有一个数学溢出的过程,这种数据寄存器将包含-4096的值。在下一次有效测量完成进行之后,该寄存器上的值将被清除。
在这里插入图片描述
数据输出 Y 寄存器 A 和B
        数据输出 Y 寄存器是两个 8 位寄存器,数据输出寄存器 A 和 B,这些寄存器储存从通道 Y 所测量的结果。数据输出 Y 寄存器 A 储存一个来自测量结果中的 MSB(高位数据),数据输出 Y 寄存器 B 包含一个来自测量结果中的 LSB(低位数据)。存储在这两个寄存器的值是一个 16 位值以二进制的补码形式存在,其范围是0xF800 到 0x07FF。DYRA0 至 DYRA7、DYRB0 至 DYRB7 标识位置, DYRA 和 DYRB 标识在数据输出寄存器 Y 中的位。DYRA7 和 DYRB7 标识数据流的第一位。括号中的数目显示该位的默认值。
        在事件的ADC上溢或下溢阅读给定的通道,或者如果有一个数学溢出的过程,这种数据寄存器将包含值为-4096。在下一次有效测量进行之后,该寄存器上的值将被清除。
在这里插入图片描述
数据输出 Z 寄存器 A 和 B
        数据输出 Z 寄存器是两个 8 位寄存器,数据输出寄存器 A 和 B,这些寄存器储存从通道 Z 所测量的结果。数据输出 Z 寄存器 A 储存一个来自测量结果中的 MSB(高位数据),数据输出 Z 寄存器 B 包含一个来自测量结果中的 LSB(低位数据)。存储在这两个寄存器的值是一个 16 位值以二进制的补码形式存在,其范围是0xF800 到 0x07FF。DZRA0 至 DZRA7、DZRB0 至 DZRB7 标识位置,DZRA 和 DZRB,标识在数据输出寄存器 Z 中的位。DZRA7 和 DZRB7 标识数据流的第一位。括号中的数目显示该位的默认值。
        在事件的ADC上溢或下溢阅读给定的通道,或者如果有一个数学溢出的过程,这种数据寄存器将包含价值-4096。在下一次有效测量进行之后,该寄存器上的值将被清除。
在这里插入图片描述
数据输出寄存器操作
        当一个或一个以上的输出寄存器在被读取时,如果所有六种数据输出寄存器未被读取完,那么新的数据不能被更新到相应的数据输出寄存器。这一要求也影响 DRDY 和 RDY ,在新的数据未被更新到所有输出寄存器之前是不能被清除的。

QMC5883L

        寄存器00H ~ 05H存储连续测量中各轴磁传感器的测量数据。
        在连续测量模式下,输出数据根据控制寄存器1中的数据更新速率ODR设置定期刷新。无论通过I2C读取状态如何,数据都保持不变,直到新数据替换它们。每条轴的数据宽度为16位2的补码,即01H/03H/05H的MSB表示每条轴的符号。每个通道的输出数据范围为-32768到32767。
在这里插入图片描述
温度数据寄存器
        寄存器07H-08H存储温度传感器输出数据。16位温度传感器输出是2的补码。
        温度传感器的增益是工厂校准的,但其偏移量没有被补偿,只有相对温度值是准确的。温度系数约为100 LSB/℃
在这里插入图片描述

状态寄存器

HMC5883L

        状态寄存器是一个8位只读寄存器。该寄存器是表明装置的状态, SR0到SR7表明位的位置,SR表明在状态寄存器的位, SR7指数据流的第一位。
在这里插入图片描述
在这里插入图片描述

QMC5883L

        有两个状态寄存器位于地址06H和0CH。
        寄存器06H有三个位表示状态标志,其余为工厂使用保留。状态寄存器是只读位。
        数据就绪寄存器(Data Ready Register, DRDY),当所有三轴数据就绪时设置,并在连续测量模式下加载到输出数据寄存器。通过I2C推荐通过读取任何数据寄存器(00H~05H)将其重置为“0”
        DRDY: 0:无新数据,1:有新数据
        如果三轴磁传感器通道有数据超出范围,则设置溢出标志(OVL)为“1”。每个轴的输出数据在-32768和32767处饱和,如果任何一个轴超过这个范围,OVL标志设置为“1”。如果下一次测量回到(-32768,32767)的范围,该标志将被重置为“0”,否则,它将保持为“1”。
        OVL: 0:正常,1:数据溢出
        如果在连续测量模式下读取时跳过输出数据寄存器的所有通道,则数据跳过位设置为“1”。通过I2C读取任何数据寄存器(00H~05H),复位为“0”
        DOR: 0:正常,1:跳过数据读取
在这里插入图片描述

识别寄存器

HMC5883L

识别寄存器 A
        识别寄存器 A 是用来识别装置。IRA0 通过 IRA7 表明位的位置,而 IRA 表明在识别寄存器 A 中的位。IRA7 指数据流的第一位。括号中的数目显示的默认值是位
        该装置的识别值存储在本寄存器中。这是一个只读寄存器。
        寄存器值: ASCII 值 H
在这里插入图片描述
识别寄存器 B
        识别寄存器 B 是用来识别装置。IRB0 到 IRB7 表明位的位置,而 IRB 表明在识别寄存器 B 中的位。IRB7 指数据流的第一位。
        寄存器值:ASCII 值 4
在这里插入图片描述
识别寄存器 C
        鉴定寄存器 C 是用来识别装置,IRC0 到 IRC7 表明位的位置,而 IRC 表明在识别寄存器 C 中的位,IRC7 指数据流的第一位。
        寄存器值: ASCII 值 3
在这里插入图片描述

QMC5883L

        这个寄存器是芯片识别寄存器。它返回0xff。
在这里插入图片描述

示例程序

       stdint.h见【51单片机快速入门指南】1:基础知识和工程创建
       软件I2C程序见【51单片机快速入门指南】4: 软件 I2C
       串口部分见【51单片机快速入门指南】3.3:USART 串口通信

XMC5883L.c

/**
******************************************************************************
* @file			XMC5883L.c
* @author		Royic
* @date		 	2021-11-27
* @brief 		XMC5883L传感器驱动
******************************************************************************
*/
#include "XMC5883L.h"
#include "./Software_I2C/Software_I2C.h"static int i2cWrite(uint8_t reg_, uint8_t Data)
{return i2c_mem_write(MAG_ADDRESS, reg_, &Data, 1);
}static int i2cRead(uint8_t reg_, uint8_t len, uint8_t* buf)
{return i2c_mem_read(MAG_ADDRESS, reg_, buf, len);
}/**
* @brief	xmc5883初始化,包含传感器校准
* @note
*/
void xmc5883lInit(void)
{
#ifdef HMC5883Li2cWrite(ConfigRegA, Sample_MAX << 5 | DataOutputRate_Max << 2 | NormalOperation);i2cWrite(ConfigRegB, Full_Scale_1_9G << 5);i2cWrite(ModeRegister, ContinuousConversion);	
#endif
#ifdef QMC5883Li2cWrite(ConfigReg1, Sample_MAX << 6 | Full_Scale_2G << 4 | DataOutputRate_Max << 2 | ContinuousConversion);i2cWrite(ConfigReg2, Enable_Interrupt_PIN << 7 | ROL_PNT_Normal << 6 | SOFT_RST_Normal);i2cWrite(Period_FBR, 0x01);
#endif
}/**
* @brief	读取磁场传感器数据。
* @note
* @param	magData:存储磁场传感器原始数据的指针
*/
#ifdef QMC5883Lint16_t QMC5883L_Temp = 0;
#endif
void xmc5883lRead(int16_t *mag_x, int16_t *mag_y, int16_t *mag_z)
{
#ifdef HMC5883Luint8_t buf[6];i2cRead(MAG_DATA_REGISTER, 6, buf);*mag_x = buf[0] << 8 | buf[1];*mag_z = buf[2] << 8 | buf[3];*mag_y = buf[4] << 8 | buf[5];
#endif
#ifdef QMC5883Luint8_t buf[9];i2cRead(MAG_DATA_REGISTER, 9, buf);*mag_x = buf[0] | buf[1] << 8;*mag_y = buf[2] | buf[3] << 8;*mag_z = buf[4] | buf[5] << 8;QMC5883L_Temp = buf[7] | buf[8] << 8;
#endif
}

XMC5883L.h

#ifndef XMC5883L_H_
#define XMC5883L_H_#include "XMC5883L.h"
#include "stdint.h"#define QMC5883L	
//#define HMC5883L	#define _FAIL		1
#define _SUCCESS	0#ifdef QMC5883L#ifdef HMC5883L#error //同时define了QMC5883L、HMC5883L#endif
#endif#ifdef HMC5883L#define MAG_ADDRESS				0x1E#define MAG_DATA_REGISTER		0x03#define MAG_X_DATA_REGISTER		0x03#define MAG_Y_DATA_REGISTER		0x07#define MAG_Z_DATA_REGISTER		0x05#define ConfigRegA				0x00// ConfigRegA valid Data output rates for 5883L#define DataOutputRate_0_75HZ	0x00#define DataOutputRate_1_5HZ	0x01#define DataOutputRate_3HZ		0x02#define DataOutputRate_7_5HZ	0x03#define DataOutputRate_15HZ		0x04#define DataOutputRate_30HZ		0x05#define DataOutputRate_75HZ		0x06#define DataOutputRate_Max		DataOutputRate_75HZ// ConfigRegA valid sample averaging for 5883L#define SampleAveraging_1		0x00#define SampleAveraging_2		0x01#define SampleAveraging_4		0x02#define SampleAveraging_8		0x03#define Sample_MAX				SampleAveraging_8#define NormalOperation			0x00#define PositiveBiasConfig		0x01#define NegativeBiasConfig		0x02#define ConfigRegB				0x01#define Full_Scale_0_88G		0x00#define Full_Scale_1_3G			0x01#define Full_Scale_1_9G			0x02#define Full_Scale_2_5G			0x03#define Full_Scale_4_0G			0x04#define Full_Scale_4_7G			0x05#define Full_Scale_5_6G			0x06#define Full_Scale_8_1G			0x07#define ModeRegister			0x02#define ContinuousConversion	0x00#define SingleConversion		0x01#define StatusReg				0x09	#define IDRegA					0x0A#define IDRegB					0x0B#define IDRegC					0x0C
#endif#ifdef QMC5883L
//	#define MAG_ADDRESS 0x0C	//SI = GND#define MAG_ADDRESS 0x0D	//SI = VDD#define MAG_DATA_REGISTER		0x00#define MAG_X_DATA_REGISTER		0x00#define MAG_Y_DATA_REGISTER		0x02#define MAG_Z_DATA_REGISTER		0x04#define MAG_TEMP_DATA_REGISTER	0x07#define ConfigReg1				0x09// ConfigReg1 valid Data output rates for 5883L#define DataOutputRate_10HZ		0x00#define DataOutputRate_50HZ		0x01#define DataOutputRate_100HZ	0x02#define DataOutputRate_200HZ	0x03#define DataOutputRate_Max		DataOutputRate_200HZ#define SampleOverRatio_512		0x00#define SampleOverRatio_256		0x01#define SampleOverRatio_128		0x02#define SampleOverRatio_64		0x03#define Sample_MAX				SampleOverRatio_512#define Full_Scale_2G			0x00#define Full_Scale_8G			0x01#define StandbyConversion		0x00#define ContinuousConversion	0x01#define ConfigReg2				0x0A#define Enable_Interrupt_PIN	0x00#define Disable_Interrupt_PIN	0x01#define ROL_PNT_Normal			0x00#define ROL_PNT_Enable			0x01#define SOFT_RST_Normal			0x00#define SOFT_RST_Reset			0x01#define StatusReg				0x06#define Period_FBR				0x0b#define IDReg					0x0d 	//可读到0xFFextern int16_t QMC5883L_Temp;
#endifvoid xmc5883lInit(void);
void xmc5883lRead(int16_t *mag_x, int16_t *mag_y, int16_t *mag_z);#endif
//------------------End of File----------------------------

测试程序

#include <STC15F2K60S2.H>
#include "intrins.h"
#include "stdint.h"
#include "USART.h"
#include "./Software_I2C/Software_I2C.h"
#include "XMC5883L.h"void Delay1ms()		//@16.384MHz
{unsigned char i, j;i = 16;j = 237;do{while (--j);} while (--i);
}void delay_ms(uint32_t ms)
{while(ms --)Delay1ms();
}#define LED_PORT P0void main(void)
{int16_t mag_x, mag_y, mag_z;AUXR &= 0xBF;		//定时器时钟12T模式 1T的51使用12T的定时器程序时需要加入这两句AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器USART_Init(USART_MODE_1, Rx_ENABLE, STC_USART_Priority_Lowest, 16384000, 1200, DOUBLE_BAUD_ENABLE, USART_TIMER_1);xmc5883lInit();while(1){xmc5883lRead(&mag_x, &mag_y, &mag_z);printf("%d,%d,%d\r\n", mag_x, mag_y, mag_z);}
}

实验现象

转动板子,可见数据随之变化。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leaflet加载离线OSM(OpenStreetMap)

转载&#xff1a; https://www.cnblogs.com/RainyBear/p/6011832.html leaflet作为广为应用的开源地图操作的API,是非常受欢迎&#xff0c;轻量级的代码让使用者更容易操作。 废话不多说&#xff0c;下面直接给出范例。 首先在这个网站下载leaflet的压缩包&#xff0c;其中包括…

Nginx 实战(一) 集群环境搭建

Nginx是什么&#xff1f; Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。一直纳闷这个X是怎么来的在网上查了查原来X代表很牛逼的样子&#xff0c;Nginx就是代表一个非常牛逼的引擎服务器系统&#xf…

【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

目录硬知识Python代码使用方法串口收集数据椭球拟合验证STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 Python 3.8.11 (default, Aug 6 2021, 09:57:55) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32 参考资料&…

MATLAB之基本语法之常用命令

1. whos&#xff08;或者who&#xff09; 可以查看command window的变量 当调试MATLAB程序时&#xff0c;该条命令经常用到&#xff01;&#xff01;&#xff01; 2. clc 清除命令窗口内容但是不清除变量 3. clear 清除命令窗口内容并且清除变量 4. …

【51单片机快速入门指南】4.4.2:Mahony AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Mahony_9.cMahony_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 移植自MPU6050 获取角度理论推导(三)—9轴融合算法 —— shao15232_1 传感器…

BZOJ 2160 拉拉队排练

2160: 拉拉队排练 Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点&#xff0c;好的拉拉队往往能帮助球队增加士气&#xff0c;赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道&#xff0c;帮助篮球队训练好拉拉队有多么的重要…

React Native获取设备信息组件

转载 https://www.jianshu.com/p/907b003835dc本文原创首发于公众号&#xff1a;ReactNative开发圈&#xff0c;转载需注明出处。这次介绍的获取移动设备信息的组件名叫&#xff1a;react-native-device-info&#xff0c;兼容IOS和安卓双平台&#xff0c;可以获取设备ID、设备品…

UNIX网络编程——套接字选项(SO_RCVBUF和SO_SNDBUF)

有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项。int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)level指定…

【51单片机快速入门指南】4.4.3:Madgwick AHRS 九轴姿态融合获取四元数、欧拉角

目录传感器的方向源码Madgwick_9.cMadgwick_9.h使用方法测试main.c效果STC15F2K60S2 22.1184MHz Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 移植自AHRS —— LOXO&#xff0c;算法作者&#xff1a;SOH Madgwick 传…

关于json格式字符串解析并用mybatis存入数据库

园子里面找了很多关于json解析后存入数据库的方法&#xff0c;不是太乱&#xff0c;就是没有写完&#xff0c;我下面的主题代码多是受下面两位的启发&#xff0c;请按顺序查看 http://www.cnblogs.com/tian830937/p/6364622.html,我沿用了这个例子中的json数据格式&#xff0c;…

【Hibernate3.3复习知识点二】 - 配置hibernate环境(annotations)

配置文件hibernate.cfg.xml中引入&#xff1a;<mapping class"com.bjsxt.hibernate.Teacher"/> <hibernate-configuration><session-factory><!-- Database connection settings --><property name"connection.driver_class"&g…

【51单片机快速入门指南】4.5:I2C 与 TCA6416实现双向 IO 扩展

目录硬知识IO 扩展芯片 TCA6416ATAC6416A 的寄存器IO 输入寄存器IO 输出寄存器IO 反相寄存器IO 方向寄存器TCA6416A 的操作TCA6416A 写数据TCA6416A 读数据TCA6416A 的 IO 输入寄存器硬件布局示例程序TCA6416A.cTCA6416A.h测试程序main.c实验现象普中51-单核-A2 STC89C52 MSP43…

linux/window 下 solr5.1 tomcat7.x 环境搭建即简单功能测试

2019独角兽企业重金招聘Python工程师标准>>> 之所以想使用solr来进行学习&#xff0c;很大一部分原因就是&#xff0c;solr能够在某种程度上提供RESTFUL相关的URL请求连接&#xff0c;可以把它理解为 以搜索引擎为基础的存储服务系统 &#xff0c;由于他的搜索可以是…

【Java基础总结】多线程

1. 实现多线程的两种方式 1 //第一种&#xff1a;继承Thread类&#xff0c;重写run()方法2 class ThreadTest1 extends Thread{3 public void run(){4 String threadName Thread.currentThread().getName();5 for(int i0;i<10;i){6 System…

【51单片机快速入门指南】5:软件SPI

目录硬知识SPI协议简介SPI接口介绍SPI接口连接图SPI数据传输方向SPI传输模式软件SPI程序源码Soft_SPI.cSoft_SPI.h普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 上位机&#xff1a;Vofa 1.3.10 源于软件模拟SPI接口程序代码&…

svn搭建本地服务端

使用VisualSVN Server来完成,下载地址:https://www.visualsvn.com/server/download/ 我安装的版本是3.3.1,安装的时候选择了标准版本&#xff0c;另外一个版本需要付费(日志跟踪、VDFS等功能)更多可以参考https://www.visualsvn.com/server/licensing/安装完成之后&#xff0c;…

【51单片机快速入门指南】5.1:SPI与DS1302时钟芯片

目录硬知识DS1302 简介DS1302 使用控制寄存器日历/时钟寄存器DS1302 的读写时序电路设计示例程序DS1302.cDS1302.h测试程序main.c实验现象普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《普中 51 单片机开发攻略》…

【格局视野】三色需求与工作层次

三色需求 人们的社会经济生活本身就是一个互相交换&#xff0c;价值传递的循环&#xff0c;但这个循环有一个核心&#xff0c;这个核心就是社会大众的需求&#xff0c;也可以称为市场需求&#xff0c;围绕这个需求产生了层级递进的需求关系。 第一个层次是蓝色需求 是最基础的社…

关于linux-Centos 7下mysql 5.7.9的rpm包的安装方式

环境介绍>>>>>>>>>>>>>>>>>> 操作系统&#xff1a;Centos 7.1 mysql数据库版本&#xff1a;mysql5.7.9 mysql官方网站&#xff1a;http://www.mysql.com 原文地址&#xff1a;http://www.cnblogs.com/5201351/p/4912614…

【51单片机快速入门指南】5.2:SPI读取 12位ADC XPT2046 芯片

目录硬知识ADC 简介分辨率转换误差转换速率ADC 转换原理逐次逼近型 ADC双积分型 ADCXPT2046 芯片介绍参考电压内部参考电压外部参考电压输入工作模式单端工作模式差分工作模式温度测量电池电压测量压力测量数字接口笔中断输出转换周期16 时钟周期转换数字时序15 时钟周期转换数…