四轴飞行器Bootloader和固件的更新

在四轴飞行器中,为了方便用户后期对飞行器进行固件升级,一般都采用了Bootloader技术。所谓Bootloader就是指单片机启动后首先运行的一段代码,它的最主要功能就是用于检查用户是否要更新飞控固件。如果是,则进入飞控固件更新进程,如果否,则直接运行当前的飞控固件。此外,有的Bootloader里面也包含进了一些基本的硬件检测功能,如果硬件检测失败,就不进入飞控功能。通常,Bootloader都要配合飞行器的上位机软件来使用。

下面以圆点博士小四轴飞行器为例进一步对Bootloader进行说明。在圆点博士小四轴飞行器的上位机软件中,提供了飞行器和遥控器的固件更新功能。这样用户不需要借助其它单片机下载工具,就可以非常方便地通过上位机来直接更新飞行器和遥控器的固件。圆点博士小四轴飞行器提供了飞行器和遥控器的固件源代码,当用户重新编译并更新这些固件的时候,需要注意以下这个问题:

1,圆点博士小四轴飞行器上位机的固件更新只支持后缀为bin的数据文件,所以用户要把其它格式的固件(比如hex)转换成bin格式的文件。对于keil编译器,软件已经自带该功能,用户只需要根据下图进行设置即可。

由于Keil默认会生成后缀为axf的固件,fromelf这个命令就是把axf固件转换成bin固件的意思。它的形式是: fromelf.exe -bin -o 目标路径 源路径。

2,同时,我们要设置程序的起始地址,使得这些重新编译后的固件能够配合Bootloader来工作。下图是Keil软件设置程序起始地址的设置界面:

对于圆点博士小四轴遥控器,由于采用的是STM32F103C8型号的芯片,它的ROM容量是64K,RAM容量是20K,所以ROM的大小转换成16进制就是0x10000,RAM的大小转换成16进制就是0x5000。由于STM32的程序开始地址是0x8000000,然后Bootloader占用了0x8000的空间,所以ROM的起始设置为0x8008000,而RAM的开始地址保持为0x20000000。

对于圆点博士小四轴飞行器,由于采用的是STM32F103RC型号的芯片,它的ROM容量是256K,RAM容量是48K,所以ROM的大小转换成16进制就是0x40000,RAM的大小转换成16进制就是0xC000。同样地,由于STM32的程序开始地址是0x8000000,然后Bootloader占用了0x8000的空间,所以ROM的起始设置为0x8008000,而RAM的开始地址保持为0x20000000。

3,在上一步中,我们在编译器上修改了程序起始地址,我们同样要在代码里面做些修改,使得编译后的固件能正常工作。圆点博士小四轴飞行器使用的是STM32单片机,所以需要在固件源代码里面main函数的开始位置加入下列代码,把程序的中断向量的开始位置和代码的起始位置对齐。该代码的意思是把STM32单片机的中断向量起始地址从0x8000000的位置向后偏移0x8000的大小,变成0x8008000。

NVIC_SetVectorTable(NVIC_VectTab_FLASH,(u32)0x8000);

经过这三个步骤,用户自行编写的代码就可以通过圆点博士小四轴飞行器上位机下载到飞行器和遥控器,并正常使用了。

该文章出自圆点博士无人机www.bspilot.com

原文地址:https://www.cnblogs.com/xiao-yong/p/8933391.html

时间: 2024-10-27 19:47:19

四轴飞行器Bootloader和固件的更新的相关文章

超酷MWC四轴飞行器DIY全套教程

本帖最后由 hitor 于 2013-8-17 22:06 编辑一.自己玩四轴的经历介绍.      各位模友大家好,我是哈工大航院的一名学生.我接触四轴的时间较早,由于我室友大二做科创就是做四轴的,那时候我们俩一人负责一个项目,他做四轴我做电动独轮车,我不太喜欢我的项目,烧了好多钱,最后也只能草草了事.我对四轴倒是很感兴趣,所以他一焊电路.写程序或是调试PID参数,我都像跟班似的死死的盯着他做的东西,有不懂的就向他请教,时间长了我也掌握了四轴的一些基本知识.几个月前我突发了做四轴的想法,但我不

教你从零开始制作四轴飞行器

航模非玩具,请遵守法律法规及论坛四句箴言!安全飞行! *阅读不同的教程帖有助于更快地入门 *玩模型需要一颗淡定的心,请做好逐字逐句阅读数百页说明书甚至自学外语的准备,如果不能静下心来阅读.琢磨.研究,那么模型这个爱好不适合你 发帖不易,顶贴容易,且看且珍惜 8.17更新:3楼,什么是进角? 1.  如果你想享受飞行的乐趣,不想被装机,修机折磨,并且又有一定的经济条件的话,那么大疆精灵是你不二的选择.如果你想体验飞行和动手的双重乐趣,或者RMB是个问题,那么自己动手吧! 2.  善用论坛搜索功能事

