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

2023-05-16

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

  • 1. 源由
  • 2. 代码分析
  • 3. 实例分析
  • 4. 配置情况
    • 4.1 AFn配置查表
    • 4.2 timer
    • 4.3 timer show
    • 4.4 timer pin list
  • 5. 参考资料

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

1. 源由

cli命令中timer是对硬件引脚和timer资源进行绑定的一个操作,主要用于以下设备:

  • 电机
  • PPM接收机
  • LED灯带
  • 伺服器

2. 代码分析

cliTimer
 ├──> "timer"
 │   └──> printTimer(DUMP_MASTER, NULL); return
 ├──> "timer list"
 │   └──> "NOT IMPLEMENTED YET"
 ├──> <USE_TIMER_MAP_PRINT> "timer map"
 │   └──> showTimerMap(); return
 ├──> "timer show"
 │   └──> showTimers(); return
 ├──> <!pch || !strToPin(pch, &ioTag)> error return //边界检查
 ├──> <!IOGetByTag(ioTag)> error return //有效性检查
 ├──> [find existing entry, or go for next available] error return //如果entry满,失败
 ├──> <!pch> printTimerDetails(ioTag, timerIOConfig(timerIOIndex)->index, false, DUMP_MASTER, cliDumpPrintLinef); return
 └──> <pch> 
     ├──> "list"
     │   ├──> for (unsigned index = 0; (timer = timerGetByTagAndIndex(ioTag, index + 1)); index++) 
     │   ├──> cliPrintLinef("# AF%d: TIM%d CH%d%s", timer->alternateFunction, timerGetTIMNumber(timer->tim), CC_INDEX_FROM_CHANNEL(timer->channel) + 1,timer->output & TIMER_OUTPUT_N_CHANNEL ? "N" : "");
     │   └──> return
     ├──> "none"
     │   └──> timerIndex = TIMER_INDEX_UNDEFINED;
     ├──> "af"
     │   ├──> for (unsigned index = 0; (timer = timerGetByTagAndIndex(ioTag, index + 1)); index++)
     │   ├──> for (unsigned index = 0; (timer = timerGetByTagAndIndex(ioTag, index + 1)); index++)
     │   └──> <timer->alternateFunction == alternateFunction> timerIndex = index;
     ├──> [assign new io timer]
     │   ├──> int oldTimerIndex = isExistingTimerOpt ? timerIOConfig(timerIOIndex)->index - 1 : -1;
     │   ├──> timerIOConfigMutable(timerIOIndex)->ioTag = timerIndex == TIMER_INDEX_UNDEFINED ? IO_TAG_NONE : ioTag;
     │   ├──> timerIOConfigMutable(timerIOIndex)->index = timerIndex + 1;
     │   └──> timerIOConfigMutable(timerIOIndex)->dmaopt = DMA_OPT_UNUSED;
     ├──> <timerIndex == oldTimerIndex>
     │   └──> cliPrintLinef("# timer %c%02d: no change: %s", IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag), orgvalString)
     └──> <timerIndex != oldTimerIndex>
         └──> cliPrintLinef("# timer %c%02d: changed from %s to %s", IO_GPIOPortIdxByTag(ioTag) + 'A', IO_GPIOPinIdxByTag(ioTag), orgvalString, optvalString);

3. 实例分析

# timer
timer A10 AF1
# pin A10: TIM1 CH3 (AF1)
timer B00 AF2
# pin B00: TIM3 CH3 (AF2)
timer B01 AF2
# pin B01: TIM3 CH4 (AF2)
timer A00 AF2
# pin A00: TIM5 CH1 (AF2)
timer A01 AF2
# pin A01: TIM5 CH2 (AF2)
timer A02 AF2
# pin A02: TIM5 CH3 (AF2)
timer A03 AF2
# pin A03: TIM5 CH4 (AF2)
timer D12 AF2
# pin D12: TIM4 CH1 (AF2)
timer D13 AF2
# pin D13: TIM4 CH2 (AF2)
timer D14 AF2
# pin D14: TIM4 CH3 (AF2)
timer D15 AF2
# pin D15: TIM4 CH4 (AF2)
timer E05 AF4
# pin E05: TIM15 CH1 (AF4)
timer E06 AF4
# pin E06: TIM15 CH2 (AF4)
timer A08 AF1
# pin A08: TIM1 CH1 (AF1)

