国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32】STM32學習筆記-硬件I2C讀寫MPU6050(35)

這篇具有很好參考價值的文章主要介紹了【STM32】STM32學習筆記-硬件I2C讀寫MPU6050(35)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

00. 目錄

01. I2C簡介

I2C(Inter-Integrated Circuit)總線是一種由NXP(原PHILIPS)公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。多用于主控制器和從器件間的主從通信,在小數(shù)據(jù)量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。

串行的 8 位雙向數(shù)據(jù)傳輸位速率在標準模式下可達 100kbit/s,快速模式下可達 400kbit/s,高速模式下可達 3.4Mbit/s。

I2C是一個多主機的總線,每個設(shè)備既可以當主控器或被控器,又可作為發(fā)送器或接收器,一條總線上可以有多個主機,但同一時刻只允許一個主機工作。

02. MPU6050

?MPU6050是一個6軸姿態(tài)傳感器,可以測量芯片自身X、Y、Z軸的加速度、角速度參數(shù),通過數(shù)據(jù)融合,可進一步得到姿態(tài)角,常應(yīng)用于平衡車、飛行器等需要檢測自身姿態(tài)的場景

?3軸加速度計(Accelerometer):測量X、Y、Z軸的加速度

?3軸陀螺儀傳感器(Gyroscope):測量X、Y、Z軸的角速度

03. I2C相關(guān)API

3.1 I2C_Init

/**
  * @brief  Initializes the I2Cx peripheral according to the specified 
  *   parameters in the I2C_InitStruct.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  I2C_InitStruct: pointer to a I2C_InitTypeDef structure that
  *   contains the configuration information for the specified I2C peripheral.
  * @retval None
  */
void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct)
功能:
	根據(jù) I2C_InitStruct 中指定的參數(shù)初始化外設(shè) I2Cx 寄存器
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   I2C_InitStruct:指向結(jié)構(gòu) I2C_InitTypeDef 的指針,包含了外設(shè) GPIO 的配置信息
返回值:

3.2 I2C_InitTypeDef

/** 
  * @brief  I2C Init structure definition  
  */

typedef struct
{
  uint32_t I2C_ClockSpeed;          /*!< Specifies the clock frequency.
                                         This parameter must be set to a value lower than 400kHz */
  uint16_t I2C_Mode;                /*!< Specifies the I2C mode.
                                         This parameter can be a value of @ref I2C_mode */
  uint16_t I2C_DutyCycle;           /*!< Specifies the I2C fast mode duty cycle.
                                         This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */
  uint16_t I2C_OwnAddress1;         /*!< Specifies the first device own address.
                                         This parameter can be a 7-bit or 10-bit address. */
  uint16_t I2C_Ack;                 /*!< Enables or disables the acknowledgement.
                                         This parameter can be a value of @ref I2C_acknowledgement */
  uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.
                                         This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;

I2C_Mode

/** @defgroup I2C_mode 
  * @{
  */

#define I2C_Mode_I2C                    ((uint16_t)0x0000)
#define I2C_Mode_SMBusDevice            ((uint16_t)0x0002)  
#define I2C_Mode_SMBusHost              ((uint16_t)0x000A)

I2C_DutyCycle

/** @defgroup I2C_duty_cycle_in_fast_mode 
  * @{
  */

#define I2C_DutyCycle_16_9              ((uint16_t)0x4000) /*!< I2C fast mode Tlow/Thigh = 16/9 */
#define I2C_DutyCycle_2                 ((uint16_t)0xBFFF) /*!< I2C fast mode Tlow/Thigh = 2 */

I2C_OwnAddress1


I2C_Ack

/** @defgroup I2C_acknowledgement
  * @{
  */

#define I2C_Ack_Enable                  ((uint16_t)0x0400)
#define I2C_Ack_Disable                 ((uint16_t)0x0000)

I2C_AcknowledgedAddress

/** @defgroup I2C_acknowledged_address 
  * @{
  */

#define I2C_AcknowledgedAddress_7bit    ((uint16_t)0x4000)
#define I2C_AcknowledgedAddress_10bit   ((uint16_t)0xC000)

3.3 I2C_Cmd

/**
  * @brief  Enables or disables the specified I2C peripheral.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  NewState: new state of the I2Cx peripheral. 
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None
  */
void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:
	使能或者失能 I2C 外設(shè)
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   NewState: 外設(shè) I2Cx 的新狀態(tài),這個參數(shù)可以取:ENABLE 或者 DISABLE
返回值:

3.4 I2C_GenerateSTART

/**
  * @brief  Generates I2Cx communication START condition.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  NewState: new state of the I2C START condition generation.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None.
  */
void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:
	產(chǎn)生 I2Cx 傳輸 START 條件
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   NewState: I2Cx START 條件的新狀態(tài), 這個參數(shù)可以?。篍NABLE 或者 DISABLE
返回值:

3.5 I2C_GenerateSTOP

/**
  * @brief  Generates I2Cx communication STOP condition.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  NewState: new state of the I2C STOP condition generation.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None.
  */
void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:
	產(chǎn)生 I2Cx 傳輸 STOP 條件
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   NewState: I2Cx STOP 條件的新狀態(tài), 這個參數(shù)可以?。篍NABLE 或者 DISABLE
返回值:

3.6 I2C_AcknowledgeConfig

/**
  * @brief  Enables or disables the specified I2C acknowledge feature.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  NewState: new state of the I2C Acknowledgement.
  *   This parameter can be: ENABLE or DISABLE.
  * @retval None.
  */
void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:
	使能或者失能指定 I2C 的應(yīng)答功能
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   NewState: I2Cx 應(yīng)答的新狀態(tài), 這個參數(shù)可以取:ENABLE 或者 DISABLE
返回值:

3.7 I2C_SendData

/**
  * @brief  Sends a data byte through the I2Cx peripheral.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  Data: Byte to be transmitted..
  * @retval None
  */
void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data)
功能:
	通過外設(shè) I2Cx 發(fā)送一個數(shù)據(jù)
參數(shù):
   I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
   Data: 待發(fā)送的數(shù)據(jù)
返回值:

3.8 I2C_ReceiveData

/**
  * @brief  Returns the most recent received data by the I2Cx peripheral.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @retval The value of the received data.
  */
uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx)
功能:
	返回通過 I2Cx 最近接收的數(shù)據(jù)
參數(shù):
    I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
返回值:
	接收到的字        
    

3.9 I2C_Send7bitAddress

/**
  * @brief  Transmits the address byte to select the slave device.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  Address: specifies the slave address which will be transmitted
  * @param  I2C_Direction: specifies whether the I2C device will be a
  *   Transmitter or a Receiver. This parameter can be one of the following values
  *     @arg I2C_Direction_Transmitter: Transmitter mode
  *     @arg I2C_Direction_Receiver: Receiver mode
  * @retval None.
  */
void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction)
功能:
	向指定的從 I2C 設(shè)備傳送地址字
參數(shù):
    I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
    Address: 待傳輸?shù)膹?I2C 地址
    I2C_Direction:設(shè)置指定的 I2C 設(shè)備工作為發(fā)射端還是接收端    
返回值:

3.10 I2C_CheckEvent

/**
  * @brief  Checks whether the last I2Cx Event is equal to the one passed
  *   as parameter.
  * @param  I2Cx: where x can be 1 or 2 to select the I2C peripheral.
  * @param  I2C_EVENT: specifies the event to be checked. 
  *   This parameter can be one of the following values:
  *     @arg I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED           : EV1
  *     @arg I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED              : EV1
  *     @arg I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED     : EV1
  *     @arg I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED        : EV1
  *     @arg I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED            : EV1
  *     @arg I2C_EVENT_SLAVE_BYTE_RECEIVED                         : EV2
  *     @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)      : EV2
  *     @arg (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)    : EV2
  *     @arg I2C_EVENT_SLAVE_BYTE_TRANSMITTED                      : EV3
  *     @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)   : EV3
  *     @arg (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL) : EV3
  *     @arg I2C_EVENT_SLAVE_ACK_FAILURE                           : EV3_2
  *     @arg I2C_EVENT_SLAVE_STOP_DETECTED                         : EV4
  *     @arg I2C_EVENT_MASTER_MODE_SELECT                          : EV5
  *     @arg I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED            : EV6     
  *     @arg I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED               : EV6
  *     @arg I2C_EVENT_MASTER_BYTE_RECEIVED                        : EV7
  *     @arg I2C_EVENT_MASTER_BYTE_TRANSMITTING                    : EV8
  *     @arg I2C_EVENT_MASTER_BYTE_TRANSMITTED                     : EV8_2
  *     @arg I2C_EVENT_MASTER_MODE_ADDRESS10                       : EV9
  *     
  * @note: For detailed description of Events, please refer to section 
  *    I2C_Events in stm32f10x_i2c.h file.
  *    
  * @retval An ErrorStatus enumeration value:
  * - SUCCESS: Last event is equal to the I2C_EVENT
  * - ERROR: Last event is different from the I2C_EVENT
  */
ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT)
功能:
	檢查指定的I2C的標志
