第三章 PX4-Pixhawk-SPI底层驱动解析

2023-05-16

第三章 PX4-SPI底层驱动解析

         这一章节我们会对PX4的底层驱动进行解析,我们这里主要解析的是SPI协议,因为这个协议是所有传感器的一个协议,至于IIC和串口就可以类似的读写一下,大家看完这个解析后不妨去试试驱动一下can总线协议。

        首先大家是不是觉得奇怪,为什么PX4编译的是一个针对F4的程序而不是其他的。这里我们就需要从整个系统的架构考虑了。我们之前提到过这个系统是基于nuttx操作系统开发的,至于nuttx是一个什么样的系统我们不做过多介绍,总的来说他就是一个类似于ucos的系统就行了。

         nuttx系统的配置时就对处理的器做了选择,具体我们需要追踪到目录

下,里面有一个defconfig文件哦。打开这个文件你可以看到很多以CONFIG开头的定义,有的定义是y有的是not set。这些其实就是类似于C语言的define,定义一些宏,而y就代表yes也就是1。这里面你就可以看到

看到没,支持stm32的,

这些都是哦。里面还有定义了使用stm32AD,DMA,IIC,SDIO,SPI等等。这里can是没有开启的大家到时候开发的时候可以开启

。这个文件里面定义了很多的东西哦,下次找不到一些定义可以的到这里面来找,这里还有定义串口的波特率

。这里要特别记住有几个定义,我这里先贴出来,


这两个是解析rcs的相关东西哦。

         大家还记得PX4是有个协处理的,这个协处理的定义实在路径下的defconfig

,至于defconfig的连接处在哪,那个这个就是nuttx下的工具会自动连接过去的,这个我们不用管,因为我也没去仔细去研究,如果大家有兴趣不妨去研究一下。

         这里说明一下整个系统的启动是以__start开始的,至于为什么需要查看nuttx脚本了,这里贴出来一下

,剩下的大家自己去查看。

         说了这么多终于可以进入到驱动层了,关于SPI协议,其实nuttx这个系统是已经写好的,我们只需要链接过去就行了,can总线也是一样的。

         还记前面提到的nsh_main了吧,这里其实就是APP层的一个入口了文件在这个路径下

,这里我们具体的流程我们暂时不做详细描述,这一章节我们只对SPI这个驱动来解析,大家不要急,在后面我们会慢慢的对整个流程进行一部分一部分解析。在nsh_main中有个函数

。我们追踪进去发现只有一个函数,所以这个很容易就找到。这里面有这个函数

,这里我们我们用suoce insight来看的就需要用到搜索功能,结果一搜索出现好多个这样的文件,不过大家也不用急,告诉大家一个方法我们是针对PX4-V2的硬件。所以我们就针对有关于V2的硬件就行了。所以我们搜索到路径

,里面有个文件是px4fmu2_init.c

这个函数中你就可以看到很多的端口的初始化了哦。那些端口的标号你可查到就在board_config.h中,记住都是v2的硬件哦。我们要找的是SPI端口,所以我们还是去找SPI。在这个函数中你可以看到

这个就是对驱动层的APP链接层喽。


看到没这些初始化和CS片选了。

找到这个了没?这个up_spiinitializa函数需要继续追踪了,我们是针对stm32的,所以这个函数肯定在stm32的库中去找了

找到了哦。看一下这个函数,看到这个了没

,还记得defconfig文件吗?那里有定义哦。接着就是初始化端口了。

。说到这里大家是不是还是不知道怎么连接到nuttxspi库中。不要急,还是在stm32_spi.c这个文件中,大家不妨跑到最前一点去看看是不是有这样的一个结构体

看到没连接过来了哦。前一部分就是nutxx的库了,后面是自己写的,当然这个要一致还有一个宏要注意哦

它们之间存在映射的关系哦所以在之后写初始化的都是SPI_SELECT这个在spi.h中。到时写can的时候别忘了。这里我们再来找一个函数就行stm32_spi1select。这个函数因为有片选的参与,所以我们特别说明,至于其他的设置模式,设置速率大家就自己去研究。这个函数我们还是需要追踪,这下我们追踪到的就是

,这里就行PX4spi的片选了,后期的硬件的读写用到哦。这里面有三个参数

,端口、设备和片选。注意在PX4架构中对这些传感器都是有标号的哦,具体的查找在这个文件中哦

,还是那个原则,找与V2相关的,这里再提一句与硬件相匹配的还有board.h文件这个有两个文件一个是针对F4主控的一个是针对F1协处理器的里面有相关配置,比如晶振这块就在里面还有相关端口的配置也在其中的。在这个文件中我们可以找到这个,看到没都是进行标号的哦。

。在stm32_spi1select中有个片选


这些片选在文件中都是可以查到了,以后写驱动的引脚控制就要在这个文件中写了,便于维护。讲到这里底层的SPI就差不多了。后面我们将会对SPI的具体硬件上的应用做一个解析。

如果文章有什么问题欢迎大家提出来,本人将在第一时间进行更改。如果大家有什么问题也可以随时联系我,可以QQ给我或者邮箱给我,如果大家比较急也可以打电话给我13530699165不过尽量不要打哦。

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

第三章 PX4-Pixhawk-SPI底层驱动解析 的相关文章

