BetaFlight统一硬件配置文件研读之serial命令

news2024/11/23 15:32:01

BetaFlight统一硬件配置文件研读之serial命令

  • 1. 源由
  • 2. 代码分析
  • 3. 实例分析
  • 4. 配置情况
  • 5. 参考资料

统一硬件配置文件的设计是一种非常好的设计模式,可以将硬件和软件的工作进行解耦。

1. 源由

cli命令中serial是对UART串口的配置,通常情况下BetaFlight飞控会有一个USB VCP端口用来处理MSP消息配置飞控,其他端口更具应用来进行配置,所以厂家默认出厂可以不配,由用户根据需要调整。

2. 代码分析

cliSerial
 ├──> <isEmpty(cmdline)> printSerial(DUMP_MASTER, serialConfig(), NULL, NULL); return
 ├──> [Get 1 param: identifier] 
 │   ├──> serialPortConfig_t *currentConfig = serialFindPortConfigurationMutable(val)
 │   └──> portConfig.identifier = val
 ├──> [Get 2 param: functionMask]
 │   └──> portConfig.functionMask = val
 ├──> [Get 3 param: msp_baudrateIndex]
 │   └──> portConfig.msp_baudrateIndex = baudRateIndex
 ├──> [Get 4 param: gps_baudrateIndex]
 │   └──> portConfig.gps_baudrateIndex = baudRateIndex
 ├──> [Get 5 param: telemetry_baudrateIndex]
 │   └──> portConfig.telemetry_baudrateIndex = baudRateIndex
 ├──> [Get 6 param: blackbox_baudrateIndex]
 │   └──> portConfig.blackbox_baudrateIndex = baudRateIndex
 ├──> <validArgumentCount < 6> error return
 ├──> memcpy(currentConfig, &portConfig, sizeof(portConfig))
 └──> cliDumpPrintLinef(0, false, format,
        portConfig.identifier,
        portConfig.functionMask,
        baudRates[portConfig.msp_baudrateIndex],
        baudRates[portConfig.gps_baudrateIndex],
        baudRates[portConfig.telemetry_baudrateIndex],
        baudRates[portConfig.blackbox_baudrateIndex]
        );

程序中实际使用的波特率采用index来记录,节省空间。

const uint32_t baudRates[] = {0, 9600, 19200, 38400, 57600, 115200, 230400, 250000,
        400000, 460800, 500000, 921600, 1000000, 1500000, 2000000, 2470000}; // see baudRate_e

functionMask定义如下,如果需要自定义特殊的端口,可以根据表格选择。

typedef enum {
    FUNCTION_NONE                = 0,
    FUNCTION_MSP                 = (1 << 0),  // 1
    FUNCTION_GPS                 = (1 << 1),  // 2
    FUNCTION_TELEMETRY_FRSKY_HUB = (1 << 2),  // 4
    FUNCTION_TELEMETRY_HOTT      = (1 << 3),  // 8
    FUNCTION_TELEMETRY_LTM       = (1 << 4),  // 16
    FUNCTION_TELEMETRY_SMARTPORT = (1 << 5),  // 32
    FUNCTION_RX_SERIAL           = (1 << 6),  // 64
    FUNCTION_BLACKBOX            = (1 << 7),  // 128
    FUNCTION_TELEMETRY_MAVLINK   = (1 << 9),  // 512
    FUNCTION_ESC_SENSOR          = (1 << 10), // 1024
    FUNCTION_VTX_SMARTAUDIO      = (1 << 11), // 2048
    FUNCTION_TELEMETRY_IBUS      = (1 << 12), // 4096
    FUNCTION_VTX_TRAMP           = (1 << 13), // 8192
    FUNCTION_RCDEVICE            = (1 << 14), // 16384
    FUNCTION_LIDAR_TF            = (1 << 15), // 32768
    FUNCTION_FRSKY_OSD           = (1 << 16), // 65536
    FUNCTION_VTX_MSP             = (1 << 17), // 131072
} serialPortFunction_e;

3. 实例分析

# serial
serial 0 64 115200 57600 0 115200

注:这里其实不配也没有关系,不知道为什么厂家考虑使用了一个串口配置。

4. 配置情况

  • serial 20:USB VCP用于MSP通信(FUNCTION_MSP),系统默认配置
  • serial 0:厂家配置文件提供
