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了

相关推荐
lly2024062 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨2 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9992 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4942 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
功德+n2 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos
明日清晨2 小时前
python扫码登录dy
开发语言·python
我是唐青枫3 小时前
C#.NET gRPC 深入解析:Proto 定义、流式调用与服务间通信取舍
开发语言·c#·.net
JJay.3 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
bazhange3 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
jinanwuhuaguo3 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin