STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

2023-05-16

ms5611是同时支持I2C和SPI通信协议的气压计芯片。已经很普遍的被用在飞行器控制板上作为高度传感器。开发过stm32的朋友都知道它的硬件I2C是由bug的,一般使用的都是自己编写的软件I2C通信协议。但是其硬件SPI通信却是没有问题的。SPI通信一般会比I2C通信快点。下面先从硬件上说明MS5611在选择SPI的准备。
MS5611要选择使用SPI通信首先需要做的就是把芯片的PS引脚置低。参考数据手册如下:
这里写图片描述
根据其设计的PCB原理图如下:
这里写图片描述
下面是主要代码:
1.首先是芯片初始化。
void ms5611_init(void)
{
// ms5611_cs_init();
ms5611_ba_reset();
read_prom_data();
}
复位芯片可以从数据手册中找到参考,其实很简单就是向芯片发送数据0x1e,
void ms5611_ba_reset(void)
{
MS5611_CS_L;
SPI1_Read_Write_Byte(0X1E);
MS5611_CS_H;
Delay_us(2800);
}
初始化第二步是读取prom的数据,这里面有包含计算温度和气压的一些系数。
void read_prom_data(void)
{
u8 i;
for(i=0;i<8;i++)
data[i] = ms5611_read(0xa0+2*i);
for(i=0;i<8;i++)
printf(“data %d = %d\n”,i,data[i]);
}
下面就是读取数据和运算数据的循环了。
int32_t get_pressure(void)
{
int64_t D1,dT,OFF,SENS;
int64_t pressure;

MS5611_CS_L;
SPI1_Read_Write_Byte(0X58);
MS5611_CS_H;
Delay_us(1100);
dT = ms5611_read_adc(0x00);
dT -= (data[5]<<8);

// printf(“dT = %lld\n”,dT);
OFF = ((int64_t)data[2]<<16) + (((int64_t)data[4]*dT)>>7);
SENS = ((int64_t)data[1]<<15) + (((int64_t)data[3]*dT)>>8);

MS5611_CS_L;
SPI1_Read_Write_Byte(0x48);
MS5611_CS_H;

Delay_us(1100);
D1 = ms5611_read_adc(0x00);
pressure = (((D1*SENS)>>21)-OFF)>>15;

return pressure;
}
使用串口终端获得数据在MATLAB中做出曲线如下图:
这里写图片描述
与工程代码对应的硬件如下:
PCB正面PCB背面
该飞控板移植了MDK的cleanflight代码,由于硬件跟cleanflight的并不完全一致,代码有所改动,需要购买板子的可给我留言

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强 的相关文章

  • STM32F4的FSMCTFT接口配置

    利用安富莱的V5开发板 xff0c 根据原理图配置 xff1b LCD接口原理图如下 xff1a 从原理图看出LCD接的是BANK1 xff0c 片选是NE4 xff0c LCD的RS为A18 xff0c 配置如下 然后安富莱的LCD片选是
  • SPI简介

    SPI全称是Serial Perripheral Interface xff0c 也就是串行外围设备接口 SPI是Motorola公司推出的一种同步串行接口技术 xff0c 是一种高速 xff0c 全双工的同步通信总线 SPI时钟频率相比I
  • 关于stm32f4上对(28byj-48)步进电机的应用控制和解读。

    1 关于stm32f4上对 xff08 28byj 48 xff09 步进电机的应用控制和解读 xff08 1 ULN2003驱动模块电路 步进电机不能直接和单片机连接 xff0c 需要对应驱动模块提供电机所需的电流 电路图分析 xff1a
  • stm32f4串口接收与发送

    之前有写一篇stm32f1串口接收与发送的文章 xff0c stm32f4与f1只有配置上的一点不同 xff0c 今天把f4的串口接收与发送代码分享一下 详细解释推荐大家看f1那篇 xff0c 都是一样的 xff0c stm32f1串口发送
  • SPI总线协议基本原理及相关配置

    单片机应用中 xff0c 最常用的通信协议主要有三个 xff0c 即USART IIC和SPI 关于前两个的介绍在之前文章学习过 xff0c 这次介绍一下第三个通信协议 SPI SPI Serial Peripheral Interface
  • SPI通信协议详解

    SPI是Serial Peripheral Interface的缩写 xff0c 意即串行外设接口 SPI是一种高速的 全双工 同步通信总线 xff0c 常用于处理器与板载外设 xff08 比如Flash存储器 实时时钟芯片 AD DA芯片
  • UART, IIC, SCI, SPI, 232, 485, 422, CAN, SDIO, GPIO, MODBUS, TCP/IP汇总简介

    UART IIC SCI SPI 232 485 422 CAN SDIO GPIO MODBUS TCP IP汇总简介 UART xff1a Universal Asynchronous Receiver Transmitter xff1
  • day3. -2 NX的SPI操作

    1 NVIDIA在线文档 https docs nvidia com jetson l4t index html page Tegra 20Linux 20Driver 20Package 20Development 20Guide hw
  • 串口发送通信---UART发送---STM32F4实现

    串口发送程序配置过程 xff08 HAL库 xff09 初始化串口相关参数 xff0c 使能串口 HAL StatusTypeDef span class token function HAL UART Init span span cla
  • 串口通信协议 UART+I2C+SPI

    UART 异步 串行 全双工 I2C SPI 不同通信协议比较 UART UART协议详解 UART通信 xff0c 接收与发送 xff08 详细版 xff0c 附代码 xff09 UART串行通信详解 待整理 UART是Universal
  • 家庭IOT监测之摄像头OV7670测试

    本篇目标 使用STM32F407驱动摄像头OV7670 并上位机显示照片结果 材料准备 STM32F4标准工程 stm32f407自建标准工程 stm32f4标准工程 git仓库地址 STM32F4摄像头测试工程 里面包含ov7670驱动文
  • 关于IKEv2中安全策略索引SPI的生成

    首先引入一个PF key的概念 PF KEY Key Management API 提供IKE模块和IPSec核心之间的接口 在RFC 2367中 有一个SADB GETSPI消息 这个消息就是实现允许一个进程获取SPI值 该值标识所给的s
  • 使用HAL库开发STM32:系统时间基础及进阶使用

    文章目录 目的 基础使用 进阶使用 总结 目的 HAL库默认提供了系统时间 系统时间默认情况下由SysTick定时器计数产生 系统时间一方面用于HAL库自身调用 另一方面用户也可以使用 为开发带来便利 本文提到的相关使用主要应用于未使用OS
  • FPGA驱动0.96oled显示屏 (4线 SPI) verilog语言

    之前也陆陆续续看了很多博客 也都能在自己的屏幕上显示出来 但是问题就是不知道怎么修改代码显示自己希望显示的东西 而且由于没注释原因看不太懂 最终的实现效果最终实现效果视频 b站视频链接1 评论区有人给了源码的百度网盘链接 csdn博客链接1
  • micropython-SPI通讯

    micropython SPI通讯 1 什么是SPI 2 SPI通讯原理 3 Micropython中的SPI 4 ZTMR测试SPI 1 ZTMR中SPI引脚 2 ZTMRSPI自测 2 SPI 2板之间通讯测试 1 什么是SPI SPI
  • 搭建STM32F407的SPI-Flash(基于STM32CubeMX)

    网上有不少例子 都对 但对我来说碰到几个坑 避免以后再犯错 mark下 目标 通过SPI接口 对Nor Flash进行读写 开发板上Nor Flash 是W25Q128 128Mbit 也就是16MB样子 CubeMx端配置 配置要分两个
  • Linux,spidev:为什么它不应该直接在设备树中?

    我想定义一个具有用户模式访问权限的 SPI 设备 如中所述http linux sunxi org SPIdev 按照这些示例 我在设备树中添加了以下内容 ecspi1 other stuff mydev 0 compatible spid
  • STM32的HAL中实现单按、长按和双按功能

    我正在尝试实现单击 双击和长按功能来执行不同的功能 到目前为止 我已经理解了单击和长按的逻辑 但我不知道如何检测双击 至于代码 我使用计数器实现了单击和长按 但代码仅停留在第一个 if 条件上 bool single press false
  • Spidev 不使用 ioctl 同时写入/读取

    我希望找到一些帮助 即使这个问题可能更多地与硬件相关而不是与软件相关 我们将会看到 我正在开发基于 Freescales P1021 处理器 ppc e500v2 内核 的定制板 将连接外部 PCB 并可通过 SPI 进行配置 该外部 PC
  • 如何用 C 语言从串行(SPI)连接读取数据?

    我正在尝试编写一个程序 该程序将安装在 Linux MCU Raspberry Pi 上 该程序将读取从另一个 MCU 我将自己构建的自制程序 发送到它的串行数据 我研究了如何做到这一点 并认为我有 大局 但仍然缺少一些东西 其一 我需要启

