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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步

發布時間:2023/12/29 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

THWATCH-01 陀螺儀 MPU6050 HAL庫 正點原子 STM32驅動 計步

  • 一級目錄
    • 二級目錄
      • 三級目錄
  • 一、cubemx配置
    • 1、使用cubemx配置串口
    • 2、配置IIC1
    • 3、配置時鐘和SWDIO下載口
  • 二、修改KEIL工程
    • 1、IIC驅動
    • 2、main函數
  • 三、計步器

一級目錄

二級目錄

三級目錄

使用了正點原子的mpu6050的歷程。使用里面的DMP算法庫,我這里使用的是STM32 F4的單片機。
環境:
CubeMX
KEIL5
HAL庫

一、cubemx配置

1、使用cubemx配置串口


配置了串口1 作為調試信息的輸出;
串口1的波特率設置成了115200;

2、配置IIC1

和單片機連接的IIC總線我使用的是IIC1
配置為:

3、配置時鐘和SWDIO下載口


生成工程:

二、修改KEIL工程

1、IIC驅動

為了方便配置不再使用模擬IIC接口,直接使用HAL庫提供的接口:

//IIC連續寫 //addr:器件地址 //reg:寄存器地址 //len:寫入長度 //buf:數據區 //返回值: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連續讀 //addr:器件地址 //reg:要讀取的寄存器地址 //len:要讀取的長度 //buf:讀取到的數據存儲區 //返回值: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寫一個字節 //reg:寄存器地址 //data:數據 //返回值: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讀一個字節 //reg:寄存器地址 //返回值:讀到的數據 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; }

上面的四個函數基本實現了IIC的讀取一個字節,寫入一個字節,讀取多個字節,寫入多個字節的操作。直接調用即可。

2、main函數

首先在main函數總增減頭文件的調用:

#include "stdio.h"#include "mpu6050.h" #include "inv_mpu.h" #include "inv_mpu_dmp_motion_driver.h"

配置printf函數:
在引用頭文件下方增加

int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch,1, 0xFFFF);return ch; }

修改好如下圖:

在main函數中增加變量的定義:

float pitch,roll,yaw; //歐拉角 short aacx,aacy,aacz; //加速度傳感器原始數據 short gyrox,gyroy,gyroz; //陀螺儀原始數據 short temp; //溫度

在面函數中調用初始化函數

MPU_Init(); //初始化MPU6050 while(mpu_dmp_init()) {printf("error\r\n");HAL_Delay(10); }

在while循環中增加讀取歐拉角的函數

if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) {temp=MPU_Get_Temperature(); //得到溫度值MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //得到加速度傳感器數據MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //得到陀螺儀數據printf("%.1f %.1f %.1f \r\n",pitch,roll,yaw); }HAL_Delay(20);

最后得到如圖:

三、計步器

MPU6050的DMP庫提供了計步器接口,自己測試準確率還是比較高的

dmp_get_pedometer_step_count(&STEPS); //計步器獲取到步數 printf("%d\r\n",STEPS); //顯示計步器的步數

資源:(不用花錢哦)https://download.csdn.net/download/qq_44179528/15619484

看到最后了別忘了先贊 !!!!!?
||
||
V

總結

以上是生活随笔為你收集整理的THWATCH-01 陀螺仪 MPU6050 HAL库 正点原子 STM32驱动 计步的全部內容,希望文章能夠幫你解決所遇到的問題。

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