随机推荐

  • pygame 学习笔记(4)推荐一本python入门游戏书籍《PYTHON游戏编程入门》

    简介 PYTHON游戏编程入门 xff08 More Python Programming for the Absolute Beginner xff09 是 S Harbour写的一本入门书籍 xff0c 基于pygame库 本书每一个章
  • VLC加载插件失败原因及解决

    最近做视频播放的程序 xff0c 找到了VLC开源库 在windows 43 vs2013 43 QT5 3环境下进行调试 出现了在调用libvlc new时提示不能找到插件 加载libvlc失败的问题 原因及解决方法如下 xff1a 1
  • logcat的使用

    参考链接 log信息级别 以下优先级从上往下排序 xff1a V xff1a verbose 显示全部信息 最低优先级 xff0c 对应Log v String tag String msg D xff1a debug 显示调试信息 xff
  • 物联网架构实例—解决Linux(Ubuntu)服务器最大TCP连接数限制

    1 前言 xff1a 在对物联网网关进行压测的时候 xff0c 发现在腾讯云部署网关程序 xff0c 设备接入数量只能达到4000多个长连接 xff0c 之后就再也无法接入终端了 之前在阿里云部署的时候明明可以到达2万左右 xff0c 而且
  • Prometheus从入门到跑路

    1 prometheus框架结构 2 prometheus组件介绍 2 1 Prometheus Server 这是Prometheus的服务端 xff0c 也就是核心 Prometheus本身是一个以进程方式启动 xff0c 之后以多进程
  • ucos-ii学习笔记1 创建任务&&任务调度

    span style font family none font size 12px background color rgb 255 255 255 span span 最近在学习嵌入式系统 xff0c 听说ucos ii是使用最广 xf
  • ucos ii学习笔记2 邮箱&&信息量

    上一篇说了ucos ii的大致运行原理 xff0c 这一篇主要用来说明不同任务之间的数据传递的 有人会说 xff1a 不同任务间的数据传递直接用全局变量不就好了 xff0c 我一开始也有这种疑惑 xff0c 也在简单程序中实验过没什么问题
  • ucos ii学习笔记4 软件定时器

    span span p span style font size 18px span span ucos ii从V2 83版本以后加入了软件定时器 xff0c 软件定时器的最快时钟节拍就等于ucos ii的系统时钟节拍 xff0c 由一个单
  • 时钟源关系初解

    最近发现自己对时钟的各种关系不是很清晰 xff0c 所以在这里初步的顺一下 以STM32F4为例 xff0c 大概都差不多 STM32F4有5个时钟源 xff0c 分别是HSI HSE LSI LSE PLL 从名字上看出HSI和HSE是高
  • up-board

    安装ubuntu16 04 安装board内核 http www eeboard com bbs thread 59222 1 1 html 对管脚的控制 http www eeboard com bbs thread 59257 1 1
  • 【嵌入式软件实习】找实习和电话面试记录与总结

    前言 前一段时间就是非常想找实习 xff0c 这次是接到了一家还算是比较大的公司的面试通知和实习offer 做一下简单的记录给在找实习的大家一个参考吧 主要内容为 xff1a 三连即可提高学习效率0 0 x1f9d1 x1f3fb 作者简介
  • Ubuntu更换apt镜像源

    原文 xff1a Ubuntu更换apt镜像源 在ubuntu中 xff0c 默认使用 ubuntu 的官方源http archive ubuntu com xff0c 但是这个官方源在国内下载的速度太慢 xff0c 甚至只有几十k 于是考
  • JS 闭包 详细说明(教程)

    首先 xff0c 闭包是一个高阶函数 xff0c 高阶函数除了可以接受函数作为参数外 xff0c 还可以把函数作为结果值返回 xff08 不知道高阶函数是啥 xff0c 点击链接 xff09 先通过一个例子来了解一下如何把函数作为结果值返回
  • STVP烧录程序

    STVP介绍 STVD xff1a ST Visual Develop xff0c 可视化开发工具STVP xff1a ST Visual Programmer xff0c 可视化编程工具 xff0c stvp主要打开一些固件 hex s1
  • 传感器标定系列——Kalibr工具

    文章目录 Kalibr介绍安装资源 Kalibr介绍 Kalibr is a toolbox that solves the following calibration problems 多相机标定 Multi Camera Calibra
  • TCP传输图片及多线程

    最终效果图 xff1a 注意 xff1a 图片发送大体流程同 Qt网络编程 TCP IP 一 只是在发送时这里采用 的 数据流QDataStream形式 因为使用摄像进行监控时也是对一帧一帧的图片进 行处理 xff0c 因此掌握了如何用Qt
  • GCC编译过程及基本命令总结

    一 GCC简介 GCC即GNU Compiler Collection xff0c 原本只是针对C语言的编译工具 xff0c 现在已经变成了一个工具集 xff0c 包含了C C 43 43 JAVA等语言的集合体 管理和维护 xff1a 由
  • 第一章 PX4-Pixhawk-程序编译过程解析

    第一章 PX4程序编译过程解析 PX4 是一款软硬件开源的项目 xff0c 目的在于学习和研究 其中也有比较好的编程习惯 xff0c 大家不妨可以学习一下国外牛人的编程习惯 这个项目是苏黎世联邦理工大学的一个实验室搞出来的 该方案是基于 N
  • 第二章 PX4-Pixhawk-RCS启动文件解析

    第二章 PX4 RCS 启动文件解析 RCS 的启动类似于 linux 的 shell 文件 xff0c 如果不知道 shell 文件是什么东西可以理解成是为程序的流程框 xff0c 它是告诉处理器应该怎么样去运行 xff0c 前一章介绍的
  • 第三章 PX4-Pixhawk-SPI底层驱动解析

    第三章 PX4 SPI 底层驱动解析 这一章节我们会对 PX4 的底层驱动进行解析 xff0c 我们这里主要解析的是 SPI 协议 xff0c 因为这个协议是所有传感器的一个协议 xff0c 至于 IIC 和串口就可以类似的读写一下 xff