# serial
serial 20 1 115200 57600 0 115200
serial 0 64 115200 57600 0 115200
serial 1 0 115200 57600 0 115200
serial 2 0 115200 57600 0 115200
serial 3 0 115200 57600 0 115200
serial 5 0 115200 57600 0 115200
serial 6 0 115200 57600 0 115200
serial 7 0 115200 57600 0 115200

以下是BetaFlight配置工具呈现的情况:
在这里插入图片描述

5. 参考资料

【1】BetaFlight开源代码框架简介
【2】BetaFlight统一硬件资源简单配置修改
【3】BetaFlight统一硬件配置文件研读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信创赛道全国二等奖!创邻科技国产化解决方案再获佳绩

4月27日&#xff0c;第六届数字中国建设峰会在福建省福州市开幕。本届峰会以“加快数字中国建设&#xff0c;推进中国式现代化”为主题&#xff0c;以宣传贯彻落实《数字中国建设整体布局规划》为主线&#xff0c;集中展示数字中国建设最新成果&#xff0c;分享发展经验&#x…

C++题解:静态区间最大值

题目链接 P3865 ST 表 题目描述 这是一道 ST 表经典题——静态区间最大值 请注意最大数据时限只有 0.8s&#xff0c;数据强度不低&#xff0c;请务必保证你的每次查询复杂度为 O ( 1 ) O(1) O(1)。若使用更高时间复杂度算法不保证能通过。 如果您认为您的代码时间复杂度正…

java版企业电子招投标采购系统源码——功能模块功能描述+数字化采购管理 采购招投标

​ 功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

ansible常见概念总结

目录 1、play和playbook和role 2、幂等性 3、清单 4、配置文件(ansible.cfg) 5、变量 5.1 在playbook中使用变量&#xff1a; 5.2 在playbook中使用变量文件&#xff1a; 6、事实 7、循环 8、处理程序 9、块 10、动态清单文件 11、角色 1、play和playbook和role …

本地事务,分布式事务(Seata)

本地事务 四大特性ACID A:原子性(Atomicity)&#xff1a;事务是不可分割的最小操作但愿&#xff0c;要么全部成功&#xff0c;要么全部失败 C:一致性(Consistency)&#xff1a;事务完成时&#xff0c;必须使所有数据都保持一致状态 l:隔离性(Isolation)&#xff1a;数据库系统…

[架构之路-188]-《软考-系统分析师》-3-操作系统 - 图解页面替换算法LRU、LFU

目录 一、内存置换算法的缘由 二、算法详解 2.1 最佳页面置换算法&#xff08;OPT&#xff09; 》 理论上的最优&#xff0c;实际无法保证 2.2 先进先出置换算法&#xff08;FIFO&#xff09;-- 按加载时间/最早访问时间排序 2.3 最近最久未使用的置换算法&#xff08;L…

JDK、JRE 和 JVM 之间的区别

虚拟机 JVM&#xff08;Java Virtual Machine&#xff09;是一个抽象机器。之所以称为虚拟机&#xff0c;是因为它在物理上并不存在。它是一个规范&#xff0c;它提供了一个可以在其中执行 Java 字节码的运行时环境。它还可以运行那些用其他语言编写并编译为 Java 字节码的程序…

c++详解之右值引用

右值引用&#xff1a; 右值引用是C11引入的一个新特性&#xff0c;它允许我们显式地将一个表达式标记为右值&#xff0c;从而可以使用移动语义进行优化。 在C中&#xff0c;每个表达式都是要么是左值&#xff0c;要么是右值。左值是指可以取地址的表达式&#xff0c;例如变量…

linux 系统下gcc

linux c gcc gcc编译可以执行4步骤&#xff1a;预处理、编译、汇编、链接 预处理 gcc -E hello.c----->hello.i 展开宏、头文件&#xff0c;替换条件编译&#xff0c;删除注释、空行、空白 编译 gcc -S hello.i------>hello.s 检查语法规范 汇编 gcc -c hello.…

网络安全行业就职岗位有哪些?