四轴飞行器1.2.3 STM32F407时钟配置和升级标准库文件

原创文章,欢迎转载,转载请注明出处 这个星期进度比较慢哈,只有周末和晚上下班回来才能做,事件不连续,琐碎的事情又比较多,挺烦的,有多琐碎呢?           1.本人有点小强迫症哈,虽然RTT将文件夹已经分类的很好了,但是在一个项目跟目录下这样放着看起来还是很不舒服的哈,于是强迫症范了,要整理下它.按照以前做项目的习惯,将程序分为四个层次,硬件层,驱动层,系统层和应用层,我们就整理下,对三个文件夹,其中硬件层和驱动层放在BSP文件夹里面,BSP文件里面再分硬件和驱动的文件夹,同时添加一个库文

四轴飞行器1.2.1 RT-Thread 环境搭建

买的飞控板到了,开始写下位机的程序了,本来打算用UCOS的,因为以前用过,比较熟悉,可以很快上手,不过板子的卖家推荐了RT-Thread,以前虽然有接触过,但是没用过,于是去官网看了下,感觉还不错.其一这是咱们国人写的,其二USOS有的基本任务调度功能它都有了,其三它的GUI貌似原生支持中文(不确定),其四他有很多的附加组件,虽然这些组建大部分在以前做项目的时候都自己完成过,并且我并不怎么喜欢集成度太高的RTOS,但是这次可以尝试看看.还有它有些好的环形buffer,可以用来做串口的缓冲,哈,这

四轴飞行器飞行原理与双闭环PID控制

四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的运用前景. 四轴飞行器关键技术在于控制策略.由于智能控制算法在运行复杂的浮点型运算以及矩阵运算时,微处理器计算能力受限,难以达到飞行控制实时性的要求:而PID控制简单,易于实现,且技术成熟,因此目前主流的控制策略主要是围绕传统的PID控制展开. 1 四轴飞行器的结构与基本飞行原理 四轴飞行器结构主要

四轴飞行器设计报告

单片机应用技术实训设计报告(四轴飞行器) 所属系部: 电气信息工程系 班 级: (2014)通信技术1班 姓 名: 彭世秋 指导老师: 施 芸 摘 要 为了满足四轴飞行器的设计要求,设计了以微控制器为核心的控制系统和算法.首先进行了各单元电路方案的比较论证,确定了硬件设计方案.四轴飞行器采用了固连在刚性十字架交叉结构上的4个无刷电机驱动的一种飞行器,以ARM公司的Context-M3 CPU內核为基础,围绕新的Context-M3 CPU內核演化而来的意法半导体公司的STM32F103高容量单片

DIY crazyflie四轴飞行器

看到国外开源的 crazyflie四轴飞行器 觉得不错,很想DIY一个. 搜集了一些资料 官方网站:http://www.bitcraze.se/category/crazyflie/ 固件程序 .原理图 .PCB下载 :https://github.com/bitcraze DIY crazyflie四轴飞行器,码迷,mamicode.com

四轴飞行器6050六轴传感器软件姿态解算

使用MPU6050硬件DMP解算姿态是非常简单的,下面介绍由三轴陀螺仪和加速度计的值来使用四元数软件解算姿态的方法. 我们先来看看如何用欧拉角描述一次平面旋转(坐标变换): 设坐标系绕旋转α角后得到坐标系,在空间中有一个矢量在坐标系中的投影为,在内的投影为由于旋转绕进行,所以Z坐标未变,即有. 转换成矩阵形式表示为: 整理一下: 所以从旋转到可以写成 上面仅仅是绕一根轴的旋转,如果三维空间中的欧拉角旋转要转三次: 上面得到了一个表示旋转的方向余弦矩阵. 不过要想用欧拉角解算姿态,其实我们套用欧拉

MWC四轴飞行器代码解读

MWC v2.2 代码解读annexCode() 红色是一些暂时没去顾及的部分,与我现在关心的地方并无太大关系. 函数对rcDate进行处理(去除死区,根据油门曲线,roll/pitch曲线,油门值,动态PID调整参数,在无头模式对于rcdata进行优化),生成rccommand值用于姿态控制.记录最大循环时间,最小循环时间,解锁时间,最大气压值.用LED表示一些传感器运行的状态.若定义了低压报警则进行电压测量. rccommand[油门]在0-1000之间  rccommand[roll/pi