TPA教学视频稿子

大家可能在开发M0系列芯片时遇到过这样的一些问题:官方的CCS框架过于古老,不兼容很多最新的AI插件Keil的环境配置过于复杂,对于很多新手来说学习负担大,很多时间经常浪费在不知道怎么下载和调试上(当然不可否认的是Keil的调试功能确实很强大,但是在电赛中,我们不一定需要这么多的功能);对于以前尝试过将开发工作流转移到VSCode上的同学来说,你的方案可能就是先在CCS中配置环境,配置引脚和中断等,然后待生成代码后再将项目在VSCode中打开,编译和调试又要回到CCS中进行,流程割裂、效率低下;另外就是针对已经有过C/C++开发经验的同学来说,项目架构的清晰肯定是我们进行复杂开发的必要前提,官方以IDE为中心的项目架构完全不利于大家的客制化开发和拓展,对接现代C/C++开发流程非常麻烦。这些问题往往会花费我们很多时间,耽误我们的电赛备赛进程和电赛中途的开发效率。

为了避免这些问题,我开发了这款脚本工具,能够在最小安装的前提下保证最完全的开发体验,拥有现代化的开发框架和项目管理流程,支持Windows,Linux双端,支持M0全系列芯片和XDS110、DAPLink和JLink三种调试器,能够让你在VSCode中进行全流程开发,使用CMake和Git管理项目,让你在电赛中节省大量时间和精力,专心投入业务逻辑的开发中。

你可以是完全的新手,我的教程将保姆级地带你安装TI的M0系列芯片的开发环境配置,教你怎么快速上手M0系列芯片的开发。你不用担心自己对嵌入式开发的理解不够深刻,我会详细为你解释每个工具的作用,让你在使用过程中更加得心应手。而你,我的朋友,只需要投两个硬币,就可以跟着我进入接下来的教学环节。我敢保证你一定能用这个工具,写出易于维护、易于拓展、易于开发的好项目。

在进入教程之前,我们先来看一下TPA最终能实现的效果:

(进行演示)
好的,我们现在来展示一下怎么使用TPA脚本来快速生成项目,在环境配置全都完全的情况下,我们只需要:

  1. 创建项目
  2. 然后打开Sysconfig程序进行配置,然后把配置文件保存在项目目录中
  3. 运行mspm0-init命令,TPA就会自动检查环境配置,从配置文件中读取你的引脚定义等,调用工具为你生成完整项目,包含高拓展性的CMake工程架构和VSCode的全部配置文件,可以直接通过按键进行生成、编译、烧录和调试。

这样的三步走架构将帮助你快速搭建项目架构,避免手动维护依赖和配置文件的繁琐工作,让你专注于开发本身。我能够帮大家排除的依赖问题也都已经解决了,支持XDS110、DAPLink和JLink三种调试器以及M0全系列芯片。

也就是说,你只需要使用TI官方的图形化配置工具,进行引脚的配置和外设配置,然后在终端运行这一个简短的命令,项目就会自动进行配置和生成,你只需要打开VSCode就可以直接开始开发。

好的接下来我们进入保姆级教学环节,教学的全部内容以及演示文稿可以在我的博客找到,链接在视频下方的简介中。

如果你是完完全全的新手,刚刚开始接触嵌入式开发,接下来会我将进行一段简短的介绍,帮助你快速入门了解开发的流程和每一步需要的工具,这样你就知道为什么我们需要下载这些东西,这对你自己的理解也会有很大的帮助。至于已经有了STM32或是其他MCU开发经验的同学,我们可以跳过这段碎碎念,直接进入依赖安装的环节。

大家可以来我的博客上,有详细完整的教学文档,这里我就简单地介绍一下,细节可以下来看我的博客,写的还是比较详细的。

