THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步
生活随笔
收集整理的這篇文章主要介紹了
THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
THWATCH-01 陀螺儀 MPU6050 HAL庫 正點原子 STM32驅(qū)動 計步
- 一級目錄
- 二級目錄
- 三級目錄
- 一、cubemx配置
- 1、使用cubemx配置串口
- 2、配置IIC1
- 3、配置時鐘和SWDIO下載口
- 二、修改KEIL工程
- 1、IIC驅(qū)動
- 2、main函數(shù)
- 三、計步器
一級目錄
二級目錄
三級目錄
使用了正點原子的mpu6050的歷程。使用里面的DMP算法庫,我這里使用的是STM32 F4的單片機。
環(huán)境:
CubeMX
KEIL5
HAL庫
一、cubemx配置
1、使用cubemx配置串口
配置了串口1 作為調(diào)試信息的輸出;
串口1的波特率設置成了115200;
2、配置IIC1
和單片機連接的IIC總線我使用的是IIC1
配置為:
3、配置時鐘和SWDIO下載口
生成工程:
二、修改KEIL工程
1、IIC驅(qū)動
為了方便配置不再使用模擬IIC接口,直接使用HAL庫提供的接口:
//IIC連續(xù)寫 //addr:器件地址 //reg:寄存器地址 //len:寫入長度 //buf:數(shù)據(jù)區(qū) //返回值:0,正常 // 其他,錯誤代碼 u8 MPU_Write_Len(u8 addr,u8 reg,u8 len,u8 *buf) {HAL_I2C_Mem_Write(&hi2c1, ((addr<<1)|0), reg, 1, (unsigned char *)buf, len, HAL_MAX_DELAY);return 0; } //IIC連續(xù)讀 //addr:器件地址 //reg:要讀取的寄存器地址 //len:要讀取的長度 //buf:讀取到的數(shù)據(jù)存儲區(qū) //返回值:0,正常 // 其他,錯誤代碼 u8 MPU_Read_Len(u8 addr,u8 reg,u8 len,u8 *buf) { HAL_I2C_Mem_Read(&hi2c1, ((addr<<1)|1), reg, 1, (unsigned char *)buf, len, HAL_MAX_DELAY);return 0; }//IIC寫一個字節(jié) //reg:寄存器地址 //data:數(shù)據(jù) //返回值:0,正常 // 其他,錯誤代碼 u8 MPU_Write_Byte(u8 reg,u8 data) { HAL_I2C_Mem_Write(&hi2c1, (MPU_ADDR<<1)|0, reg, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY); return 0; }//IIC讀一個字節(jié) //reg:寄存器地址 //返回值:讀到的數(shù)據(jù) u8 MPU_Read_Byte(u8 reg) {u8 res;HAL_I2C_Mem_Read(&hi2c1, (MPU_ADDR<<1)|1, reg, I2C_MEMADD_SIZE_8BIT, &res, 1, HAL_MAX_DELAY);return res; }上面的四個函數(shù)基本實現(xiàn)了IIC的讀取一個字節(jié),寫入一個字節(jié),讀取多個字節(jié),寫入多個字節(jié)的操作。直接調(diào)用即可。
2、main函數(shù)
首先在main函數(shù)總增減頭文件的調(diào)用:
#include "stdio.h"#include "mpu6050.h" #include "inv_mpu.h" #include "inv_mpu_dmp_motion_driver.h"配置printf函數(shù):
在引用頭文件下方增加
修改好如下圖:
在main函數(shù)中增加變量的定義:
float pitch,roll,yaw; //歐拉角 short aacx,aacy,aacz; //加速度傳感器原始數(shù)據(jù) short gyrox,gyroy,gyroz; //陀螺儀原始數(shù)據(jù) short temp; //溫度在面函數(shù)中調(diào)用初始化函數(shù)
MPU_Init(); //初始化MPU6050 while(mpu_dmp_init()) {printf("error\r\n");HAL_Delay(10); }在while循環(huán)中增加讀取歐拉角的函數(shù)
if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) {temp=MPU_Get_Temperature(); //得到溫度值MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度傳感器數(shù)據(jù)MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺儀數(shù)據(jù)printf("%.1f %.1f %.1f \r\n",pitch,roll,yaw); }HAL_Delay(20);最后得到如圖:
三、計步器
MPU6050的DMP庫提供了計步器接口,自己測試準確率還是比較高的
dmp_get_pedometer_step_count(&STEPS); //計步器獲取到步數(shù) printf("%d\r\n",STEPS); //顯示計步器的步數(shù)資源:(不用花錢哦)https://download.csdn.net/download/qq_44179528/15619484
看到最后了別忘了先贊 !!!!!?
||
||
V
總結(jié)
以上是生活随笔為你收集整理的THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows10下升级node.js和
- 下一篇: 五子棋对弈程序c语言,五子棋程序纯C语言