ODrive开发 #1 ODrive固件开发指南[通俗易懂]

ODrive固件开发指南本指南适用于希望修改ODrive固件的开发人员。因此,它假定您了解诸如如何使用Git,什么是编译器之类的知识。如果这听起来很陌生,以下内容对您来说可能不适合。官方发行版在master分支上。但是,由于您是开发人员,因此建议您使用devel分支,因为它包含最新功能。该项目正在积极开发中,因此请确保检查更新日志以跟踪更新动态。文章目录ODrive固件开发指南需要的开…

大家好,又见面了,我是你们的朋友全栈君。

ODrive固件开发指南

本指南适用于希望修改ODrive固件的开发人员。
因此,它假定您了解诸如如何使用Git,什么是编译器之类的知识。如果这听起来很陌生,以下内容对您来说可能不适合。
官方发行版在master分支上。 但是,由于您是开发人员,因此建议您使用devel分支,因为它包含最新功能。
该项目正在积极开发中,因此请确保检查更新日志以跟踪更新动态。

需要的开发工具

推荐使用的ODrive开发工具为:

  • make: 用于调用 tup
  • Tup: 用于调用编译命令的构建系统
  • ARM GNU Compiler: 对于交叉编译代码
  • ARM GDB: 用于调试代码并在设备上逐步执行
  • OpenOCD: 用与使用STLink / v2编程器对ODrive进行烧录
  • Python3: 用于运行Python工具,并且安装 PyYAML,Jinja2 ,jsonschema 包

有关适用于您的操作系统的特定安装说明,请参见下文。
根据您要执行的操作,可能并不需要所有组件。
一切准备就绪后,您可以运行以下命令来验证安装是否正确:

$ arm-none-eabi-gcc --version
$ arm-none-eabi-gdb --version
$ openocd --version             # should be 0.10.0 or later
$ tup --version                 # should be 0.7.5 or later
$ python --version              # should be 3.7 or later

Linux (Ubuntu)

sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded
sudo apt-get install openocd
sudo add-apt-repository ppa:jonathonf/tup && sudo apt-get update && sudo apt-get install tup

Arch Linux

sudo pacman -S arm-none-eabi-gcc arm-none-eabi-binutils
sudo pacman -S arm-none-eabi-gdb
sudo pacman -S tup

Mac

首先安装Homebrew. 然后您可以在命令终端中输入以下命令:

brew install armmbed/formulae/arm-none-eabi-gcc
brew cask install osxfuse && brew install tup
brew install openocd

Windows

注意: 确保这些程序不仅已安装,而且正确添加到您的环境变量PATH中。

本文档中的某些说明可能假定您正在使用bash命令提示符,例如Windows 10内置bash或Git bash。

  • ARM compiler
    • 注意 1: 安装后需要添加 ARM_GCC_ROOT 到您的环境变量,并设置值为您的安装路径 e.g. C:\Program Files (x86)\GNU Tools Arm Embedded\7 2018-q2-update。此变量将被 Visual Studio Code 所使用。
    • 注意 2: 8-2018-q4-major 版本在Windows下存在某些bug。请在Windos下使用 7-2018-q2-update版本。
  • Tup
  • GNU MCU Eclipse’s Windows Build Tools
  • OpenOCD.
  • ST-Link/V2 Drivers

配置编译参数

要自定义编译参数,请将文件Firmware/tup.config.default复制或重命名为Firmware/tup.config,然后在该文件中编辑参数:

CONFIG_BOARD_VERSION: 您正在使用的ODrive硬件版本。 可以是v3.1,v3.2,v3.3,v3.4-24V,v3.4-48V,v3.5-24V,v3.5-48V等。检查ODrive上的丝印以找出您使用的版本。 某些ODrive版本未指定电压:在这种情况下,您可以看一下电容器的值:120uF是48V ODrive,470uF是24V ODrive。

CONFIG_USB_PROTOCOL: 定义ODrive在USB接口上使用的协议。

  • native: ODrive原生通讯协议。ODrive以USB设备被系统识别。在macOS系统下有可能无法工作。
  • native-stream: 和原生通信协议类似,只不过ODrive被系统以UART连接对待。可以在macOS系统下正常工作。
  • none: 禁用 USB通讯。虽然插入设备后仍会被现实,但它将忽略所有指令。

注意: 第二个USB接口始终是一个串行端口。

CONFIG_UART_PROTOCOL: 定义ODrive在UART接口(GPIO1和GPIO2)上应使用哪种协议。 请注意,仅ODrive v3.3和更高版本支持UART。

  • native: ODrive原生通信协议。如果要使用UART将ODrive连接到PC,并且想使用python工具来控制和设置ODrive,请使用此功能。
  • ascii: ASCII 格式通信协议。如果您想使用Arduino控制ODrive,请使用此选项。因为 ODrive Arduino库尚不支持ODrive原生通信协议。
  • none: 禁用UART。

