基于匿名飞控无人机STM32F4代码调试历程(四)
运行并烧录匿名官方 Keil 工程代码,实现一键起飞、降落及完整程控任务
系列
基于匿名无人机组装历程(一)
基于匿名无人机组装历程(二)
基于匿名无人机组装历程(三)
基于匿名无人机组装历程(四)
基于匿名无人机组装历程(五)
目录
- 系列
- 前言
- 一、安装5.36版本或以上keil
- 二、代码烧录及运行
-
-
- 1.将烧录器接到飞控的SWD接口上。
- 2.在 Keil 中点击 编译 → 下载 到目标板
- 3.打开遥控器实现User_Task.c文件中的一键起飞降落和起飞+悬停+前进+右移+降落例程
-
- 三、树莓派安装
- 总结
前言
距离上一次更新已经过去了两三个月,期末周叠加暑期各种事务,时间被压得很满。这次趁着空闲时间,直接将系列的(四)和(五)两篇内容一起准备好。
本篇(四)的主要内容有两个:
- 如何运行匿名官方的 Keil 工程代码 并成功烧录到飞控。
- 如何将 树莓派 安装到无人机平台上。
上一篇(三)中完成了无人机的基础组装和飞控连接,本篇算是向“程序控制”迈出的重要一步吧。
一、安装5.36版本或以上keil
- 下载安装匿名官网给的keil安装包(如果电脑上已经有低版本,可以直接覆盖安装。)
- 由于匿名官方提供的工程文件和烧录器驱动对 Keil 版本有要求,较低版本(江协教程中的 5.24),可能会遇到 DAP-Link 烧录器无法识别 的问题。

正确装好keil后便可以打开官方给的源码工程,点击魔术棒 打开Debug,在右边栏中选择CMSIS-DAP Debugger,点击settings,便可以看到下图所示,这就说明烧录器能够被识别到。如果依旧不能识别到的话可以去 J-Link官网 下载jlink驱动,将5.X版本到8.X版本都下载一遍,随后重启keil,便可以在debug中识别到烧录器了。

二、代码烧录及运行
1.将烧录器接到飞控的SWD接口上。

2.在 Keil 中点击 编译 → 下载 到目标板

3.打开遥控器实现User_Task.c文件中的一键起飞降落和起飞+悬停+前进+右移+降落例程
我先将User_Tack.c文件中的代码先粘上来
大概讲解一下这个文件的含义以及前置知识。在FS-I6X上一共有6个辅助通道,分别是SWA、SWB、SWC、SWD、VRA、VRB。在此之前我们已经设置了辅助通道5为SWC。
在这个代码中,需要用到的是[ch_6_aux2],即辅助通道六,又由于需要用到800、1500、2000三个段,所以我们需要选择一个三段式通道,所以只能选择VRA或者是VRB,在遥控器上设置通道六为VRA。
调节首先先将辅助通道5调至2000,让无人机进入程控模式,随后内八启动无人机。
调节VRA将旋钮调制1300-1700这个范围内使无人机飞至距地100cm高
( one_key_takeoff_f =OneKey_Takeoff(100); )
再将旋钮调制800-1200,使无人机降落
( one_key_land_f =OneKey_Land(); )
将旋钮调制1800-2200,无人机也会再一次进入程控模式,执行起飞+悬停+前进+右移+降落。
等10s
if(time_dly_cnt_ms<10000)
{
time_dly_cnt_ms+=20;//ms
}
前进1米
mission_step += Horizontal_Move(100,150,0);
右移1米
mission_step += Horizontal_Move(100,150,90);
#include "User_Task.h"
#include "Drv_RcIn.h"
#include "LX_FC_Fun.h"
void UserTask_OneKeyCmd(void)
{
static u8 one_key_takeoff_f = 1, one_key_land_f = 1, one_key_mission_f = 0;
static u8 mission_step;
if (rc_in.no_signal == 0)
{
if (rc_in.rc_ch.st_data.ch_[ch_6_aux2] > 1300 && rc_in.rc_ch.st_data.ch_[ch_6_aux2] < 1700)
{
if (one_key_takeoff_f == 0)
{
one_key_takeoff_f =OneKey_Takeoff(100);
}
}
else
{
one_key_takeoff_f = 0;
}
if (rc_in.rc_ch.st_data.ch_[ch_6_aux2] > 800 && rc_in.rc_ch.st_data.ch_[ch_6_aux2] < 1200)
{
if (one_key_land_f == 0)
{
one_key_land_f =OneKey_Land();
}
}
else
{
one_key_land_f = 0;
}
if(rc_in.rc_ch.st_data.ch_[ch_6_aux2]>1700 && rc_in.rc_ch.st_data.ch_[ch_6_aux2]<2200)
{
if(one_key_mission_f ==0)
{
one_key_mission_f = 1;
mission_step = 1;
}
}
else
{
one_key_mission_f = 0;
}
if(one_key_mission_f==1)
{
static u16 time_dly_cnt_ms;
switch(mission_step)
{
case 0:
{
time_dly_cnt_ms = 0;
}
break;
case 1:
{
mission_step += LX_Change_Mode(3);
}
break;
case 2:
{
mission_step += FC_Unlock();
}
break;
case 3:
{
if(time_dly_cnt_ms<2000)
{
time_dly_cnt_ms+=20;
}
else
{
time_dly_cnt_ms = 0;
mission_step += 1;
}
}
break;
case 4:
{
mission_step += OneKey_Takeoff(100);
}
break;
case 5:
{
if(time_dly_cnt_ms<10000)
{
time_dly_cnt_ms+=20;
}
else
{
time_dly_cnt_ms = 0;
mission_step += 1;
}
}
break;
case 6:
{
mission_step += Horizontal_Move(100,150,0);
}
break;
case 7:
{
if(time_dly_cnt_ms<10000)
{
time_dly_cnt_ms+=20;
}
else
{
time_dly_cnt_ms = 0;
mission_step += 1;
}
}
break;
case 8:
{
mission_step += Horizontal_Move(100,150,90);
}
break;
case 9:
{
if(time_dly_cnt_ms<10000)
{
time_dly_cnt_ms+=20;
}
else
{
time_dly_cnt_ms = 0;
mission_step += 1;
}
}
break;
case 10:
{
OneKey_Land();
}
break;
default:break;
}
}
else
{
mission_step = 0;
}
}
}
三、树莓派安装
为了方便后续开发(如图传、ROS2 控制等),我在飞控平台上 3D 打印了一个额外平台用于安装树莓派和电源。
建模工具:SolidWorks(推荐 这个B站教程 入门)
安装效果:将树莓派、电源模块固定在打印平台上
后续优化:
- 目前整体重量偏大
- 下方空间利用率低
- 外观不够规整
- 计划重新设计结构并在分电板上加一个树莓派专用供电电路

总结
本篇完成了两件事:
成功运行并烧录匿名官方 Keil 工程代码,实现一键起飞、降落及完整程控任务。
在无人机平台上安装树莓派,为后续功能扩展做准备。
下一篇(五)将介绍如何在树莓派上配置环境、连接飞控以及初步实现无人机的远程控制与数据传输。
如有不足还请在评论区多多指教,如果有不懂的地方也可以评论区中提问,看到就会回复
ヾ(T(エ)Tヽ)
更多推荐



所有评论(0)