一个完整的开发流程呢,主要也就分为代码编写、编译、烧录和调试这四个环节。对于代码编写,我们一般就选用一个趁手的IDE,比如Keil、VSCode或是TI官方的基于老版本VSCode开发的CCS。编译环节我们需要例如gcc、clang这样的编译器,帮我们把代码转换成机器可以看得懂的二进制文件。烧录环节我们需要在电脑上运行一个烧录软件,还要有一个硬件设备用来和我们的芯片进行通信,也就是需要一个烧录服务器和烧录器。调试环节,也就是我们通过暂停程序的运行或是观察变量的变化去排查故障、检查bug的过程,在这个过程中,我们需要在电脑上标记断点、标记变量等,然后通过调试器和芯片进行通信,获取芯片的运行状态。

基于以上的分析,我们可以得到大概的工具清单:

  • IDE:Keil、VSCode、CCS
  • 编译器:arm-none-eabi-gcc、clang
  • 烧录服务器:OpenOCD
  • 烧录器:XDS110DAPLinkJLink
  • 调试服务器:OpenOCD
  • 调试客户端:arm-none-eabi-gdb
  • 调试器:XDS110DAPLinkJLink

事实上呢,为了更加完整的开发体验,我们还需要一些额外的工具,比如:

  • CMake:一个跨平台的自动化构建系统,帮助我们管理项目的构建过程。
  • Git:一个分布式版本控制系统,帮助我们管理代码的版本和协作开发。
  • Ninja:一个小巧的构建系统,能够快速地执行构建任务。(Windows下使用)
  • Make:一个经典的构建工具,帮助我们管理项目的构建过程。(Linux下使用)
  • VSCode插件:各种插件可以帮助我们提高开发效率,比如代码补全、调试、版本控制等。
  • Python:一个强大的编程语言,可以用来编写脚本和工具,帮助我们自动化一些重复的任务。

所有环境加起来确实不少,接下来跟着我就能一步步完成开发环境的搭建,我已经尽自己所能为大家减少了很多不必要的麻烦,大家只需要跟着我的步骤来就可以了。我将带着大家跟着我的博客一起进行操作,确保大家在自己阅读的时候不会遇到太多的问题。

鉴于大部分开发者都是Windows用户,我将以Windows为例进行演示,Linux用户可以参考我的博客中的Linux安装教程。

首先呢,我们需要安装Python环境,我相信大部分同学都有python的开发经历,如果没有的话也没有关系,大家直接进入官网进行下载和安装。如果大家装了Anaconda的话也可以直接使用Anaconda自带的python环境,安装过程就不再赘述了。安装完成后,我们需要确保Python已经添加到了系统的环境变量中,也就是PATH,这样我们就可以在命令行中直接使用python命令了。请确保大家能够在终端中使用python命令和pip命令,这样我们才能顺利进行后续的操作。大家可以通过运行

1
2
python --version
pip --version

来检查是否安装成功,如果显示了版本号就说明安装成功了。

接下来我们就可以直接安装TPA脚本了,大家可以通过这一句话进行直接安装:

1
pip install ti-project-assistant

不出意外的话,我们会直接安装到最新的0.3.5版本,安装完成后,我们可以运行mspm0-init指令来检查自己是否安装成功,运行mspm0-init --check命令可以检查当前环境是否已经配置好,理论上来说,在这个阶段大家还有挺多东西没有安装,所以会提示我们缺少一些依赖,接下来我们就要根据提示来安装这些依赖了。

下一步就是安装编译工具链,如果你已经有过C/C++开发经验,那么你的系统上应该是安装了MSys2或是MinGW这样的工具链,对于这些用户,直接在MSys2的终端中输入

1
pacman -S mingw-w64-x86_64-arm-none-eabi-toolchain

并选择所有进行安装即可。这边比较推荐没有安装MSys2的同学先去安装一下,因为它自带了很多我们需要的工具,后续安装起来也方便。