4. 配置情况

# help timer
timer - show/set timers
	<> | <pin> list | <pin> [af<alternate function>|none|<option(deprecated)>] | list | show

4.1 AFn配置查表

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

4.2 timer

# timer
timer A10 AF1
# pin A10: TIM1 CH3 (AF1)
timer B00 AF2
# pin B00: TIM3 CH3 (AF2)
timer B01 AF2
# pin B01: TIM3 CH4 (AF2)
timer A00 AF2
# pin A00: TIM5 CH1 (AF2)
timer A01 AF2
# pin A01: TIM5 CH2 (AF2)
timer A02 AF2
# pin A02: TIM5 CH3 (AF2)
timer A03 AF2
# pin A03: TIM5 CH4 (AF2)
timer D12 AF2
# pin D12: TIM4 CH1 (AF2)
timer D13 AF2
# pin D13: TIM4 CH2 (AF2)
timer D14 AF2
# pin D14: TIM4 CH3 (AF2)
timer D15 AF2
# pin D15: TIM4 CH4 (AF2)
timer E05 AF4
# pin E05: TIM15 CH1 (AF4)
timer E06 AF4
# pin E06: TIM15 CH2 (AF4)
timer A08 AF1
# pin A08: TIM1 CH1 (AF1)

4.3 timer show

# timer show

Currently active Timers:
-----------------------
TIM1:
    CH1 : LED_STRIP
TIM2: FREE
TIM3: FREE
TIM4: FREE
TIM5: FREE
TIM6: FREE
TIM7: FREE
TIM8:
    CH1 : DSHOT_BITBANG 2
    CH2 : DSHOT_BITBANG 1
TIM12: FREE
TIM13: FREE
TIM14: FREE
TIM15: FREE
TIM16: FREE
TIM17: FREE

4.4 timer pin list

# timer A10 list
# AF1: TIM1 CH3

5. 参考资料

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BetaFlight统一硬件配置文件研读之timer命令 的相关文章