构建并烧录固件

  1. 在 Firmware 目录下运行 make 。
  2. 通过USB连接ODrive并打开电源。
  3. 使用 odrivetool dfu命令烧录固件。

使用STLink/v2 烧录固件

  • 将烧录器连接到 J2 端子上的GND, SWD, SWC。 注意: 应当首先连接GND 。
  • 您仅需通过VCC(3.3v)、5V、**主电源连接(DC总线)**其中一项对ODrive供电。 USB端口(J1)是无法为ODrive供电的。
  • 在 Firmware 目录下运行 make flash
    注意: 如果出现错误类似 can't find target interface/stlink-v2.cfg ,您需要设置一个名为OPENOCD_SCRIPTS的环境变量,变量值设置为 openocd 脚本所在目录地址。

如果烧录成功,您可以使用 odrivetool和ODrive通信了。

自动化测试

tools/run_tests.py 这个测试脚本可以自动测试固件的某些特性还能够对ODrive进行老化测试。某些测试项目只需要一个电机加上编码器就可以,还有一些测试需要特定的测试台才可以。要进行任何测试都需要一个YAML文件,在YAML中编写测试参数,例如tools/test-rig-parallel.yaml。其中YAML中烧录器的序列号可以通过运行Firmware/find_programmer.sh脚本来得到(确保烧录器中的固件为STM的最新固件)。
测试脚本会使ODrive以高电流和高转速运行,因此,如果测试台不合适或者不够坚固(或电机空载),则可能会损坏机器。
用法示例:./run_tests.py --test-rig-yaml ../tools/test-rig-parallel.yaml

代码调试

如果您使用的是VSCode,请确保您具有Cortex Debug扩展插件,OpenOCD和STLink。 您可以通过烧录代码来验证OpenOCD和STLink是否正常工作。 打开ODrive_Workspace.code-workspace文件,然后启动调试(F5)。 VSCode将从工作空间中获取正确的设置并自动连接ODrive。 可以在VSCode中以图形方式添加断点。

  • 运行 make gdb。 这将重置并在程序启动并暂停。 现在,您可以设置断点并运行程序。 如果您知道如何使用gdb,那就再好不过了。

配置集成开发环境

开发ODrive代码,不需要IDE,但是建议使用开源IDE VSCode。 也可以使用Eclipse。 如果您想使用IDE,请参阅相应的配置文档:

STM32CubeMX

该项目使用 STM32CubeMX 来生成启动代码和外设配置代码。您可以从这里下载CubeMX。所有 CubeMX 相关的文件都在 Firmware/Board/v3文件夹下。

维护修改后生成的代码

STM32CubeMX 生成代码时,会剔除它们提供的某些特殊部分之外的所有内容。 特殊部分标记为“ USER CODE BEGIN” …“ USER CODE END”。
曾经,我们试图确保对生成的代码所做的所有编辑仅会出现在这些部分中,从某些代码结构就可以看出来。
但是随着时间的流逝,我们意识到这将很难实现,因此,当需要重新生成代码时,我们利用git来进行管理。我们使用两个特殊的git分支来实现。它们是 STM32CubeMX-start 和 STM32CubeMX-end。
下例显示了如何使用它们。
注意: 由于使用git rebase方式,所有更改生成代码的开发都应直接在STM32CubeMX-end上进行,而不是基于devel进行,然后按照下面的步骤4进行操作,以将其转移到新的功能分支中。 如果您对基于devel生成的代码进行了一些更改,则只需挑选那些更改到STM32CubeMX-end中即可。

1. 准备更改

  • 我们对STM32CubeMX配置进行的所有更改,并重新生成代码都应该在STM32CubeMX-start分支上。所以我们使用下面的命令切换到STM32CubeMX-start分支上。
    • git checkout STM32CubeMX-start
  • 运行stm32cubeMX 然后载入Firmware/Board/v3/Odrive.ioc 工程文件。
    • 如果载入过程中询问您是否要迁移到新版本,请选择下载旧的固件包(除非您要使用最新的库)。
  • 在不更改任何设置的情况下,点击 Project -> Generate code。
  • 您可能需要让它下载一些驱动程序等。
  • STM32CubeMX现在可能具有某些库已经更新,因此即使我们未更改任何设置,生成的代码也可能有所更改。 我们需要检查一切是否仍在工作,并检查更改:
  • git config --local core.autocrlf input 这会告诉git的所有文件应与LF结尾(CubeMX产生CRLF结尾)进行检查。
  • git diff 忽略一堆行结束警告。
  • 如果您觉得可以: 您现在可以检查CubeMX是否引入了一些愚蠢的方法。 如果有任何更改,并且看起来可以接受,我们应该提交它们:
    • git commit -am "Run STM32CubeMX v1.21" 替换为实际版本的CubeMX。

2. 更改STM32CubeMX配置

  • 完成上述步骤后,请确保工作目录是干净的:
    • git status 应该会显示 “nothing to commit, working tree clean”
  • 使用STM32CubeMX进行配置,保存,然后重新生成代码 (Project -> Generate code)。
  • git diff 检查引入的更改是否符合预期
  • 如果一切正常,则可以提交更改。