如果没有安装过C/C++开发环境的话,我们可以直接去官网下载arm-none-eabi-gcc的安装包arm-none-eabi-gcc进行安装。安装完成后,我们把这个编译器的bin目录添加到系统的环境变量中,这样我们就可以在终端中直接使用arm-none-eabi-gcc命令了。安装完成后,我们可以运行

1
arm-none-eabi-gcc --version

来检查是否安装成功,如果显示了版本号就说明安装成功了。

当然,对于已经有STM32或是其他MCU开发经验的同学来说,可能已经安装了arm-none-eabi-gcc编译器,可以尝试在终端运行版本检测看下是否已经安装到path,如果知道安装路径也可以直接将其bin目录添加到系统的环境变量中,确保能够在终端中调用。

接下来呢,我们需要安装TI的MSPM0软件开发套件,或者说叫SDK。这个套件中包含所有芯片的配置和驱动库等,是进行开发的必要步骤,由于下载这个文件是要大家登录TI账号并且填写表单信息的,这里不方便直接提供下载链接,大家需要自行上官网下载。下载完成后,我们直接运行可运行文件,并安装到一个自己清楚的目录中,确保路径名称不能包含中文。比如说在这里我就安装在E盘的ti目录下,大家也可以仿照我的做法,整个套件比较大,不推荐直接安装在C盘,但是如果安装在C盘,我的脚本是默认在C盘查找SDK的,就可以跳过后面配置环境变量的步骤。

这个步骤可能会花一点时间,与此同时我们来安装TI的图形化配置界面SysConfig,大家可以类比STM32的CubeMX,TI芯片的开发很大程度上强依赖这个软件,因为芯片的中断配置等只能通过这个软件进行配置。大家和刚才一样进入我给出的链接,从官网下载安装程序,同样进行安装,这里推荐大家把安装路径也设置在刚才的那个ti目录下,并确保路径没有中文。

如果上面的这两个还没有安装完成,大家可以先来安装OpenOCD和arm-none-eabi-gdb,这两个工具是我们进行烧录和调试的必要工具。这里就不用大家到处去找网址下载了,大家直接打开自己的VSCode,进入插件市场安装TI Embedded Development For VS Code插件即可,这个是TI官方提供的调试插件。安装后在侧边栏的插件入口就能看见依赖下载的按钮,点击全部依赖下载就可以直接安装。这个位置不用记住,TPA脚本会自动在对应目录查找工具。

为了后面的自定义按键功能,还需要大家安装一下Tasks Buttons插件,这个插件可以帮助我们在VSCode中自定义按键,方便我们进行一键式编译、烧录和调试。大家可以直接在VSCode的插件市场中搜索Tasks Buttons进行安装。

其他插件的话大家可以自行探索,比较推荐的就是C/C++插件Git插件和当前我正在用的这个主题插件,大家可以自行安装。

好的下一步,现在SDK和SysConfig都安装好了,我们需要配置环境变量,让TPA脚本能够找到它们。我们需要把SDK的安装路径添加到系统的环境变量中,具体来说就是把SDK的根目录添加到PATH中,这样TPA脚本就能找到它了。大家可以在系统的环境变量设置中进行添加,大家请跟随我,一步一步添加环境变量,这个也是很多新手最犯难的地方,毕竟涉及到系统设置,配置错了也不太好找问题。至于Linux的完整配置我将放在最后,大家也可以参考我的博客中的Linux安装教程。

最后呢,我们需要安装一些必要的工具:CMake和Ninja。对于Windows用户,脚本默认指定Ninja作为构建工具,Linux用户则默认使用Make。如果你以前安装过C/C++开发环境,理论上你是自动安装了这些工具的,可以直接用版本号检验一下。如果还没有安装,大家可以直接执行

1
2
winget install Kitware.CMake
winget install Ninja-build.Ninja

来安装CMake和Ninja,安装完成后,我们可以运行

1
2
cmake --version
ninja --version

来检验是否安装成功,如果显示了版本号就说明安装成功了。

