cleanflight成功移植到MDK(keil)

来源:互联网 发布:翻译软件哪个好 编辑:程序博客网 时间:2024/05/17 22:28

玩过穿越机的朋友们都知道cleanflight飞控。这是一个完全开源的飞控。目前穿越机使用的飞控主要有CC3D、baseflight、cleanflight、betaflight、raceflight等等。在cleanflight前面的版本都没有使用到操作系统。在cleanflight版本中使用了比较简单的操作系统。目前像PIX、APM这样的开源飞控是支持多种机型的(不仅仅是穿越机)。cleanflight飞控多被用于穿越机,但其实它也是支持多种机型的。
穿越机可以只用一个传感器就够了,陀螺仪加速度计(MPU6050\MPU6000),cleanflight飞控中也加入了许多其他的传感器或接口,他们是:电子罗盘(HMC5883L、AK8975、AK8963)、气压计(BMP085、MS5611、BMP280)、GPS接口(USART)、光流计接口(I2C\SPI)。调整参数飞各种机型的飞行器都是可以的。但是cleanflight代码是在linux系统上使用交叉编译工具链编译的。linux操作系统是开源的操作系统在国外版权意识比较浓厚,使用开源的操作系统和软件不用付费。但是在国内的飞控开发者,大部分是大学生、研究生和以下小型的创业公司,对于linux操作系统是极其不熟悉的,况且交叉编译工具链的配置极其繁琐,所以只有少数高级的编程高手才能使用linux操作系统完成实际的项目。国内的对于只处于中低层次的学生和其他开发者大部分的项目的还是在windows操作系统上完成的。windows操作系统其傻瓜式操作,即使是三岁小孩稍加练习也是可以很好的使用的。cleanflight代码完全开源,大家可以从github网站上下载到源代码。有兴趣可以使用普通的文本编辑器打开里面的.c.h.s文件看看。要想看工程就需要移植了。下面说说我的移植过程!
首先,你需要制作一个硬件。在移植过程中会有许多的bug,需要在硬件上实验然后解决。代码编译通过烧录到芯片控制器里面未必能正常运行,这需要不断的做实验,反正博主烧坏了两块板子。下面是我设计和制作的PCB:
top
bottom

我这边只移植了stm32f103的代码,使用的芯片是stm32f103rct6,mpu6050、ms5611、hmc5883。所有的这三块芯片的通信方式都是I2C通信。在同一根总线上,另外在相同的总线上引出两路路I2C接口。引出串口1用于下载程序和调试代码,调试时打印出相印的数据,没有SWD接口,再说似乎如此大的工程量的代码SWD调试并不能运行。引出串口2(USART2)用于接收GPS信号,还引出一路声呐(SONAR)接口(5V、trig、echo、GND)。8路PWM输入由于捕获遥控接收机的PWM脉宽,10路PWM输出用于输出控制电机的PWM波。三个LED信号显示灯。用于显示解锁上锁信息和飞行模式信息。一路SPI接口(PCB中没有标出)。
PCB正面
正面
反面
反面

下面我们去github网站下载cleanflight的源代码。下载下来的压缩文件解压后的文件夹目录如下:
目录
和库有关的代码,都在lib文件夹下。我们所需要的源码在cleanflight-master\src\main文件夹中,这里面又有分开多个文件夹,这些都是飞控代码的内容。
目录
lib文件夹下的文件我们暂时不管他,要移植我们可以先再mdk上建立stm32f103的工程,加入库函数,在主函数里面什么都不加,然后编译,通过说明工程建立没有错。然后再加入源文件头文件。缺啥补啥,然后是各种修bug改错,这边需要很高的程序员修养,能够看懂并想办法解决编译器打印出来的错误和警告。如果耐心的素养不够高,我的建议是到此为止你就放弃吧。因为博主在下面的工作完成的周期是一个月,没日没夜的干。对程序员一个建议,别像我这样发狂的干活,容易出事,我的牙痛就是从那个时候开始的,程序员们要照顾好自己身体。自己图一时满足感身体垮了便宜了谁,想必大家都清楚。下面是我移植好了的工程截图。后面还有实际飞行的视频链接
代码工程
这些个是实际的飞行视频网址:
http://v.youku.com/v_show/id_XMTcxNzk4MTI0NA==.html?spm=a2h3j.8428770.3416059.1
http://v.youku.com/v_show/id_XMTcxNzk5MDkzNg==.html?spm=a2h3j.8428770.3416059.1
后期还使用了S500在乡下航拍视频,航拍极美。

                          -----山东大学机器人研究中心(博主个人完成所有工作量)