Beecore Lite Silverware 有刷飞控.源码解读1
36元空心杯飞控Beecore Lite(Silverware固件)
这套源码里面频繁出现:
这个东西,是个芯片,在飞控里面
https://datasheet.lcsc.com/szlcsc/XN297L_C88025.pdf
如果想完成这样一个小玩意儿的制作,你需要按照下面的东西购买:
当然你要是有,就可以不用买
连接图是这样的
上面的通道顺序是按照AETR出现的,但是网上对这个东西所说甚少,这
也是bf固件默认的模式
OpenTX的系统是可以设置这个的
这是这个A,E,T,R的意思
在固件编译前要做选择射频芯片和协议的选择。
/*********************/
/*** 发送设置 ***/
/*********************/
//根据你的TX修改通道顺序:AETR, TAER, RETA...
//示例:Flysky & DEVO 是 AETR,JR/Spektrum 无线电是 TAER,Multiplex 是 AERT...
//默认为AETR。
#define AETR
/****************/
/*** 射频芯片 ***/
/****************/
//支持5个射频组件。如果未安装其中之一,则必须使用“//”对其进行注释。
//如果没有安装芯片,所有相关协议都会自动禁用。
//4合1模块安装了A7105、CYRF6936、CC2500和NRF24L01射频芯片
//5 合 1 模块已安装所有射频芯片//!!!如果存在射频芯片,则必须将其标记为已安装!!!否则会发生奇
怪的事情,您已被警告。
#define A7105_INSTALLED
#define CYRF6936_INSTALLED
#define CC2500_INSTALLED
#define NRF24L01_INSTALLED//#define SX1276_INSTALLED // 仅支持 STM32 模块
/********************************/
/*** 要包含的协议 ***/
/********************************/
//在此部分选择您希望在使用模块时可以访问的协议。
//所有的协议都不适合Atmega328p模块,所以你需要挑挑拣拣。
//用“//”注释您不使用的协议以节省Flash空间。
//模块配置协议
#define MULTI_CONFIG_INO
//以下协议需要安装A7105
#define AFHDS2A_A7105_INO
#define AFHDS2A_RX_A7105_INO
#define BUGS_A7105_INO
#define FLYSKY_A7105_INO
//以下协议需要安装NRF24L01
#define BAYANG_NRF24L01_INO
#define BAYANG_RX_NRF24L01_INO我删除了很多的协议,有需要的自己去看一下
//Example on how to remove unwanted protocols to fit in flash for Atmega 328 modules
大概是这样的注释掉
/****************************/
/*** 教练设置 ***/
/****************************/
// 默认情况下,Multi 使用遥测线使用 RX 协议(FrSky、DSM、AFHDS2A、Bayang)将接收到的信道发送到无线电。
// 但这不适用于 FrSky 无线电,因为内部和外部模块的遥测线是共享的(硬件限制)。
// 在 STM32 模块上,通过简单的硬件修改,您可以使用 CPPM 将训练器信息发送到无线电来解决此限制。
//硬件修改:在STM32 USART1 TX引脚(Boot0编程TX引脚)和radio bay pin 2之间加一个1K电阻。
//注释禁用
#define SEND_CPPM
/********************************/
/*** 串行模式设置 ***/
/********************************/
//此部分可以配置串口模式。
//串行模式可以在收音机的 GUI 中完全编辑所有参数。它通过将旋转开关置于位置 0 来启用。
//本机可用于 ER9X、ERSKY9X 和 OpenTX。
//如果您不打算使用串行模式,请使用“//”注释此行以节省 Flash 空间
#define ENABLE_SERIAL
/*****************************/
/*** PPM 模式设置 ***/
/*****************************/
//在此部分中,您可以配置有关 PPM 的所有详细信息。
//如果您不打算使用PPM模式,请使用“//”注释此行以节省Flash空间,在这种情况下您无需在下面配置任何内容
#define ENABLE_PPM
/** 发送结束点 **/
//让模块知道无线电的端点很重要。
//以下是一些已经预配置的标准发射器。
//仅取消注释与您的发射器匹配的那个。
#define TX_ER9X //ER9X/ERSKY9X/OpenTX ( 988<->2012 微秒)
//#define TX_DEVO7 //DEVO (1120<->1920 微秒)
//#define TX_SPEKTRUM //频谱(1100<->1900 微秒)
//#define TX_HISKY //HISKY (1120<->1920 微秒)
//#define TX_MPX //多路复用 MC2020(1250<->1950 微秒)
//#define TX_WALKERA //Walkera PL0811-01H(1000<->1800 微秒)
//#define TX_CUSTOM //自定义
// 如果您选择了 TX_CUSTOM,以下几行用于以微秒为单位设置终点。
// 需要考虑的几点:
// - 如果与 TX 相比,您设置的值太大,您将无法达到对油门不利的极端,例如
// - 如果您设置的值太低,您将无法使用完整的摇杆范围,它将在到达终点之前达到最大值
// - 中心棒值通常为 1500。它应该匹配 MIN 和 MAX 之间的中间值,即 Center=(MAX+MIN)/2。如果您的 TX 未居中,您可以调整值 MIN 或 MAX。
// - 100% 被称为当 TX 设置为默认值且没有修剪时的值
#如果已定义(TX_CUSTOM)
#define PPM_MAX_100 1900 // 100%
#define PPM_MIN_100 1100 // 100%
#万一
/** PPM 通道数 **/
// 以下行用于设置模块应接收的最小通道数,以考虑 PPM 帧有效。
// 默认值为 4 以至少接收飞行模型的 AETR,但您也可以通过将此数字更改为 3 从只有 3 个频道的汽车收音机连接 PPM。
#define MIN_PPM_CHANNELS 4
// 下面的行用于设置模块应该使用的最大通道数。任何接收到的高于此数字的频道都将被丢弃。
// 默认值为 16 以接收所有可能的频道,但您可能希望从 PPM 帧中过滤一些“坏”频道,例如 Walkera PL0811 上 6 以上的频道。
#define MAX_PPM_CHANNELS 16
/** 遥测 **/
//使用 FrSkyD 遥测格式发送简单的 FrSkyX 遥测
#define TELEMETRY_FRSKYX_TO_FRSKYD
/** 旋转开关协议选择器设置 **/
//下表指示了在选择了旋转开关上的特定位置时要运行的协议。
//所有字段和值解释如下。一切都可以从这里配置,就像在串行模式下一样。
//提示:您可以将同一协议多次关联到不同的旋转开关位置,以利用基于RX_Num的模型匹配
//银行系统允许访问比旋转开关上的位置更多的协议。可以通过将旋转开关置于位置 15、给模块加电和
// 多次短按绑定按钮,直到到达所需的那个。当前选择的库号由 LED 闪烁的数量指示。
// 完整程序位于:https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/blob/master/Protocols_Details
发电量撒
如果定义了这个
在config的文件里面
如果有了CC的宏就加入这个头,如果NRF就加NRF的头
上面4个芯片的定义在此
如果你选好了芯片就会引入这些头的一个或多个
NRF2401芯片的一些字节位的定义(其实是寄存器吧)
一开始的宏定义写了什么,绑定计数,包周期,分组电传周期,初始等待,包的大小,rf频道计数,绑定的频道数,地址长度啥的。。。感觉有点复杂
bayang这个协议我为什么这么在意。。。,甚至我这篇文章写完会成为全网第一个写bayang协议的文章,原因只有一个,我35块钱买的飞控就是这个。。。扔了舍不得,不扔你就得耍。这么便宜的东西,用在了很多的玩具无人机上面
BAYANG_FLAG_INVERTED = 0x80, // Floureon H101 倒飞
BAYANG_FLAG_TAKE_OFF = 0x20, // 在 X16 AH 起飞/降落
BAYANG_FLAG_EMG_STOP = 0x04 | 0x08, // 0x08 用于 VISUO XS809H-W-HD-G
你看这个协议里面有这么几个标志位,就是单独控制下面这几个玩具的动作的
自己看吧
第一个是遥测
第二个是模拟
接着就是往后运行,说这个option和这个标志位去与运算,就是去匹配。继续运行,还是一样的写法,去看看模拟辅助开了没有呀。还是开了,就吧0xA1给包的第一个位置,开启。
本来是可以写完的,结果下课了,晚上再看代码没有一点感觉了,等我下次再完整分析吧。