对于需要进行版本控制的同学,我们还需要安装Git,大家可以直接执行

1
winget install --id Git.Git -e --source winget

来安装Git,安装完成后,我们可以运行

1
git --version

应该也是可以显示版本号的,说明安装成功了。

好的,安装了这么多,试试运行check脚本呢?理论上来说,到现在为止,大家应该是已经完全完成了环境配置,运行mspm0-init --check应该不会再提示缺少依赖了。

现在我们可以来创建一个新的项目了!大家在终端中运行

1
mspm0-init --help

就可以看到所有的命令和参数说明了,大部分情况下,大家直接运行

1
mspm0-init 

就可以创建一个项目了,当然如果你想指定项目名称和调试器,也可以使用-n-d参数来指定。创建完成后,我们就可以在VSCode中打开这个项目了,大家可以看到,TPA脚本已经为我们生成了完整的CMake工程架构和VSCode的配置文件,我们可以直接开始编写代码了。

接下来我稍微演示一下经常用到的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 最简单:在只有 .syscfg 的目录下直接运行
mspm0-init

# 自动发现当前目录的 .syscfg
mspm0-init new -n my_project

# 手动指定 syscfg 文件
mspm0-init new myboard.syscfg -n my_project -d xds110

# 无 syscfg,纯裸机起点
mspm0-init new --device MSPM0G3507 --package "LQFP-48(PT)" -n bare_start

# 跳过 Git 初始化
mspm0-init new -n my_project --no-git

# 重新生成配置
mspm0-init regenerate # 在项目目录内执行
mspm0-init regenerate /path/to/proj # 指定项目路径

mspm0-init regenerate -d xds110 # 从 CMSIS-DAP 切换到 XDS110
mspm0-init regenerate -d jlink # 切换到 JLink

在生成好的项目里面,我们直接按F5就可以进行编译、烧录和调试了,整个过程都是在VSCode中完成的,非常方便。左下角还有按钮可以进行一键编译、烧录和调试。生成的项目结构大致如图,所有自动生成的文件夹已经足够大部分情况的开发流程了,已经自动完成了递归链接,大家直接在里面编写代码就可以自动参与编译,不用自己修改CMakelists配置。大家还可以安装Git插件进行更方便的版本控制。至于接入AI插件辅助编程的部分,大家可以参考其他教程,我这里就不再赘述了。更详细的文字教程放在我的博客,演示文稿也会在博客中,欢迎大家参考借鉴。

最后,我来回答一下大家可能会有的一些问题:

  • Q:为什么我在运行mspm0-init的时候提示找不到syscfg文件?
  • A:请确保你在运行mspm0-init的时候,当前目录下有一个syscfg文件,或者确保你用路径指定文件位置
  • Q:为什么我在运行mspm0-init的时候提示找不到SDK?
  • A:请确保你已经安装了SDK,并且将SDK的根目录添加到了系统的环境变量中,运行check命令可以很好地检查当前环境是否已经配置好。
  • Q:为什么这个脚本不能提供一件安装所有依赖的功能?
  • A:首先是TI的SDK是需要登陆TI账号并填写表单才能够进行下载的,我直接二次分发理论上是不合法的,另外就是我直接把以来打包不能适应驱动更新的情况等,大家在不明不白的情况下完成了依赖安装也不能确保我的脚本里有没有恶意代码,从官方下载的渠道才是最安全的。大家在了解所有工具的功能的基础上进行依赖的安装也对自己的理解有很大帮助,能够让你在后续的开发中更加得心应手。

最后的最后呢,还请大家多多结合我的博客教程进行研究,我也会在博客上更新更多好玩的教程和研究分享。如果大家有网络环境的话,也欢迎大家来我的github项目点点star,这对我真的很有帮助,在评论区留言也能让我知道大家的想法和建议,如果大家在开发过程中遇到什么问题也可以发在评论区我们一起讨论。预祝大家在电赛中取得满意的成绩。