日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stm32 iic接口 进入busy_STM32通过IIC接口读取JY61模块MPU6050陀螺仪芯片数据核心程序...

發布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32 iic接口 进入busy_STM32通过IIC接口读取JY61模块MPU6050陀螺仪芯片数据核心程序... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 簡述

最近,想學角度融合算法在網上買一個JY61的模塊。他們家的模塊用起來還不錯。模塊分為串口通訊和IIC通訊的。串口讀取數據他們家有例程,我就不說了。想分享給大家這個模塊的IIC是怎么去讀取MPU6050芯片數據的。

想要讀取MPU6050芯片,其實就是通過IIC去操作讀取寄存器。注意模塊默認是串口直接輸出數據的,需要先將模塊設置為IIC模式后,才可以直接訪問MPU6050芯片,不過因為角度數據是模塊內部算法解出來的,用IIC接口無法獲取到傳感器角度數據了,如果要用IIC接口訪問到角度數據需要選這他家的JY61P或者JY901。

連接的大致過程就是STM32和MPU6050先建立好IIC通訊。再去初始化MPU6050芯片。然后單片機再去讀取寄存器,就能把數據讀取出來了。

2 配置32單片機的IIC引腳

根據你32單片機的原理圖,找到你的IIC引腳。

  • 時鐘RCC的配置

以我自己寫的為例子。

  • GPIO口的配置

注意:SCL和SDA都得接上兩個4.7K的電阻。不然你是讀取不到MPU6050的數據。

  • STM32的IIC的配置

3 初始化 MPU6050

void MPU6050_Initialize() { MPU6050_I2C_ByteWrite(0xd0,0x00,MPU6050_RA_PWR_MGMT_1); MPU6050_I2C_ByteWrite(0xd0,0x07,MPU6050_RA_SMPLRT_DIV); MPU6050_I2C_ByteWrite(0xd0,0x06,MPU6050_RA_CONFIG); MPU6050_I2C_ByteWrite(0xd0,0x01,MPU6050_RA_ACCEL_CONFIG); MPU6050_I2C_ByteWrite(0xd0,0x18,MPU6050_RA_GYRO_CONFIG); }

注意:0xD0 表示 MPU6050 的地址。MPU6050有 8 位的地址,前 7 位由 WHO AM I 確定,第 8 位由 AD0 的電平決定。WHO AM I 默認值是 0x68H(1101000B),AD0 接低電平,所以 MPU6050 的 I2C 地址是 0xD0H(11010000B)。

4 核心讀取程序

總結: 發送開始信號 -> 起始成功? -> 發送 MPU6050 地址、狀態(寫)-> 寫地址成功? -> 發送 MPU6050內部某個待寫寄存器地址 -> 發送成功? -> 發送要寫入的內容 -> 發送成功? -> 發送結束信號

void MPU6050_I2C_BufferRead(u8 slaveAddr, u8* pBuffer, u8 readAddr, u16 NumByteToRead) {while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));I2C_GenerateSTART(I2C1, ENABLE);//發送開始條件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//在EV5上測試并清除I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Transmitter); //發送MOU6050地址進行寫操作while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//在EV6上測試并清除I2C_Cmd(I2C1, ENABLE);//通過再次設置PE位來清除EV6I2C_SendData(I2C1, readAddr);//發送MPU6050的內部地址來寫入while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//在EV8上測試并清除I2C_GenerateSTART(I2C1, ENABLE);//第二次發送STRAT條件while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//在EV5上測試并清除I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Receiver);//發送MOU6050地址進行寫操作while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));//在EV6上測試并清除while(NumByteToRead)//當有數據被讀取到的時候{if(NumByteToRead == 1){I2C_AcknowledgeConfig(I2C1, DISABLE);//Acknowledge不使能I2C_GenerateSTOP(I2C1, ENABLE);//發送停止條件}if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))//在EV7上測試并清除{*pBuffer = I2C_ReceiveData(I2C1);//從MPU6050讀取一個字節pBuffer++;//指向將保存讀取的字節的下一個位置NumByteToRead--;//讀取字節計數器減一}}I2C_AcknowledgeConfig(I2C1, ENABLE);//啟用確認以準備再次接收 }

總結

以上是生活随笔為你收集整理的stm32 iic接口 进入busy_STM32通过IIC接口读取JY61模块MPU6050陀螺仪芯片数据核心程序...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。