RM专用赛事c型板IMU9轴解算(1)(对于IST8310和BMI088的直接使用)

基于大疆的RM教程书的简化

官方例程在

复制代码
https://kdocs.cn/l/cbfUTLYuPxT9

这片文章我只是对于官方例程的一个使用简化,只是基于最底层的使用层面去获取数据,对于数据的解算会在后续文章进行提及

首先是对于磁力计的解算,c板内部配置的是IST8310磁力计,他是靠IIC进行通信的,

由于 IST8310 磁力计在开发板上集成, PCB 上已经接线完毕,故而不需要外部接线。 对应管脚如下表所示。

|------------|--------|
| IST8310 管脚 | MCU 管脚 |
| SCL | PA8 |
| SDA | PC9 |
| RSTN | PG6 |
| DRDY | PG3 |

首先要在cubemx里面进行配置这4个引脚

PG3 配置外部中断, 下降沿触发,然后在NVIC中勾选3号中断

PG6 配置成 GPIO 的输出模式, 上拉模式,

2C3 的配置如下,最终配置成 I2C3 成快速模式,通信频率设置为 400k, I2C 地址配置成 7位等等, 管脚配置为 PA8, PC9,

然后就是对与大疆官方的读取IST8310的代码进行移植使用

找到对大疆官方例程

找到bsp并打开

.把这些文件都放打你自己的工程里去

打开你自己建立的CubeMX工程,找到Core并打开

.c 文件在Src .h文件放到Inc中

然后在MdkARM中打开Keil

大致步骤像这样创立一个自己的文件夹,并在里面加入这些文件

有些同学可能找不到刚刚放进去的文件,由于添加文件只会默认打开本层目录但是我们的文件刚刚防,但是我们刚刚帮文件都放到了上层目录下的Core文件中,所以要回到上层都Core文件里找,

然后添加好文件后我们要在main.c文件里添加

cpp 复制代码
#include "ist8310driver.h"
#include "ist8310driver_middleware.h"

这两个头文件

然后定义一个

cpp 复制代码
float IST8310_data[3];

这里我如果你添加了struct_typedef.h文件你就要把float改为fp32

我因为没有用那个宏定义所以,没有改,后面遇到同样的float都可以当成发fp32来看待

cpp 复制代码
ist8310_init();

在main函数中加入、

然后到

stm32f4xx_it.c中找到中断3

用这个代替就行

cpp 复制代码
void EXTI3_IRQHandler(void)
{
  /* USER CODE BEGIN EXTI3_IRQn 0 */

  /* USER CODE END EXTI3_IRQn 0 */
  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
  /* USER CODE BEGIN EXTI3_IRQn 1 */
	ist8310_read_mag(IST8310_data);
	
  /* USER CODE END EXTI3_IRQn 1 */
}

现在,读取刚刚定义的数组,就能读到x,y,z轴的磁场强度了

然后是对于BMI088六轴传感器的使用方法的接收

BMI088是通过SPI通信进行传输数据

首先配置引脚

进入 SPI1 的配置页面,在 Mode 页面中,将模式选择为 Full-Duplex Master,即让 stm32 工作在全双工 SPI下,作为主机使用,将硬件片选信号 Hardware NSS Signal 设为 Disable;

PA7 -SPI1

PB3 - SPI1

PB4 -SPI1

PA4-OUT

PBO-OUT

就暂时需要这几个引脚

然后可以去移植文件了,

找到

找到这六个文件,注意这一次他没有全部放到一起,所以要看着我的文件目录仔细找一找

下面的就和刚才一样

.把这些文件都放打你自己的工程里去

打开你自己建立的CubeMX工程,找到Core并打开

.c 文件在Src .h文件放到Inc中

然后在MdkARM中打开Keil

大致步骤像这样创立一个自己的文件夹,并在里面加入这些文件

有些同学可能找不到刚刚放进去的文件,由于添加文件只会默认打开本层目录但是我们的文件刚刚防,但是我们刚刚帮文件都放到了上层目录下的Core文件中,所以要回到上层都Core文件里找,

然后添加好文件后我们要在main.c文件里添加

cpp 复制代码
#include "BMI088driver.h"
#include "BMI088reg.h"
#include "BMI088Middleware.h"

定义三个数据缓存区

cpp 复制代码
float Gyro[3];//角速度
float Accel[3];//角速度
float Tempture;//角速度
cpp 复制代码
while(BMI088_init());
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
      BMI088_read(Gyro,Accel,&Tempture);
    /* USER CODE END WHILE */
    
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

然后要在

#include "BMI088Middleware.h"中添加4个宏定义

cpp 复制代码
#include "BMI088Middleware.h"
cpp 复制代码
#define CS1_ACCEL_GPIO_Port GPIOA
#define CS1_ACCEL_Pin  GPIO_PIN_4
#define CS1_GYRO_GPIO_Port GPIOB
#define CS1_GYRO_Pin GPIO_PIN_0

加上这些就OK了

相关推荐
2501_918126912 分钟前
学习所有用c语言定义stm32的语句
c语言·stm32·嵌入式硬件·学习·个人开发
@大迁世界3 分钟前
6 款轻量级 CLI 工具,取代了我臃肿的开发软件
开发语言·lua
handler015 分钟前
算法:Trie树(字典树)
c语言·数据结构·c++·笔记·算法·深度优先
MegaDataFlowers12 分钟前
依赖注入(DI)
java·开发语言
csbysj202013 分钟前
Foundation 输入框尺寸指南
开发语言
码云数智-园园15 分钟前
Tailwind CSS vs. 传统CSS/Sass:2026年前端样式开发的深度博弈
开发语言
lly20240618 分钟前
《jEasyUI 创建 XP 风格左侧面板》
开发语言
晓纪同学18 分钟前
EffctiveC++_01第一章
java·开发语言·c++
Book思议-19 分钟前
【数据结构考研真题】链表题
c语言·数据结构·算法·链表·408·计算机考研
我真会写代码20 分钟前
Java事务核心原理与实战避坑指南
java·开发语言·数据库