基于大疆的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了