久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32通過IIC協(xié)議使用MPU6050源程序
[打印本頁]
作者:
超大俠
時(shí)間:
2021-8-6 10:42
標(biāo)題:
STM32通過IIC協(xié)議使用MPU6050源程序
/********************************************
* 硬件連接:-----------------
* | |
* | PB6-I2C1_SCL |
* | PB7-I2C1_SDA |
* | |
* -----------------
* 庫版本 :ST3.5.0
* 作者 : Orange
**********************************************************************************/
#include "I2C_MPU6050.h"
/*
* 函數(shù)名:I2C_GPIO_Config
* 描述 :I2C1 I/O配置
* 輸入 :無
* 輸出 :無
* 調(diào)用 :內(nèi)部調(diào)用
*/
static void I2C_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 使能與 I2C1 有關(guān)的時(shí)鐘 */
RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOB,ENABLE );
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
/* PB6-I2C1_SCL、PB7-I2C1_SDA*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
/*
* 函數(shù)名:I2C_Mode_Config
* 描述 :I2C 工作模式配置
* 輸入 :無
* 輸出 :無
* 調(diào)用 :內(nèi)部調(diào)用
*/
static void I2C_Mode_Config(void)
{
/* Initialize the I2C1 according to the I2C_InitStructure members */
I2C_InitTypeDef I2C_InitStructure;
/* I2C 配置 */
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C ;
//I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
//I2C_InitStructure.I2C_OwnAddress1 = SlaveAddress;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 50000;
/* I2C1 初始化 */
I2C_Init(I2C1, &I2C_InitStructure);
/* 使能 I2C1 */
I2C_Cmd (I2C1,ENABLE);
/*允許應(yīng)答模式*/
I2C_AcknowledgeConfig(I2C1, ENABLE);
}
/***************************************************************************************/
/*
* 函數(shù)名:I2C_MMA_Init
* 描述 :I2C 外設(shè)(MMA7455)初始化
* 輸入 :無
* 輸出 :無
* 調(diào)用 :外部調(diào)用
*/
void I2C_MPU6050_Init(void)
{
I2C_GPIO_Config();
I2C_Mode_Config();
}
/*
* 函數(shù)名:I2C_ByteWrite
* 描述 :寫一個(gè)字節(jié)到I2C設(shè)備寄存器中
* 輸入 :REG_Address 接收數(shù)據(jù)的IIC設(shè)備寄存器的地址
* REG_data 待寫入的數(shù)據(jù)
* 輸出 :無
* 返回 :無
* 調(diào)用 :內(nèi)部調(diào)用
*/
void I2C_ByteWrite(uint8_t REG_Address,uint8_t REG_data)
{
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1,REG_Address);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1,REG_data);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1,ENABLE);
}
/*
* 函數(shù)名:I2C_ByteRead
* 描述 :從IIC設(shè)備寄存器中讀取一個(gè)字節(jié)
* 輸入 :REG_Address 讀取數(shù)據(jù)的寄存器的地址
* 輸出 :無
* 返回 :無
* 調(diào)用 :內(nèi)部調(diào)用
*/
uint8_t I2C_ByteRead(uint8_t REG_Address)
{
uint8_t REG_data;
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1,ENABLE);//起始信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Transmitter);//發(fā)送設(shè)備地址+寫信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//
I2C_Cmd(I2C1,ENABLE);
I2C_SendData(I2C1,REG_Address);//發(fā)送存儲單元地址,從0開始
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1,ENABLE);//起始信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,SlaveAddress,I2C_Direction_Receiver);//發(fā)送設(shè)備地址+讀信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
I2C_AcknowledgeConfig(I2C1,DISABLE);
I2C_GenerateSTOP(I2C1,ENABLE);
while(!(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)));
REG_data=I2C_ReceiveData(I2C1);//讀出寄存器數(shù)據(jù)
return REG_data;
}
/*
* 函數(shù)名:void InitMPU6050(void)
* 描述 :初始化Mpu6050
* 輸入 :無
* 輸出 :無
* 調(diào)用 :外部調(diào)用
*/
void InitMPU6050(void)
{
I2C_ByteWrite(PWR_MGMT_1,0x00);//解除休眠狀態(tài)
I2C_ByteWrite(SMPLRT_DIV,0x07);
I2C_ByteWrite(CONFIG,0x06);
I2C_ByteWrite(GYRO_CONFIG,0x18);
I2C_ByteWrite(ACCEL_CONFIG,0x01);
}
/*
* 函數(shù)名:GetData
* 描述 :獲得16位數(shù)據(jù)
* 輸入 :REG_Address 寄存器地址
* 輸出 :返回寄存器數(shù)據(jù)
* 調(diào)用 :外部調(diào)用
*/
unsigned int GetData(unsigned char REG_Address)
{
char H,L;
H=I2C_ByteRead(REG_Address);
L=I2C_ByteRead(REG_Address+1);
return (H<<8)+L; //合成數(shù)據(jù)
}
復(fù)制代碼
初學(xué)電子,如有錯(cuò)誤,請大家多多指導(dǎo),資料僅供參考:
MPU6050(硬件IIC).zip
(294.78 KB, 下載次數(shù): 26)
2021-8-6 10:41 上傳
點(diǎn)擊文件名下載附件
STM32通過IIC協(xié)議使用MPU6050
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久久一区二区三区
|
日韩精品一区二区三区高清免费
|
亚洲综合色站
|
国产精品美女视频
|
欧美一级黑人aaaaaaa做受
|
在线欧美一区
|
91av视频在线观看
|
亚洲色图在线观看
|
91看片在线观看
|
国产精品自拍视频
|
欧美亚洲视频
|
一级片av
|
中文字幕在线看第二
|
欧美精品一区三区
|
国产精品视频久久
|
伊人网影院
|
黑人一级片视频
|
午夜三区
|
精品视频在线观看
|
毛片免费视频
|
成人在线视频一区
|
欧美一区二区网站
|
日韩成人在线视频
|
国产免费a
|
久久久久久久久蜜桃
|
日韩一区二区三区在线观看
|
国产精品久久一区
|
一区二区三区视频免费看
|
国产一区二区三区四区五区加勒比
|
国产精品欧美一区二区三区
|
亚洲一区二区三区视频
|
日操操夜操操
|
99re视频在线
|
999re5这里只有精品
|
欧美日韩久
|
成人高清视频在线观看
|
亚洲视频二区
|
久久久久欧美
|
久久久91精品国产一区二区三区
|
欧美亚洲另类在线
|
亚洲国产精品视频一区
|