觉得枯燥的话点击网页左下角听几首精选纯音乐吧~

仍然是没什么用的前言

1. 契机

  前段时间尝试了SEGGER家的嵌入式开发环境(IDE)SEGGER Embedded Studio(以下简称SES),众所周知,在进行嵌入式芯片开发领域,老牌的通用IDE无非就是IAR和MDK这两家。IAR本身算是上古时代的产物了、个人觉得甚至不如MDK,MDK除了其魔改的一套ARMCC编译工具链比较优秀之外,其Keil编辑器十分难用、令人抓狂的代码补全令本就不顺畅的开发雪上加霜。(入门的时候用用、熟悉嵌入式开发环境倒是挺适合)

2. 嵌入式IDE现况一览

  好在是,现在有越来越多曲线救国的办法,提升嵌入式开发体验:
1. 利用优秀IDE+插件的方式:如稚晖君大佬所喜欢的使用 CLion+arm-none-eabi-gcc+OpenOCD 进行开发调试(指路:教程链接),类似的还可以用宇宙第一VScode安装Keil Assistant插件配合MDK工具链或者arm-none-eabi-gcc+OpenOCD进行开发调试。
  但可惜的是这种方法配置上都稍麻烦些,主要是各工具链之间搭配不是很紧密、便捷,适合小项目但大项目不好管理,调试起来也头疼

2. 尝试各家的IDE工具:这几年各种芯片厂商也推出了各种自己家的嵌入式IDE、真宛若雨后春笋,ST就有自己的CubeIDE、NXP有MCUXpresso、TI有Code Composer Studio、国产MCU的RISC-V IP核厂商——芯来科技推出的Nuclei Studio等等等很多。但这些IDE最大的局限性在于几乎都只支持自家芯片开发,这意味着我使用不同芯片开发项目除了要学习 芯片基本硬件电路 、各家各种库的使用(动则几百页的英文手册翻翻翻人会傻的呀),还得学习他们不同的IDE如何使用、调试?
  个人觉得嵌入式开发不同于纯软件开发(前后端之类),对于IDE的熟悉性会很大决定debug所浪费的时间,嵌入式IDE的学习成本也更高,因其编译工具链和C库等有所不同,遇到底层问题排查起来也是一言难尽。

3. SES的特点

  然后我就注意到SEGGER家通用嵌入式IDE的SES了,SEGGER是一家老牌嵌入式解决方案厂商,大伙儿很喜欢用的J-Link调试器就是他家出的,其他东西也都很nice~
SEGGER家产品
  SES支持跨平台(Win、Linux、MacOS)、有自家成熟的工具链非商业用户免费使用,此外我最心动的是SES能直接导入Keil工程(STM32仅限非芯片包的标准库或LL/HAL库),还能无缝衔接Keil ARMCC工具链进行编译调试!!!

此文章以STM32开发为例,默认您已经掌握MDK Keil工程管理、STM32 HAL库,以及CubeMX配置的使用

正篇

  对于STM32开发,假设已经安装好了 MDK5 、CubeMX,当然开发目的不一样、不装也行,因为SES有自己的工具链可不用MDK ARMCC,后续的教程请根据个人情况灵活变通。

1. 安装本体

  这里我用Windows Sandbox模拟全新电脑安装SES及配置环境。请先到官网下载安装包:跳转链接
下载SES安装包

  可以看到有SES for ARM 和 SES for RISC-V两种芯片指令集架构的版本,也就是说之后学习和开发RISC-V也可以无缝衔接到此IDE。根据需要和系统环境选择合适的版本,我常在Win 64bit机子下进行STM32开发,故下载SES for ARM(Win 64bit),接着就是一路Next安装(选择好安装路径)。

安装
  如果你使用J-Link调试器的话,记得安装驱动,不过推荐是直接官网下载J-Link全套工具包,包含驱动和芯片调试工具(Flash烧录、解密、擦除、RTT等套工具)
记得勾驱动

  装完打开,阅读免费条款可知,仅限非商业使用、所有功能开放因此无需破解。
同意条款

界面有没有感觉到一股浓浓的Qt味,加上他跨平台特性,我觉得就是Qt写的GUI,写的非常好、响应快、流畅。用到的.dll也证实了我的想法。
带有Qt的.dll

2. 安装芯片包

  点击 Tools -> Package Manager ,弹出窗口点击刷新按钮,寻找安装所需的芯片包。但是这种方法比较慢,推荐挂代理之后去官网下载:芯片包网址
安装芯片包

  注意需要手动安装芯片包需注意所需前置包,以安装STM32F1xx为例,需要先安装CMSIS 5 Core 硬件标准组件包作为前置,所以要先下载CMSIS5装好、再装F1xx的包。
手动装package注意

*如何安装下好的芯片包? 直接双击 .empackage 文件即可。

3. 配置适合自己的环境

  基本上必须配置的就是中文字体渲染方式了,在 Tools->Options->Text Editor->visual appearance->Font Rendering修改为Proportional即可,再配置下自己喜欢的字体就差不多了。
修改字体渲染
更多配置可以参考: 常用配置1
常用配置2

4. 关于编译烧录

  默认F7就是编译工程,也可以在设置内自行更改键位。使用J-Link的话,编译完工程,插上J-Link直接点击DownLoad烧录即可。
烧录

  如果使用ST-Link或者其他调试器,则需要配置GDBSever调试、使用OpenOCD,具体可以参考黄工的这篇文章

实战使用篇

  下面我们用老套路CubeMX生成一个Keil工程,并导入到SES中编辑、构建、烧录。对于CubeMX的配置没有过多要求,Toolchain/IDE那里选择MDK-ARM即可,其他依照自己的习惯来。
  先照常打开Keil,配置好自己所需工程结构、文件、头文件路径、编译器选项等内容。
  然后打开SES,从 File->Import Project...选择导入Keil的工程,上面是5版编译器、下面是6版的,根据自己工程的配置选择正确选项,导入Keil工程。
导入工程
  弹出的选项可以选择 导入外部MDK工具链使用SEGGER内部工具链上述两者都使用。我选择了3,内外都导入了、可以随意切换使用。注意,请选择正确的Keil ARMCC安装路径,一般如我图中所示。
选择对路径

  导入完成后便可以快乐玩耍了,代码补全比Keil好了几万倍,流畅舒适。(Tab键补全自己在设置里配置,默认回车补全)
代码补全

  如果在CubeMX里重新配置新增了中断、ADC、Timer等外设,记得重新生成Keil,并使用SES再导入一次Keil工程(仅针对每次添加新的外设需要重新导入)。

  如遇到重新导入工程,注释乱码的问题,这是CubeMX使用的Java默认编码不是UTF-8导致的。可以在系统中添加环境变量解决:

变量名:"JAVA_TOOL_OPTIONS"
变量值:"-Dfile.encoding=UTF-8"

之后重启即不会再发生中文注释乱码。

未完占坑

  之后可能会更新一些遇到的问题与解决方法,比如SEGGER内部工具链的使用(导入DSP库、使用SEGGER的C库重定向printf到USART...)
  说起来就气,用SEGGER的C库重定向printf到USART的时候琢磨好久,还去SEGGER论坛问了,结果是他们自己API变更了而Wiki没更新,硬是拖了几个月才回复我...
地址:How to retarget printf to UART in SES(v5.50) with SEEGER Compiler and Runtime Library
发帖
因此,他的弊端也暴露了,由于是闭源,而且用户少、远比不上MDK,遇到问题基本上自己解决不了只能反馈,依赖SEGGER慢慢给你解决,你毕竟不是付费大客户对吧QAQ

To be Continue...

本文作者:k_ying
本文链接:https://blog.kying.xyz:666/archives/MDK2SES.html
转载说明:本文采用 CCBY-SA4.0 协议许可 ,部分内容仅代表个人观点,引用及转载无需征得本人同意,附上原文地址即可。