网络安全作为目前最火的行业之一&#xff0c;它的细分方向很多。下面介绍一下网络安全主要的方向岗位有哪些&#xff0c;以及职责是什么&#xff1f; 一、安全规划与设计方向 岗位名称&#xff1a;系统安全需求分析师。 岗位职责&#xff1a;负责对目标对象需要达到的安全目标…

DIN11 FVI频率脉冲信号转电压电流信号隔离转换模块变换器

主要特性 将单位脉冲信号转换成直流电压或电流信号。 精度等级&#xff1a;0.1 级、0.2 级、0.5 级。产品出厂前已检验校正&#xff0c;用户可以直接使用。 国际标准信号输入: 0-5KHz/0-10KHz/1-5KHz等 0-5V/0-10V/1-5V 等电压信号,0-10mA/0-20mA/4-20mA 等电流信号。 …

新港转债,百洋转债上市价格预测

新港转债 基本信息 转债名称&#xff1a;新港转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;3.69135亿元。 正股名称&#xff1a;新中港&#xff0c;今日收盘价&#xff1a;8.67元&#xff0c;转股价格&#xff1a;9.18元。 当前转股价值 转债面值 / 转…

Java设计模式-代理模式

简介 代理模式是一种结构型设计模式&#xff0c;它可以让我们通过一个代理对象来访问一个真实的目标对象&#xff0c;从而实现对目标对象的功能扩展或保护。代理模式的主要角色有三个&#xff1a; 抽象主题&#xff08;Subject&#xff09;&#xff1a;定义了真实主题和代理主…

Prompt 技巧指南-让 ChatGPT 回答准确十倍!

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;张晨 随着 ChatGPT 等大型语言模型 (LLM)的兴起&#xff0c;人们慢慢发现&#xff0c;怎么样向 LLM 提问、以什么技巧提问&#xff0c;是获得更加准确的回答的关键&#xff0c;也由此产生了提示工程这个全新的领域。 提示工…

JavaScript实现输入班级人数和成绩后,输出总成绩、平均成绩、最高分、最低分的代码

以下为实现输入班级人数和成绩输出总成绩、平均成绩、最高分、最低分的代码和运行截图 目录 前言 一、实现输入班级人数和成绩&#xff0c;输出总成绩、平均成绩、最高分、最低分的代码 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有…

JavaWeb《后端内容:1.Tomcat--Servlet--Thymeleaf》

目录 1. 基础概念 1.1 BS架构和CS架构 1.2 Tomcat图解 2.TomCat 2.1 IDEA配置web项目和tomcat 2.2 idea启动TomCat因为端口号失败的问题 3.Servlet使用流程 3.1 Servlet简单图解 3.2 Servlet导入依赖 3.3 编写Servlet和add.html 3.4 试着使用Jdbc和Dao层连接水果库存…

超细Redis(一)

目录 概述 Redis是什么&#xff1f; Redis能干嘛&#xff1f; 特性 如何学习 Linux安装 测试性能 概述 Redis是什么&#xff1f; Redis &#xff08;Remote Dictionary Server&#xff09;,即远程字典服务 是一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持…

阿里版ChatGPT——通义千问,开箱初体验

所有行业、所有应用、所有服务都值得基于新型人工智能技术重做一遍&#xff0c;在带来创造性客户体验的同时&#xff0c;生产范式、工作范式、生活范式也将发生变化。——阿里集团董事会主席兼CEO 张勇 2023阿里云峰会上&#xff0c;通义千问大语言模型对外发布&#xff0c;宣称…

【语义分割】LinkNet 从0到1 和代码实现

文章目录 前言1.网络结构1.1 网络结构示意图1.2 创建LinkNet模型 2.代码 前言 已经有了U-net了&#xff0c;为什么需要linkNet&#xff1f; unet见这个文章【语义分割】unet结构和代码实现:https://blog.csdn.net/weixin_40293999/article/details/129648032 它引入了resNet&a…

“SDL 入门指南:了解 SDL,快速上手 SDL 的安装和配置”——VS2022

前言 欢迎来到小K的SDL专栏第一小节&#xff0c;本节为大家介绍一下SDL是什么&#xff0c;能做什么&#xff0c;可以在哪些平台运行以及SDL的安装和VS2022配置SDL、导出模板、cmake运行SDL&#xff0c;同时我也会在资源里为大家上传SDL2.26的安装包&#xff0c;为在github上下载…