參數(shù):
    I2Cx:x 可以是 1 或者 2,來選擇 I2C 外設(shè)
    I2C_Event:待檢查的事件
返回值:
	ErrorStatus 枚舉值:
	SUCCESS:最近一次 I2C 事件是 I2C_Event
    ERROR:最近一次 I2C 事件不是 I2C_Event

04. 硬件I2C讀寫MPU6050接線圖

【STM32】STM32學習筆記-硬件I2C讀寫MPU6050(35),STM32F103,stm32,學習,筆記,I2C,江科大,江科大stm32

05. 硬件I2C讀寫MPU6050示例

MPU6050.h

#ifndef __MPU6050_H__

#define __MPU6050_H__


#include "mpu6050.h"
#include "stm32f10x.h" 


#define MPU6050_ADDRESS		    0xD0

#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




void MPU6050_WriteReg(uint8_t regAddr, uint8_t data);
uint8_t MPU6050_ReadReg(uint8_t regAddr);
void MPU6050_init(void);
uint8_t MPU6050_getId(void);
void MPU6050_getData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, 
						int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ);


#endif /*__MPU6050_H__*/

MPU6050.c

#include "mpu6050.h"

void MPU6050_WaitEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT)
{
	uint32_t timeout;
	timeout = 100000;
	
	while(I2C_CheckEvent(I2Cx, I2C_EVENT) != SUCCESS)
	{
		timeout--;
		if (0 == timeout)
		{
			break;
		}
	}
}



void MPU6050_WriteReg(uint8_t regAddr, uint8_t data)
{
	//發(fā)送起始條件
	I2C_GenerateSTART(I2C2, ENABLE);
	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);
	
	//發(fā)送7位地址
	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);
	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);
	
	//發(fā)送寄存器地址
	I2C_SendData(I2C2, regAddr);
		MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTING);
	
	//發(fā)送數(shù)據(jù)
	I2C_SendData(I2C2, data);
		MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);
	
	//發(fā)送停止位
	I2C_GenerateSTOP(I2C2, ENABLE);
	
}

uint8_t MPU6050_ReadReg(uint8_t regAddr)
{
	uint8_t data = 0;
	
	//發(fā)送起始條件
	I2C_GenerateSTART(I2C2, ENABLE);
		MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);
	
	//發(fā)送7位地址
	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Transmitter);
	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED);
	
	//發(fā)送寄存器地址
	I2C_SendData(I2C2, regAddr);
		MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED);
	
	//發(fā)送起始條件
	I2C_GenerateSTART(I2C2, ENABLE);
	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT);
	
	//發(fā)送7位地址
	I2C_Send7bitAddress(I2C2, MPU6050_ADDRESS, I2C_Direction_Receiver);
	MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED);
	
	I2C_AcknowledgeConfig(I2C2, DISABLE);
	I2C_GenerateSTOP(I2C2, ENABLE);
	
		MPU6050_WaitEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED);
	data = I2C_ReceiveData(I2C2);
	
	I2C_AcknowledgeConfig(I2C2, ENABLE);
	
	
	return data;
}


void MPU6050_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	I2C_InitTypeDef I2C_InitStruct;
	
	//I2C初始化
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
	
		
	//PB10 PB11
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
	I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
	I2C_InitStruct.I2C_ClockSpeed = 50000;
	I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
	I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
	I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
	I2C_InitStruct.I2C_OwnAddress1 = 0x00;
	I2C_Init(I2C2, &I2C_InitStruct);
	
	//使能I2C
	I2C_Cmd(I2C2, ENABLE);
	
	
	MPU6050_WriteReg(MPU6050_PWR_MGMT_1, 0x01);
	MPU6050_WriteReg(MPU6050_PWR_MGMT_2, 0x00);
	MPU6050_WriteReg(MPU6050_SMPLRT_DIV, 0x09);
	MPU6050_WriteReg(MPU6050_CONFIG, 0x06);
	MPU6050_WriteReg(MPU6050_GYRO_CONFIG, 0x18);
	MPU6050_WriteReg(MPU6050_ACCEL_CONFIG, 0x18);
}

uint8_t MPU6050_getId(void)
{
	return MPU6050_ReadReg(MPU6050_WHO_AM_I);
}

void MPU6050_getData(int16_t *AccX, int16_t *AccY, int16_t *AccZ, 
						int16_t *GyroX, int16_t *GyroY, int16_t *GyroZ)
{
	uint8_t DataH, DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_ACCEL_XOUT_L);
	*AccX = (DataH << 8) | DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_ACCEL_YOUT_L);
	*AccY = (DataH << 8) | DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_ACCEL_ZOUT_L);
	*AccZ = (DataH << 8) | DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_GYRO_XOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_GYRO_XOUT_L);
	*GyroX = (DataH << 8) | DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_GYRO_YOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_GYRO_YOUT_L);
	*GyroY = (DataH << 8) | DataL;
	
	DataH = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_H);
	DataL = MPU6050_ReadReg(MPU6050_GYRO_ZOUT_L);
	*GyroZ = (DataH << 8) | DataL;
}

main.c

#include "stm32f10x.h"

#include "delay.h"
#include "oled.h"
#include "mpu6050.h"


 int main(void)
 {	 
	 uint8_t data = 0;
	 int16_t AX, AY, AZ, GX, GY, GZ;

	 //初始化
	 OLED_Init();
	 MPU6050_init();
	 
	 data = MPU6050_getId();
	 OLED_ShowString(1, 1, "ID: ");
	 OLED_ShowHexNum(1, 5, data, 3);
	 
 
	 while(1)
	 {
		
		MPU6050_getData(&AX, &AY, &AZ, &GX, &GY, &GZ);
		OLED_ShowSignedNum(2, 1, AX, 5);
		OLED_ShowSignedNum(3, 1, AY, 5);
		OLED_ShowSignedNum(4, 1, AZ, 5);
		OLED_ShowSignedNum(2, 8, GX, 5);
		OLED_ShowSignedNum(3, 8, GY, 5);
		OLED_ShowSignedNum(4, 8, GZ, 5);
		
		 delay_ms(100);
		 
	 }
	 
	 return 0;
 }


 

06. 程序下載

29-硬件I2C讀寫MPU6050.rar

07. 附錄

參考: 【STM32】江科大STM32學習筆記匯總文章來源地址http://www.zghlxwxcb.cn/news/detail-822422.html

到了這里,關(guān)于【STM32】STM32學習筆記-硬件I2C讀寫MPU6050(35)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32學習筆記(十)丨I2C通信(使用I2C實現(xiàn)MPU6050和STM32之間通信)

    STM32學習筆記(十)丨I2C通信(使用I2C實現(xiàn)MPU6050和STM32之間通信)

    ???本次課程采用單片機型號為STM32F103C8T6。(鑒于筆者實驗時身邊只有STM32F103ZET6,故本次實驗使基于ZET6進行的) ???課程鏈接:江協(xié)科技 STM32入門教程 ??往期筆記鏈接: ??STM32學習筆記(一)丨建立工程丨GPIO 通用輸入輸出 ??STM32學習筆記(二)丨STM32程序調(diào)試

    2024年01月19日
    瀏覽(26)
  • 01_STM32軟件+硬件I2C讀取MPU6050(HAL庫)

    01_STM32軟件+硬件I2C讀取MPU6050(HAL庫)

    目錄 1、I2C簡介 2、I2C時序單元 2.1 起始條件 2.2 終止條件 2.3 發(fā)送一個字節(jié) 2.4 接收一個字節(jié) 2.5 發(fā)送應(yīng)答 2.6 接收應(yīng)答 3、I2C完整時序 3.1 指定地址寫一個字節(jié) 3.2 當前地址讀一個字節(jié) 3.2?指定地址讀一個字節(jié) 4、簡單軟件I2C代碼(HAL) 4.1 軟件I2C 4.2 軟件I2C讀MPU6050寄存器 5、ST

    2024年04月17日
    瀏覽(29)
  • STM32F407硬件I2C實現(xiàn)MPU6050通訊(CUBEIDE)

    STM32F407硬件I2C實現(xiàn)MPU6050通訊(CUBEIDE)

    工程代碼 https://download.csdn.net/download/weixin_52849254/87886714 I2C1通道可選擇三種不同的通訊協(xié)議:I2C、SMBus-Alert-mode、SMBus-two-wire-Interface。 SMBus (System Management Bus,系統(tǒng)管理總線), 為系統(tǒng)和電源管理這樣的任務(wù)提供了一條控制總線,SMBus與I2C總線之間在時序特性上存在一些差別 修改

    2024年02月09日
    瀏覽(18)
  • STM32軟件I2C驅(qū)動MPU6050

    STM32軟件I2C驅(qū)動MPU6050

    這里沒有什么復(fù)雜的地方,采用MPU6050的現(xiàn)成模塊.模塊的SCL接B10,SDA接B11,這里連接了一個OLED顯示屏,用于顯示獲取到的數(shù)據(jù). 注意:這里使用的模塊自帶上拉電阻 首先在工程目錄里創(chuàng)建: \\\"MyI2C.h\\\"和\\\"MyI2C.c\\\"文件,用于軟件驅(qū)動I2C. \\\"MPU6050.h\\\",\\\"MPU6050.c\\\"和\\\"MPU6050Reg.h\\\"文件,用于MPU6050的驅(qū)動. 在

    2024年02月15日
    瀏覽(22)
  • STM32--MPU6050與I2C外設(shè)

    STM32--MPU6050與I2C外設(shè)

    在51單片機專欄中,用過I2C通信來進行實現(xiàn)AT24C02的數(shù)據(jù)存儲; 里面介紹的是 利用程序的編程來實現(xiàn)I2C的時序 ,進而實現(xiàn)AT24C02與單片機之間的關(guān)系連接; 本章將介紹使用I2C的硬件外設(shè)來實現(xiàn)I2C通信,和介紹MPU6050,利用I2C通信實現(xiàn)STM32對MPU6050的控制. I2C通信軟件實現(xiàn)程序鏈接

    2024年02月11日
    瀏覽(28)
  • STM32 I2C通訊+MPU6050通訊演示

    STM32 I2C通訊+MPU6050通訊演示

    1.I2C通訊簡介 I2C(Inter IC Bus)是由Philips公司開發(fā)的一種通用數(shù)據(jù)總線; 兩根通信線:SCL(Serial Clock)、SDA(Serial Data); 同步,半雙工,帶數(shù)據(jù)應(yīng)答; 支持總線掛載多設(shè)備(一主多從、多主多從) 2.硬件電路 所有I2C設(shè)備的SCL連在一起,SDA連在一起; 設(shè)備的SCL和SDA均要配置

    2024年01月21日
    瀏覽(23)
  • 【STM32】I2C練習,HAL庫讀取MPU6050角度陀螺儀

    【STM32】I2C練習,HAL庫讀取MPU6050角度陀螺儀

    MPU-6000(6050)為全球首例整合性6軸運動處理組件,相較于多組件方案,免除了組合陀螺儀與加速器時間軸之差的問題,減少了大量的封裝空間。當連接到三軸磁強計時,MPU-60X0提供完整的9軸運動融合輸出到其主I2C或SPI端口(SPI僅在MPU-6000上可用)。 寄存器地址 寄存器內(nèi)容 0X3B

    2024年02月16日
    瀏覽(28)
  • 【STM32】AT24C256硬件I2C讀寫,基于HAL庫

    【STM32】AT24C256硬件I2C讀寫,基于HAL庫

    目錄 一、簡單介紹 二、配置工程 打開CubeMX,配置時鐘,調(diào)試接口,工程名,目錄等 配置iic 配置串口用于顯示信息 三、硬件連接 四、代碼編寫 一、隨機寫入一個字節(jié) 測試代碼 波形如下 代碼編寫 二、連續(xù)寫入 代碼如下 三、隨機讀取 測試代碼 波形如下 代碼編寫 四、連續(xù)

    2024年02月03日
    瀏覽(41)
  • 26、江科大stm32視頻學習筆記——I2C讀寫W25Q64

    26、江科大stm32視頻學習筆記——I2C讀寫W25Q64

    一、W25Q64簡介 1、W25Q64的內(nèi)存空間結(jié)構(gòu): ?一頁256字節(jié),4K(4096 字節(jié))為一個扇區(qū),16個扇區(qū)為1塊,容量為8M字節(jié),共有128個塊,2048 個扇區(qū)。 ? 2、W25Q64每頁大小由256字節(jié)組成,每頁的256字節(jié)用一次頁編程指令即可完成。 3、擦除指令分別支持: 16頁(1個扇區(qū))、128頁、256頁、全片

    2024年01月25日
    瀏覽(19)
  • STM32基于HAL工程硬件I2C讀寫AT24C02/04/08數(shù)據(jù)

    STM32基于HAL工程硬件I2C讀寫AT24C02/04/08數(shù)據(jù)

    ?申明:本文章僅發(fā)表在CSDN網(wǎng)站,任何其他網(wǎng)站,未注明來源,見此內(nèi)容均為盜鏈和爬取,請多多尊重和支持原創(chuàng)! ??對于文中所提供的相關(guān)資源鏈接將作不定期更換。 相關(guān)篇針對AT24C32及以上容量《STM32基于STM32-HAL工程硬件I2C讀取AT24Cxx數(shù)據(jù)》 ??本工程使用STM32F103VE+AT24C02實

    2023年04月11日
    瀏覽(38)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包