当前位置: 首页 > news >正文

深圳网站建设服务便宜python自学

深圳网站建设服务便宜,python自学,网站建设主要工作由哪些,icp备案证书I2C通信 I2C#xff08;Inter IC Bus#xff09;是由Philips公司开发的一种通用数据总线两根通信线#xff1a;SCL#xff08;Serial Clock#xff09;、SDA#xff08;Serial Data#xff09;同步#xff0c;半双工带数据应答支持总线挂载多设备#xff08;一主多从…I2C通信 I2CInter IC Bus是由Philips公司开发的一种通用数据总线两根通信线SCLSerial Clock、SDASerial Data同步半双工带数据应答支持总线挂载多设备一主多从、多主多从使用同步时序可以极大降低单片机对硬件电路的依赖 I2C硬件电路 所有I2C设备的SCL连在一起SDA连在一起设备的SCL和SDA均要配置成开漏输出模式SCL和SDA各添加一个上拉电阻阻值一般为4.7KΩ左右 任何时候都是主机完全掌握SCL在空闲状态下主机可以主动发起对SDA的控制。只有从机在发送数据和从机应答的时候主机才会把SDA的控制权交给从机。 把SDA和SCL想象成一根杆子并且让所有人都不能往上拉只能往下拉或松手之后我们外置一根弹簧到这根杆子上输出低电平就往下拽输出高电平就放手这是一个弱上拉的高电平完全不影响数据传输。 I2C时序基本单元 起始条件SCL高电平期间SDA从高电平切换到低电平 终止条件SCL高电平期间SDA从低电平切换到高电平 发送一个字节SCL低电平期间主机将数据位依次放到SDA线上高位先行然后释放SCL从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可发送一个字节。低电平主机放数据高电平从机读数据。 起始条件后第一个字节必须为主机发送。如果主机想发送0则让拉低SDA到低电平。如果发送1则放手让SDA回弹到高低电平。在SCL低电平期间允许改变SDA电平在SCL高电平期间不允许改变SDA的电平并且是从机读取SDA的时候从机必须尽快读取SDA一般在上升沿时刻就读取完数据。主机放手SCL一段时间后继续拉低SCL传输下一位主机也需要在SCL下降沿之后尽快把数据放在SDA上但主机掌握着时钟的主导权所以在低电平的任意时刻把数据放在SDA上即可。 接收一个字节SCL低电平期间从机将数据位依次放到SDA线上高位先行然后释放SCL主机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化依次循环上述过程8次即可接收一个字节主机在接收之前需要释放SDA。低电平从机放数据高电平主机读数据。 实线是主机控制部分虚线是从机控制部分。 发送应答信号主机在接收完一个字节之后在下一个时钟发送一位数据数据0表示应答数据1表示非应答 接收应答信号主机在发送完一个字节之后在下一个时钟接收一位数据判断从机是否应答数据0表示应答数据1表示非应答主机在接收之前需要释放SDA 主机释放SDA的时候从机就应该把SDA拉下来在SCL高电平期间主机读取应答位应答位为0说明从机确实收到了。 发送应答位目的是告诉从机是不是要继续发如果从机发送一个数据后得到主机的应答说明要继续发送如果主机没有应答则从机停止发送交出SDA的控制权。 I2C时序 指定地址写对于指定设备Slave Address在指定地址Reg Address下写入指定数据Data。 这个数据帧的目的式在指定从机地址1101000的设备在其内部0x19地址的寄存器下写入0xAA数据。 在起始条件后紧跟着的时序必须是发送一个字节的时序字节的内容必须是从机地址读写位。从机地址为7位读写位为1位加起来正好8位。发送从机地址就是确定通信的对象发送读写位就是确定接下来是写入还是读出。紧跟着的单元式接受从机的应答位。 指定地址读对于指定设备Slave Address在指定地址Reg Address下读取从机数据Data。 在Sr前面就是指定地址写后面就是当前地址读。 先起始写入地址停止因为写入的地址会存在地址指针里所以这个地址不会因为时序停止而消失我们可以再起始读当前位置停止。 I2C外设 STM32内部集成了硬件I2C收发电路可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能减轻CPU的负担支持多主机模型支持7位/10位地址模式支持不同的通讯速度标准速度(高达100 kHz)快速(高达400 kHz)支持DMA兼容SMBus协议STM32F103C8T6 硬件I2C资源I2C1、I2C2 I2C框图 SDA的核心部分就是数据寄存器和数据移位寄存器。 发送流程当需要发送数据时可以把一个字节数据写到数据寄存器DR中当移位寄存器没有数据移位时数据寄存器的值就会进一步转到移位寄存器里。在移位的过程中可以把下一个数据放在数据寄存器等着一旦前一个数据移位完成下个数据就可以无缝衔接继续发送。当数据寄存器转到移位寄存器时就会置状态寄存器TXE位为1表示发送寄存器为空。 接收流程输入的数据移一位一位传输到移位寄存器当一个字节数据接收完毕数据整体从移位寄存器转到数据寄存器同时置标志位RXNE表示接收寄存器为非空。 I2C外设基本结构 首先移位寄存器和数据寄存器DR的配合是通信的核心部分因为I2C是高位先行所以移位寄存器是向左移位在发送的时候最高位先移出去然后是次高位等等。一个SCL时钟移位一次移位8次就可以把一个字节由高位到低位一次放到SDA线上。 发送的时候数据先写入数据寄存器如果移位寄存器没有数据再转到移位寄存器进行发送。 接收的时候数据通过GPIO口从右边依次移进来最终移8次一个字节就接收完成了。 使用硬件I2C的时候需要把GPIO口配置成复用开漏输出模式复用GPIO状态是交由片上外设来控制。 主机发送 7位主发送起始条件后的一个字节是寻址。 10位主发送起始条件后的两个字节是寻址。 EVX组合多个标志位的大标志位。 7位主发送流程当检测EV5起始条件已发送后就可以发送一个字节的从机地址从机地址需要写到数据寄存器DR中写入DR之后硬件电路会自动把这个字节转到移位寄存器里再把这个字节发送到I2C总线上之后硬件会自动接收应答并判断如果没有应答就会置失败的标志位这个标志位可以利用中断来提醒。当寻址完成后会发生EV6事件接下来发生EV8_1事件一旦写入DR后DR会立刻转移到移位寄存器进行发送这时就是EV8事件这时就是移位寄存器正在发送数据的状态。EV8结束时数据2写入到数据寄存器等着接收应答位之后数据2就转入移位寄存器进行发送。一旦检测到EV8事件就可以写入下一个数据。最后当我们想发的数据写完之后就没有新数据写入数据寄存器中。当移位寄存器当前数据移位完成时此时是移位寄存器空数据寄存器也空的状态这就是EV8_2事件。 主机接收 首先写入控制寄存器的START位产生起始条件等待EV5事件之后是寻址接收应答A结束后产生EV6事件数据1代表正在通过移位寄存器进行输入。当这个时序单元结束后说明移位寄存器已经成功移入一个字节的数据1移入的一个字节整体转移到数据寄存器。同时置RxNE标志位表示数据寄存器非空也就是收到一个字节的数据这就是EV7事件。当不需要接收时需要在最后一个时序单元发生时提前把应答位控制的寄存器Ack置0并且设置终止条件请求这就是EV7_1事件。在时序完成之后由于之前设置了Ack0所以这里会给出非应答。由于设置了STOP位最后产生终止条件。 MPU6050 MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数通过数据融合可进一步得到姿态角常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计Accelerometer测量X、Y、Z轴的加速度3轴陀螺仪传感器Gyroscope测量X、Y、Z轴的角速度加速度计具有静态稳定性不具有动态稳定性 MUP6050参数 16位ADC采集传感器的模拟信号量化范围-32768~32767加速度计满量程选择±2、±4、±8、±16g如果测量的物体运动非常剧烈可以把满量程选择大一些。反之同理陀螺仪满量程选择 ±250、±500、±1000、±2000°/sec满量程选得越小测量分辨率越高可配置的数字低通滤波器可配置的时钟源可配置的采样分频I2C从机地址1101000AD00 1101001AD01 如果认为0x68是从地址在发送第一个字节需要把0x68左移一位再按位或上读写位。   把0x68左移一位后的数据当作从机地址左移一位是0xD0。在实际发送第一个字节的时候如果需要写就直接把0xD0当作第一个字节如果需要读则把0xD0或0x01即0xD1当作第一个字节。这种操作方式是读写位融入到从机地址中。0xD0是写地址0xD1是读地址。 MPU6050硬件电路 XDA和XCL通常用于外接磁力计或气压计当接上之后MPU6050主机接口可以直接访问扩展芯片的数据。 MPU6050框图 Self test自测模块先使能Self test测得X Accel数据再失能Self test测X Acce数据测出来的数据两个进行相减再根据手册里面数据进行对比看是否在这个区间内在能正常使用。 Interrupt Status Register中断状态寄存器控制内部事件到中断引脚的输出。 FIFO先入先出寄存器对数据流进行缓存。 Config Registers配置寄存器对内部的各个电路进行配置。 Sensor Registers传感器寄存器或数据寄存器存储各个传感器的数据。 Serial Interface Bypass Mux接口旁路选择器如果拨到上面辅助的I2C引脚和正常的I2C引脚接在一起两路总线结合在一起STM32能控制所有设备。如果拨到下面辅助的I2C引脚就由MPU6050控制这时STM32是MPU6050大哥MPU6050是扩展芯片的大哥。 代码部分 I2C软件配置代码 #include Bsp_I2C.h #include Delay.h /* SCL写功能 */ void Bsp_I2C_W_SCL(uint8_t BitValue) {GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);Delay_us(10); }/* SDA写功能 */ void Bsp_I2C_W_SDA(uint8_t BitValue) {GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValue);Delay_us(10); }/* SDA读功能 */ uint8_t Bsp_I2C_R_SDA(void) {uint8_t BitValue;BitValue GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11);Delay_us(10);return BitValue; }/* I2C初始化*/ void Bsp_I2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStructure.GPIO_Pin GPIO_Pin_10 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure); }/* I2C起始条件和重复起始条件(先让SDA置低电平之后让SCL置低电平。为什么要先让他们置高电平是因为防止之后起始的时候SCL先置低电平) */ void Bsp_I2C_Strat(void) {Bsp_I2C_W_SDA(1);Bsp_I2C_W_SCL(1);Bsp_I2C_W_SDA(0);Bsp_I2C_W_SCL(0); } /* I2C终止条件 (为什么要先让SDA置低电平因为SDA不一定是低电平))*/ void Bsp_I2C_Stop(void) {Bsp_I2C_W_SDA(0);Bsp_I2C_W_SCL(1);Bsp_I2C_W_SDA(1); }/* I2C发送数据 */ void Bsp_I2C_SendByte(uint8_t Byte) {for (uint8_t i 0; i 8; i){Bsp_I2C_W_SDA(Byte (0x80 i)); // 只与最高位最终结果为0x80、0x40...为什么最后写进去的是0或1呢因为这个强整型BitActionBsp_I2C_W_SCL(1);Bsp_I2C_W_SCL(0);} }/* I2C接收数据 */ uint8_t Bsp_I2C_ReceiveByte(void) {uint8_t Byte 0x00;Bsp_I2C_W_SDA(1);for (uint8_t i 0; i 8; i){Bsp_I2C_W_SCL(1); if (Bsp_I2C_R_SDA() 1){Byte | (0x80 i);}Bsp_I2C_W_SCL(0); }return Byte; }/* I2C发送应答 */ void Bsp_I2C_WaitSendAck(uint8_t AckBit) {Bsp_I2C_W_SDA(AckBit);Bsp_I2C_W_SCL(1);Bsp_I2C_W_SCL(0); }/* I2C接收应答 */ uint8_t Bsp_I2C_WaitReceiveAck(void) {uint8_t AckBit;Bsp_I2C_W_SDA(1);Bsp_I2C_W_SCL(1);AckBit Bsp_I2C_R_SDA();Bsp_I2C_W_SCL(0);return AckBit; } MPU6050寄存器配置代码 #ifndef __BSP_MPU6050_REG_H #define __BSP_MPU6050_REG_H/* 这些起始把MPU6050寄存器一些关键寄存器地址封装 让我们明了有哪些寄存器 */ #define MPU6050_SMPLRT_DIV 0x19 #define MPU6050_CONFIG 0x1A #define MPU6050_GYRO_CONFIG 0x1B #define MPU6050_ACCEL_CONFIG 0x1C#define MPU6050_ACCEL_XOUT_H 0x3B #define MPU6050_ACCEL_XOUT_L 0x3C #define MPU6050_ACCEL_YOUT_H 0x3D #define MPU6050_ACCEL_YOUT_L 0x3E #define MPU6050_ACCEL_ZOUT_H 0x3F #define MPU6050_ACCEL_ZOUT_L 0x40 #define MPU6050_TEMP_OUT_H 0x41 #define MPU6050_TEMP_OUT_L 0x42 #define MPU6050_GYRO_XOUT_H 0x43 #define MPU6050_GYRO_XOUT_L 0x44 #define MPU6050_GYRO_YOUT_H 0x45 #define MPU6050_GYRO_YOUT_L 0x46 #define MPU6050_GYRO_ZOUT_H 0x47 #define MPU6050_GYRO_ZOUT_L 0x48#define MPU6050_PWR_MGMT_1 0x6B #define MPU6050_PWR_MGMT_2 0x6C #define MPU6050_WHO_AM_I 0x75#endif MPU6050配置代码 Bsp_MPU6050.h代码 #ifndef __BSP_MPU6050_H #define __BSP_MPU6050_H#include stm32f10x.h #include Bsp_MPU6050_Reg.h #include Bsp_I2C.hvoid MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data); uint8_t MPU6050_ReadReg(uint8_t RegAddress); void MPU6050_GetData(void); uint8_t MPU6050_IDGet(void); void MPU6050_Init(void);typedef struct {int16_t AccX;int16_t AccY;int16_t AccZ;int16_t GyroX;int16_t GyroY;int16_t GyroZ; }MPU6050_Data;#endif Bsp_MPU6050.c代码 #include Bsp_MPU6050.h#define MPU6050_Address 0xD0 // 定义MPU6050地址MPU6050_Data Data;/* MPU6050的I2C写数据 */ void MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data) {Bsp_I2C_Strat();Bsp_I2C_SendByte(MPU6050_Address); // 发送从机地址Bsp_I2C_WaitReceiveAck(); // 等待接收应答Bsp_I2C_SendByte(RegAddress); // 发送寄存器地址Bsp_I2C_WaitReceiveAck();Bsp_I2C_SendByte(Data); // 发送数据这里还可以写for循环写入多个数据Bsp_I2C_WaitReceiveAck();Bsp_I2C_Stop(); }/* MPU6050的I2C读数据 */ uint8_t MPU6050_ReadReg(uint8_t RegAddress) {uint8_t Data;Bsp_I2C_Strat();Bsp_I2C_SendByte(MPU6050_Address);Bsp_I2C_WaitReceiveAck(); Bsp_I2C_SendByte(RegAddress);Bsp_I2C_WaitReceiveAck();Bsp_I2C_Strat();Bsp_I2C_SendByte(MPU6050_Address | 0x01); // 改为读Bsp_I2C_WaitReceiveAck();Data Bsp_I2C_ReceiveByte(); // 这里可以写for循环读多个数据但完成前的所有从机给 应答 都给0最后一个从机给 非应答 给1Bsp_I2C_WaitSendAck(1); // 0给从机应答 1不给从机应答Bsp_I2C_Stop();return Data; }/* MPU6050初始化 配置完成后陀螺仪内部就在不断进行数据转换输出的数据就在数据寄存器里如果想获取数据读取相应的寄存器就即可 */ void MPU6050_Init(void) {Bsp_I2C_Init();MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01); // 解除睡眠选择陀螺仪时钟MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00); // 6个轴均不待机MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09); // 10分频MPU6050_WriteReg(MPU6050_CONFIG, 0x06); // 滤波参数选择(这里选择最大)MPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18); // 陀螺仪量程选择(这里选择最大量程)MPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18); // 加速度量程选择(这里选择最大量程) }/* 获取MPU6050数据 */ void MPU6050_GetData(void) {uint8_t DataH, DataL; // 定义数据高位和低位DataH MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H); // 读MPU6050_ACCEL_XOUT_H寄存器的高八位DataL MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L); // 读MPU6050_ACCEL_XOUT_L寄存器的低八位Data.AccX (DataH 8) | DataL; // 高八位左移八位再与上第八位就可以得到16位数据DataH MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);Data.AccY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);Data.AccZ (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);Data.GyroX (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);Data.GyroY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);Data.GyroZ (DataH 8) | DataL; }/* 获取ID */ uint8_t MPU6050_IDGet(void) {return MPU6050_ReadReg(MPU6050_WHO_AM_I); } I2C硬件配置代码 #include Bsp_MPU6050.h#define MPU6050_Address 0xD0 // 定义MPU6050地址MPU6050_Data Data;/* 对I2C_CheakEvent进行封装 加入了超时退出机制 */ void MPU6050_WaitCheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT) {uint32_t TimeOut;while (I2C_CheckEvent(I2Cx, I2C_EVENT) ! SUCCESS){TimeOut --;if (TimeOut 0){break;} } }/* MPU6050的I2C写数据 */ void MPU6050_WriteReg(uint8_t RegAddress, uint8_t Data) {I2C_GenerateSTART(I2C2, ENABLE); // 起始MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT); // 等待EV5事件I2C_Send7bitAddress(I2C2, MPU6050_Address, I2C_Direction_Transmitter); // 发送地址MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED); // 等待EV6事件 I2C_SendData(I2C2, RegAddress);MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING); // 等待EV8事件I2C_SendData(I2C2, Data); MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED); // 等待EV8_2事件因为到这里就结束了I2C_GenerateSTOP(I2C2, ENABLE); // 终止 } /* 在程序中大量的死循环等待非常危险一旦一个环节没有产生则会产生死循环。所以对这种情况可以加入超时退出机制 */ /* MPU6050的I2C读数据 */ uint8_t MPU6050_ReadReg(uint8_t RegAddress) {uint8_t Data;I2C_GenerateSTART(I2C2, ENABLE);MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT); // 等待EV5事件I2C_Send7bitAddress(I2C2, MPU6050_Address, I2C_Direction_Transmitter); // 从机地址发送模式MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED); // 等待EV6事件I2C_SendData(I2C2, RegAddress);MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED); // 等待EV8事件// 重新启动I2C_GenerateSTART(I2C2, ENABLE);MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT); // 等待EV5事件I2C_Send7bitAddress(I2C2, MPU6050_Address, I2C_Direction_Receiver); // 从机地址接收模式MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED); // 等待EV6事件I2C_AcknowledgeConfig(I2C2, DISABLE); // 在接收最后一个字节之前需要临时把ACK置0。I2C_GenerateSTOP(I2C2, ENABLE);MPU6050_WaitCheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED); // 等待EV7_1事件 因为这里只读取了一个字节所以就要立刻把Ack置0STOP置1Data I2C_ReceiveData(I2C2); // 如果需要指定多个地址那么需要在47-51加for循环并在最后一个字节的时候利用if加入47和48行代码。I2C_AcknowledgeConfig(I2C2, ENABLE);return Data; }/* MPU6050初始化 配置完成后陀螺仪内部就在不断进行数据转换输出的数据就在数据寄存器里如果想获取数据读取相应的寄存器就即可 */ void MPU6050_Init(void) {// Bsp_I2C_Init();RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStrcuture;GPIO_InitStrcuture.GPIO_Mode GPIO_Mode_AF_OD; // 引脚模式为复用开漏输出GPIO_InitStrcuture.GPIO_Pin GPIO_Pin_11 | GPIO_Pin_10;GPIO_InitStrcuture.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStrcuture);I2C_InitTypeDef I2C_InitStructure;I2C_InitStructure.I2C_Ack I2C_Ack_Enable; // 开启应答位I2C_InitStructure.I2C_AcknowledgedAddress I2C_AcknowledgedAddress_7bit; // 选择7位地址还是确认10位地址这里选择7位地址I2C_InitStructure.I2C_ClockSpeed 100000; // 通讯速度这里选择标准哦通信速度100KHZI2C_InitStructure.I2C_DutyCycle I2C_DutyCycle_2; // I2C快速模式占空比I2C_InitStructure.I2C_Mode I2C_Mode_I2C; // 选择I2C模式I2C_InitStructure.I2C_OwnAddress1 0x00; // 设备自身地址(如果选择7位地址就要写自身的7位地址10位同理)I2C_Init(I2C2, I2C_InitStructure);I2C_Cmd(I2C2, ENABLE);MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01); // 解除睡眠选择陀螺仪时钟MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00); // 6个轴均不待机MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09); // 10分频MPU6050_WriteReg(MPU6050_CONFIG, 0x06); // 滤波参数选择(这里选择最大)MPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18); // 陀螺仪量程选择(这里选择最大量程)MPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18); // 加速度量程选择(这里选择最大量程)}/* 获取MPU6050数据 */ void MPU6050_GetData(void) {uint8_t DataH, DataL; // 定义数据高位和低位DataH MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H); // 读MPU6050_ACCEL_XOUT_H寄存器的高八位DataL MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L); // 读MPU6050_ACCEL_XOUT_L寄存器的低八位Data.AccX (DataH 8) | DataL; // 高八位左移八位再与上第八位就可以得到16位数据DataH MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);Data.AccY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);Data.AccZ (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);Data.GyroX (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);Data.GyroY (DataH 8) | DataL;DataH MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);DataL MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);Data.GyroZ (DataH 8) | DataL; }/* 获取ID */ uint8_t MPU6050_IDGet(void) {return MPU6050_ReadReg(MPU6050_WHO_AM_I); }
http://www.sadfv.cn/news/15269/

相关文章:

  • 重庆市建设信息网站设计签名免费网站
  • 企业网站管理系统下载什么是网络营销环境
  • 淮安做网站杨凯网络营销与直播电商学什么
  • 清华紫光是可以做网站的吗php网站开发个人职责
  • 南通电子商务网站建设济南网站建设v芯企优互联不错
  • 下载类网站 前置备案靳刘高设计公司官网
  • 专业做网站哪家好wordpress主题的连接函数
  • 儿童网站网页设计微信上做网站怎么做
  • 保定 网站建设牡丹江网站seo
  • 该去哪里购买网站域名和空间天津网页制作网页报价
  • 昆山做网站找文博虚拟机安装 wordpress
  • 龙华做棋牌网站建设哪家好企业外贸网站建设方案
  • 女装网站欣赏北京诚通新新建设有限公司网站
  • 青浦郑州阳网站建设访问wordpress时失败
  • 丹阳网站建设效果简单的手机网页制作
  • 山东网站建设维护网站建设开发综合实训小结
  • 网站鼠标特效建筑工地新型材料模板
  • 常州转化率网站建设公司怎么样肇庆seo霸屏
  • 天津网站建设优选企业网站策划书的内容
  • 重庆招聘网站有哪些济南建站服务商
  • 网站套餐到期什么意思网站模板 站长之家
  • 昆明做网站建设找谁网页设计图片之间空隙
  • 什么是wap网站广东省公共资源交易中心平台
  • 质监站网址修改wordpress登录背景图
  • ppt做的好的有哪些网站有哪些wordpress去掉.php
  • dede模板用图片多的网站不行网站建设的知识和技能
  • 90设计网站终身会员秋佐科技公司网站
  • 网站建设企业关键词商标购买网商标
  • 公司网络推广网站就选火13星仁德定制微信免费下载
  • 怎么给你新网站做seo长沙企业名录黄页