随机推荐

  • 全志V3S 入门 RTL8723BS 连接wifi

    开发板 xff1a 荔枝派zero linux xff1a 5 10 rootfs xff1a buildroot 2017 8 1 使用最新的主线linux内核5 10 xff0c 主线5 10内核linux make ARCH 61 a
  • ESP32蓝牙 华为手机容易断连解决

    在长达两年的售后中 xff0c 收到华为手机连接ESP32蓝牙是最容易断开连接的 xff0c 一开始小米手机 苹果手机都没问题 xff0c 就只有华为 xff0c 一连上就断开 xff0c 所以我们认为是APP问题 xff0c 于是我们去找
  • ESP32-S3 LVGL http下载B站头像 JPG显示

    最近在用ESP32S3获取B站JPG头像进行显示 记录一下 xff0c 开发板链接 xff1a ESP32 S3 LVGL 开发板 人工智能语音识别 人脸识别 触摸 音频 淘宝网 taobao com 直接上代码 xff1a 第一种下载方式
  • Docker概述(二)(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 Docker概述 xff08 二 xff09 文章目录 Docker概述 xff08
  • 【串口通信】K210与STM32串口通信、K210与OpenMV串口通信

    串口通信 K210与STM32串口通信 K210与OpenMV串口通信 串口通信前言为何需要串口通信 K210如何进行串口通信K210串口配置K210串口发送相关定义K210串口发送测试K210串口接收相关定义K210串口接收测试 STM3
  • 【ESP32S3系列】1、使用ESP32S3开发板点亮WS2812

    开发板链接 xff1a ESP32 S3 LVGL 开发板BLE人工智能语音人脸识别触摸 音频芯片wifi 淘宝网 taobao com 板子上的LED是WS2812 xff0c 它的引脚分别是 xff1a VDD xff1a 电源 xff
  • win10 使用sonarqube扫描ESP32 C语言工程代码

    社区版的扫描不了C代码 xff0c 所以要找个破解的 项目场景 xff1a 最近项目上霍尼韦尔要求使用sonarqube来扫描代码得出漏洞报告 xff0c 网上找了一圈没有比较容易成功的 xff0c 总结下经验 电脑里要有visual st
  • ESP32 如何引入静态库lib.a

    只需要在Cmakelist txt里这样写 xff1a 如果这个lib正常运行的话需要用到json和lwip相关的函数 xff0c 那就添加一个PRIV REQUIRES 这个component的名字即可
  • OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

    本文章代码已上传Github xff1a https github com Kevincoooool 2017 Follow 有兴趣的可以加个STAR 自从17年国赛之后 xff0c 自己做了openmv xff0c 加了很多群 xff0c
  • 简易旋转倒立摆设计报告

    完整文档和源码 xff1a https github com Kevincoooool inverted pendulum 43 2017年成都信息工程大学 第六届 电协杯 电子设计竞赛 简易旋转倒立摆及控制装置 xff08 I题 xff0
  • OpenMV-IDE 免KEY提示 编译教程

    很多人在购买了OpenMV之后都没有购买key xff0c 虽然key作为一种捐赠开发者的形式存在 xff0c 但大多数人都是不愿意每次使用都看到那三个提示框的 xff0c 而且不愿意去购买key xff0c 附上我的编译教程 xff1a
  • OpenMV H7也就是OpenMV4来啦 最新

    17年开始做过了四个版本的openmv 可谓是电赛好帮手 开发了两年的openmv xff0c 我的目的就是让openmv变得便宜 目前官方的第四代openmv还在众筹中 xff1a https www kickstarter com pr
  • 开源一个安卓四轴上位机+配套ESP8266 UDP串口通信源码

    手机APP是由匿名四轴遥控器修改而来 xff0c 在原有基础上添加了双摇杆控制和单摇杆控制 数据通过UDP和ESP8266通信 协议可修改 安卓app源码 xff1a https github com Kevincoooool KSTC V
  • c++中函数屏蔽和函数参数屏蔽

    情况一 函数的屏蔽 例如 nbsp nbsp void Function int a int b nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp int c a b 若是不使用函
  • STM32串口之奇偶校验设置

    今天 xff0c 在调试rs485的时候出现了32芯片串口端可以正常发送数据 xff0c 485芯片数据输出端不能发送数据 xff0c 自己查了下485芯片手册 xff0c 发现485芯片有个引脚通过32芯片给出高低电平来控制它是接受还是发
  • 基于AudioQueue实现音频的录制和播放(标贝科技)

    标贝科技 https ai data baker com source 61 qwer12 填写邀请码fwwqgs xff0c 每日免费调用量还可以翻倍 基于AudioQueue实现音频的录制和播放 文章目录 基于AudioQueue实现音
  • webots建立四连杆机构模型

    webots建立四连杆机构模型 使用webots内置的插件构建四连杆机构建立robot形状参考文献 使用webots内置的插件构建四连杆机构 首先 xff0c 可以去官网下载最新的webots xff0c 网址 xff1a https ww
  • STM32使用FREERTOS获取系统时间

    使用CUBE MX生成带有free RTOS操作系统的工程 xff0c 我们经常会使用到系统相对时间 xff0c 尤其是使用其做数据采集的项目中经常需要给你数据打上时间的标签就需要实时获取系统的相对时间 当然 xff0c 我们可以单独开一个
  • 一个简单的C++工程管理的Makefile

    摘要 C C 43 43 代码都需要使用编译器来编译代码生成相应的目标文件 xff0c 在大部分的windows开发中 xff0c 开发者多用商用或开源的集成开发环境 xff08 IDE xff09 xff0c 比如 xff1a visua
  • STM32F4 使用SPI读取气压计MS5611的数据并转化为大气压强

    ms5611是同时支持I2C和SPI通信协议的气压计芯片 已经很普遍的被用在飞行器控制板上作为高度传感器 开发过stm32的朋友都知道它的硬件I2C是由bug的 xff0c 一般使用的都是自己编写的软件I2C通信协议 但是其硬件SPI通信却