3. 将重新配置生成的代码rebase到STM32CubeMX-end分支

  • git checkout STM32CubeMX-end
  • git rebase STM32CubeMX-start
  • 确保完成rebase,并修复可能出现的任何冲突。

4. 将新的STM32CubeMX代码合并到功能分支中

只需将STM32CubeMX-end分支合并到新功能分支中。

  • git checkout your-feature
  • git merge STM32CubeMX-end

5. 将您的新特性分支提交到原作者

  • 为您的新功能生成正常的pull,request。
  • 确保已将提交STM32CubeMX-start和STM32CubeMX-end分支,到您的分支。
  • 并在提交记录中说明需要更新STM32CubeMX分支。

故障排除

使用 STLink/v2烧录提示LIBUSB_ERROR_IO

问题描述: 当我使用STLink对ODrive进行烧录时提示如下错误:

Open On-Chip Debugger 0.10.0
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 2000 kHz
adapter_nsrst_delay: 100
none separate
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : Unable to match requested speed 2000 kHz, using 1800 kHz
Info : clock speed 1800 kHz
Error: libusb_open() failed with LIBUSB_ERROR_IO
Error: open failed
in procedure 'init' 
in procedure 'ocd_bouncer'

解决方案:
这种情况时有发生。可以按照下列步骤来操作:

  1. 从电脑拔出 STLink 和 ODrive
  2. 断开 ODrive 的供电
  3. 将STLink插入电脑
  4. ODrive上电
  5. 再次尝试执行 make flash

发布

我们使用GitHub Releases发布固件。

  1. 查看changelog以了解新固件的新特性。
  2. 将其他特性分支合并到master支。
  3. 将(轻量级)标签推送到master分支。 请遵循现有的命名约定。
  4. 将python工具推送到PyPI。
  5. 在GitHub上发布该版本以添加标题和描述(从changelog复制并粘贴)。

其他代码维护说明

cortex M4F处理器具有硬件单精度浮点单元。 但是,双精度运算并没有被加速,因此应该避免。 以下正则表达式会清除双精度运算:
find: ([-+]?[0-9]+\.[0-9]+(?:[eE][-+]?[0-9]+)?)([^f0-9e])
replace: \1f\2

代码提交须知

一般而言,该项目使用 Google C++ Style Guide,不同之处在于默认指示符为4个空格,并且对80个字符的限制不是非常严格的。

如果您有任何问题或疑问,欢迎您加入ODrive社区或QQ群 851421965 进行交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125781.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • SCSA考试大纲[通俗易懂]

    SCSA考试大纲[通俗易懂]认证考试形式和结构一、试卷满分及时间试卷满分为120分,考试时间为80分钟,80分通过二、考试形式在线考试三、答题方式闭卷四、试卷内容知识结构试题比例网络基础15%信息安全基础5%数据传输安全15%上网行为安全30%边界安全20%…

    2022年6月20日
  • SQL Server 2008 评估期已过解决方法

    SQLServer2008有180天的试用期,过期后会提示“评估期已过”的提示。1、进入SQLServer安装中心:2、选择“维护”-“版本升级”3、输入密钥:其他的根据提示操作。附S

    2021年12月23日
  • 细说java_java barrier

    细说java_java barrier今天来说说cloneable,java中创建对象除了使用new关键字,反射,还有一种方式就是clone。有一个设计模式叫原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,简单的说就是clone一个对象实例,使得clone出来的对象和原有的对象一模一样,两个对象相互不影响。什么时候使用clone呢,clone又存在哪些问题?  1.clone的使用场景…

    2022年10月14日
  • PS初学者实例教程——图层样式的学习[斜面和浮雕]

    PS初学者实例教程——图层样式的学习[斜面和浮雕]本系列教程由中国教程网互助课堂专为PS新手制作,在这里有系列的教程、练习,并有老师对练习进行点评与指导,欢迎朋友们的光临!本例我们学习“斜面和浮雕”图层样式斜面和浮雕是使用频率最高的一种图层样式,熟悉和掌握操作技巧,我们就可以制作出精彩的效果;特别是等高线,运用得当可以制作出与众不同的特殊视觉效果图象题后留有练习作业题,请选择练习.如果使用了附加方法,请加以说明

    2022年9月4日
  • 计算机的发展历史和发展趋势_对未来计算机展望

    计算机的发展历史和发展趋势_对未来计算机展望论计算机发展史及展望(3页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!9.9积分论计算机发展史及展望杨露斯黎炼四川大学,成都双流610207摘要:自从1945年世界上第一台电子计算机诞生以来,计算机技术迅猛发展,CPU的速度越来越快,体积越来越小,价格越来越低。未来光子、一轮趨级计算技术革命。关键词:计算机;发展史;前景展望中图分类号:G4文…

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号