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了

相关推荐
为何创造硅基生物9 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好9 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李9 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆10 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
jolimark10 小时前
C语言自学攻略:小白入门三步走
c语言·编程入门·学习路线·实践项目·自学攻略
cen__y11 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手11 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人11 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言
郭涤生12 小时前
不同主机之间网络通信-以太网连接复习
开发语言·rk3588