随机推荐

  • ArduPilot飞控之DIY-F450计划

    ArduPilot飞控之DIY F450计划 1 历史2 源由3 计划3 1 硬件3 2 软件 4 动手4 1 接线4 1 1 ELRS nano接收机4 1 2 BN880 GPS模块4 1 3 Radio Telemetry 4 2 配
  • BN880 GPS u-center_v22.07工具配置方法

    BN880 GPS u center v22 07工具配置方法 1 源由2 分析3 自我实验3 1 测试现象3 2 u center v22 07工具3 3 波特率验证3 4 重新配置3 4 1 PRT Ports 3 4 2 PMS Po
  • Betaflight BN880 GPS 简单测试

    Betaflight BN880 GPS 简单测试 1 源由2 窗台对比测试3 开阔区域测试3 1 GPS安装位置3 1 1 BN880 GPS 机尾打印支架 安装位置3 1 2 BN880 GPS 机头固定 安装位置3 1 3 M8N G
  • 关于【无人驾驶航空器飞行管理暂行条例】对航模的一些信息讨论&汇总

    关于 无人驾驶航空器飞行管理暂行条例 对航模的一些信息讨论 amp 汇总 1 源由2 讨论3 理解3 1 关于 管理对象 的理解3 2 关于 模型航空器管理规则 的理解3 3 关于 模型航空器 的理解3 4 关于 安全 的理解 4 参考资料
  • ArduPilot Kakute F7 AIO DIYF450 without GPS配置

    ArduPilot Kakute F7 AIO DIYF450 without GPS配置 1 源由2 配置2 1 Kakute F7 AIO相关配置2 1 1 串口规划2 1 2 电传配置2 1 3 GPS配置2 1 4 CRSF接收机配
  • ArduPilot开源飞控系统之简单介绍

    ArduPilot开源飞控系统之简单介绍 1 源由2 了解 amp 阅读2 1 ArduPilot历史2 2 关于GPLv32 3 ArduPilot系统组成2 4 ArduPilot代码结构 3 后续3 1 DIY F4503 2 软件设
  • ArduPilot Kakute F7 AIO DIYF450 之GPS配置

    ArduPilot Kakute F7 AIO DIYF450 之GPS配置 1 源由2 步骤2 1 模块预测试2 2 物理连接2 3 UART配置2 4 Compass使能2 5 GPS使能2 6 校准Compass 3 GPS amp
  • 关于CSDN文章内嵌视频自动播放问题

    关于CSDN文章内嵌视频自动播放问题 1 源由2 分析3 反馈4 沟通5 总结6 附录 Firefox配置7 附录 Microsoft Edge配置 1 源由 这个问题是4月初发现的 xff0c 主要现象就是页面上的视频一起自动播放了 鉴于
  • 关于FPV图传系统时延讨论

    关于FPV图传系统时延讨论 1 源由2 时延测试方法3 时延测试资料4 关于模拟图传5 关于FPV时延感受5 1 静态时延5 2 动态时延 6 参考资料7 附录7 1 When is 120fps NOT 120fps DJI O3 Air
  • ArduPilot之开源代码框架

    ArduPilot之开源代码框架 1 系统框架2 工程框架2 1 工程目录2 2 代码组成2 3 运行流程 4 硬件传感器总线4 1 I2C4 2 SPI4 3 UART4 4 CAN 5 软件设计概念6 总结7 参考资料 在研读ArduP
  • Charles电脑配置和手机配置【超详细,iOS和安卓】

    1 xff0c 电脑安装charles charles的安装非常简单 xff0c 直接通过charles官网安装最新版即可 Charles 是收费软件 xff0c 可以免费试用 30 天 试用期过后 xff0c 未付费的用户仍然可以继续使用
  • vmmem内存占用高

    文章目录 前言通过 wslconfig限制其内存使用 前言 什么时vmmem进程 vmmem进程时在使用vmware时的进程 xff0c 内存占用非常高 我是在使用docker时遇到的这个进程 通过 wslconfig限制其内存使用 这个方
  • QGroundControl之安装调试

    QGroundControl之安装调试 1 源由2 问题汇总2 1 摄像头播放问题2 2 Windows电脑录像和拍照保存位置2 3 Android设备录像和拍照保存位置 3 打包资料4 附录 QGroundControl Video St
  • ArduPilot之posHold&RTL实测

    ArduPilot之posHold amp RTL实测 1 源由2 模式配置3 测试步骤4 飞行实测5 总结6 参考资料7 附录 关于QGC 暂不支持MAVLink2 signing Protocol问题7 1 问题描述7 2 硬件配置7
  • ArduPilot之开源代码Library&Sketches设计

    ArduPilot之开源代码Library amp Sketches设计 1 简介1 1 Core libraries1 2 Sensor libraries1 3 Other libraries 2 源由3 Library Sketche
  • ArduPilot之开源代码Sensor Drivers设计

    ArduPilot之开源代码Sensor Drivers设计 1 源由2 Sensor Drivers设计2 1 front end back end分层2 2 设计思想分析 3 实例理解3 1 驱动初始化3 2 业务应用代码3 3 fro
  • ArduPilot之开源代码基础知识&Threading概念

    ArduPilot之开源代码基础知识 amp Threading概念 1 源由2 基础知识2 1 The timer callbacks2 2 HAL specific threads2 2 1 AP HAL ChibiOS2 2 2 AP
  • ArduPilot之GPS Glitch问题&M8N模块配置

    ArduPilot之GPS Glitch问题 amp M8N模块配置 1 源由2 现象3 视频分析3 1 配置 xff08 不理想 xff09 3 2 配置优化3 3 优化配置 43 短时间 43 3D Lock 43 Glitch3 4
  • BetaFlight统一硬件配置文件研读

    BetaFlight统一硬件配置文件研读 1 源由2 分析2 1 硬件SOC2 2 统一配置文件2 3 cli命令2 4 板级配置主要命令2 4 1 board name2 4 2 manufacturer id2 4 3 resource
  • BetaFlight统一硬件配置文件研读之timer命令

    BetaFlight统一硬件配置文件研读之timer命令 1 源由2 代码分析3 实例分析4 配置情况4 1 AFn配置查表4 2 timer4 3 timer show4 4 timer pin list 5 参考资料 统一硬件配置文件的