截止2024年1月21日,MDK6已经完善到完全可以当主力IDE的状态,各项功能都比较完备。

但是由于ARM仍在更新完善MDK6,所以教程会有所出入,但是大体上的步骤不会有太大的变化,有太大的变化的地方本文可能会更新。

一、简介

https://www.keil.arm.com/

As flexible as you are: from cloud to desktop, from CLI to GUI, running on macOS, Linux, and Windows.

暂时无法在飞书文档外展示此内容

二、官方教程

https://developer.arm.com/documentation/108029/0000/Get-started-with-an-example-project

三、Linux配置MDK6环境教程

(本教程为2024年1月创建的,可能与以后的版本有些出入)

  1. 需要准备的软件

  2. CubeMX最新版

  3. VScode最新版

  4. vcpkg包管理工具

  5. pyOcd(如何安装下方有教程)

  6. ST-Link驱动(如何安装下方有教程)

  7. vcpkg安装与环境配置

  8. 下载依赖包
1
2
3
4
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential tar curl zip unzip
sudo apt-get install default-jre
  1. 克隆vcpkg仓库

https://github.com/microsoft/vcpkg/tree/master

1
git clone https://github.com/microsoft/vcpkg.git
  1. 生成vcpkg程序
1
2
3
cd vcpkg
sudo chmod a+x ./bootstrap-vcpkg.sh
sudo ./bootstrap-vcpkg.sh
  1. 配置环境
1
vim ~/.bashrc

这个 VCPKG_HOME是vcpkg的目录

1
2
3
#配置vcpkg环境 
export VCPKG_HOME=/home/tungchiahui/user/applications/vcpkg  #目录需要改为你的vcpkg的目录
export PATH=$VCPKG_HOME:$PATH

1
2
source ~/.bashrc
vcpkg --version

出现如图提示则安装成功!

  1. MDK5工程生成与ARMCLANG(AC6)编译器配置

  2. 工程生成与编译器配置

  3. 方式一 :配置编译器教程需要在Windows进行,在Linux上目前很难修改编译器选项,可以参考下方Windows教程里的生成工程并配置默认编译器。(实质就是把编译器从默认的AC5改成AC6)

  4. 方式二 :克隆已经生成好的模板(模板目前只有几个常用型号的)

仓库链接:

https://github.com/TungChiahuiMCURepos/CubeMX_CMake_Template

1
git clone https://github.com/TungChiahuiMCURepos/CubeMX_CMake_Template.git

  1. 工程配置(比如初始化一个GPIO口并创建任务使其电平翻转)

先复制一份工程模板

重命名工程

打开CubeMX(并点击最上方File->Load Project 或者 直接点击下方图中的图标)

找到工程并Load,并配置好工程

在文件夹MDK-ARM下打开终端

1
2
cd MDK-ARM
code .
  1. 安装并激活MDK6插件

下载好ARM Keil Studio Pack

激活MDK6插件

  1. 初次转化MDK5工程并下载依赖包

右下角把这些要安装的pack都安装一下,有什么提示要允许的都允许一下

在安装Packs的时候,需要保证一个良好的网络环境(需要一个有魔法的网络环境),

这个阶段会持续5-20分钟,请慢慢等待。(看你的机场速度而决定)

(只有第一次运行需要这些操作)

这个调查可以不查

如图即是安装成功

如果下方环境已经配置好了,请右键点击uvprojx选择Convert

如果环境没配置好,右键这个文件,选择active environment(图中因为我的环境配置好了,所以是deactive失能)

然后再执行上一步的Convert

如图已经初始化成功了

  1. 编译

点击build按钮发现文件大小一样就是编译成功了。

若编译失败,则看一下是否是工程文件列表被多配置了一个点。(看下方进阶教程里的添加源文件解决)

  1. Linux如何配置ST-Link等调试器?

  2. 安装pyOCD(Linux)

https://github.com/pyocd/pyOCD

先打开终端输入(如果你是debian系的系统,如Ubuntu,请看下方的教程)

1
2
3
4
sudo apt install python3-pip
python3 -mpip install -U pyocd
# 如果上面的不行,则输入下方的
pip3 install -U pyocd

如果还不行,且提示

1
2
3
4
5
6
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

则使用(debian系的系统)

1
sudo apt install python3-pyocd

或者 说直接克隆仓库

git clone https://github.com/pyocd/pyOCD.git
cd pyOCD
pip3 install .

这样也可以安装pyOCD

接下来,我们需要安装ST-Link等调试器的驱动。

pyOCD安装调试器驱动官方教程:

https://github.com/pyocd/pyOCD/tree/main/udev

还是需要用到pyOCD仓库里的文件。

如果你没clone仓库请尽快克隆。

在仓库目录下,输入以下命令

cd udev
sudo cp *.rules /etc/udev/rules.d
#重启udev
sudo udevadm control --reload
sudo udevadm trigger

这样ST-Link就可以正常被检测出来了

如果没被检测出来,请插拔一下ST-Link,然后点击Add Device添加一下设备。

  1. 更新ST-Link最新驱动(Linux)

https://www.st.com/en/development-tools/stsw-link007.html#get-software

暂时无法在飞书文档外展示此内容

下载后的文件解压出来。

sudo apt install ./st-stlink-udev-rules-1.0.3-2-linux-all.deb

重启VScode即可

(下方还有其他有关的教程操作,请往下滑)

四、Windows配置MDK6环境教程

  1. 需要准备的软件

  2. Keil MDK5.3x及以上

  3. VScode最新版

  4. CubeMX最新版

  5. vcpkg安装与环境配置

  6. 克隆vcpkg仓库

https://github.com/microsoft/vcpkg/tree/master

1
git clone https://github.com/microsoft/vcpkg.git

  1. 生成vcpkg程序

  1. 配置环境

点击高级系统设置

将用户环境变量和系统环境变量都配置一下

  1. 测试
1
vcpkg --version

显示如下图所示,则安装成功

  1. 生成工程文件

  2. 打开CubeMX并登录ST账号

  1. 安装好Pack

  1. 配置工程

  1. 打开工程并配置默认编译器

  2. 配置默认编译器为ARMCLANG(AC6)

  1. 编译验证

  1. 下载并激活Keil MDK6插件

  2. 打开VScode

  1. 安装Keil Studio Pack插件

  1. 安装完毕后,重启VScode

  2. 然后右下角会跳出来两个窗口,点击激活MDK6Community.

显示这个通知即激活成功。

  1. MDK5工程转化为MDK6工程

点击Convert进行转化

右下角把这些要安装的pack都安装一下,有什么提示要允许的都允许一下

在安装Packs的时候,需要保证一个良好的网络环境(需要一个有魔法的网络环境),

这个阶段会持续5-20分钟,请慢慢等待。(看你的机场速度而决定)

(只有第一次运行需要这些操作)

可以打开任务管理器看cmsis.exe是否在正常下载,如果后面有网速,则说明在正常下载,等待即可。

这个调查可以不查

如图即是安装成功

这里如果是没激活环境,则需要active environment。(图中是取消激活环境)

点击转化MDK5工程

这样则显示为转化MDK6工程成功。

  1. 编译

可以看到,通过KEIL MDK6编译后的大小和KEIL MDK5编译后的大小完全相同。

  1. Windows如何配置ST-Link等调试器?

Windows就更简单了,根本不用多下其他东西,只要你在MDK5上能用,基本在MDK6上也能用。

五、进阶使用教程(全平台通用)

  1. Run(运行程序)和Debug(调试程序)?

  2. 选择packs

出现STM32 STLink后,接着点回车Enter

搜索对应的芯片的Packs并选中

  1. (RUN)将程序下载到ST-Link中

点击RUN,然后在新弹出的窗口选择对应的型号,比如我选择STM32F103C8

可以看到下方的命令已经把程序烧写进STM32了,然后STM32也正常工作了。

  1. (DEBUG)调试程序

打上三个断点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
extern "C"
void led_task(void const * argument)
{
    
    
    for(;;)
    {
        static int a = 5;
        bsp_led.LED_Toggle();  //实例化后调用对象翻转电平函数
        osDelay(500);
        a++;
    }
}

点击Debug并选中型号

然后就可以进入Debug界面

点击开始按钮

可以看到断点被成功命中,且可以通过左边窗口查看a的值。

接着点击继续。

下一个断点也被命中了

接着点继续,发现a的值变为了6,符合我们程序的运行。

这样就可以正常debug了。

  1. VScode头文件配置

(这只是可以更好的编辑代码,这些头文件并没有被加入到编译环境中)

  1. C/C++插件(不推荐)

如果有这种找不到头文件的情况,配置一下VScode的C/C++插件的Include Path即可。

但是由于该插件需要同时配置编译器,所以可能会出一些各种各样的小问题。

而且该插件对于大型项目会很卡,可以选择直接看下方的clangd插件教程。

在这里多加一行../**

除了以上这种方式,也可以通过修改c_cpp_properties.json文件进行。

输入 "../**" (意思是将上一个目录(工程根目录)里的所有文件全部加载到Include Path中)

同时建议也把ARMCLANG的include文件加入到这里面 “/home/tungchiahui/.vcpkg/artifacts/2139c4c6/compilers.arm.armclang/6.21.0/include/

每个人的目录不同,但都是在用户文件夹的.vcpkg隐藏文件夹下,可以自己找找。(下方的图不完整,请根据上访内容进行添加)

配置好之后,我们发现代码提示也正常了,虽然头文件还是有可能会被VScode误报错说找不到,但是其实已经可以正常编译了,也可以正常提示这些头文件了。

  1. Clangd插件 (非常推荐)

  2. 优势:由于clangd适合大型的cmake项目,在大型项目里表现比C/C++插件优秀太多,所以笔者与MDK6都建议用clangd的语言服务器。

现在最新版MDK6自带clangd插件。

  1. Windows需要下载安装一下LLVM (Linux一般不用管或者sudo apt install llvm)

https://github.com/llvm/llvm-project/releases

我下载的是LLVM 18.1.8,中选择Assets中选择LLVM-18.1.8-win64.exe

这里选择这个选项Add LLVM to the system PATH for all users,其他无脑下一步即可。

可以打开terminal测试一下是否安装成功并配置好环境。

1
clang -v

  1. 现在来安装clangd:

按住Ctrl shift P打开搜索框

输入clangd 找到下载语言服务器这一项目,点击安装clangd(请保持良好的网络状况)

  1. 接着配置clangd:

禁用C/C++的代码提示功能

如果没有上图的弹窗,可以进行手动关闭,依然是ctrl shift P,输入settings然后找到如下图的选项

找到下图这个选项,改成disabled即可。

"C_Cpp.intelliSenseEngine": "disabled"

新建一个settings.json文件

修改里面的内容,该内容是 cmake产生的compile_commands.json 文件所在的路径(路径会随MDK6版本更新而改变,请自己找文件所在路径)

接着找到armclang编译器的include目录,也添加进来,一般在用户文件夹下的.vcpkg隐藏文件夹下。

(现在已经无需找了)

以下是Linux版本的settings.json示例

1
2
3
4
5
{
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/tmp/Template_Linux/TemplateLinux"
    ]
}

以下是Windows版本的settings.json示例

需要注意的是,Windows需要把盘符号变为小写,比如C:/要改为c:/然后反斜杠\要改为斜杠/

1
2
3
4
5
{
    "clangd.arguments": [
        "--compile-commands-dir=${workspaceFolder}/tmp/Template_Linux/TemplateLinux"
    ]
}

然后ctrl shift P搜索clangd找到如下图的选项

代码提示就正常啦

  1. 添加源文件(对应Project Items)和头文件(对应Include Path)到编译环境中

  2. 常规方法(修改yaml文件)

  3. 相关资料

添加源文件需要使用yaml标记语言修改cproject.yml文件。

官方为此提供了相关的更为详细的资料文档:https://github.com/Open-CMSIS-Pack/cmsis-toolbox/blob/main/docs/YML-Input-Format.md#source-file-management

  1. 创建文件(.c和.h)

我们这里先在bsp中创建4个文件分别放入到Src和Inc中。

  1. 添加头文件路径

将头文件所在的目录写入

1
2
3
4
5
6
7
8
      add-path:
        - ../Core/Inc
        - ../Drivers/STM32F1xx_HAL_Driver/Inc
        - ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
        - ../Drivers/CMSIS/Device/ST/STM32F1xx/Include
        - ../Drivers/CMSIS/Include
        - ../bsp/boards/Inc
        - ../applications/Inc
  1. 添加源文件与分组

在这里输入group的名字和所需要添加的源文件路径(这里因为applications里无源文件,所以我们注释掉)

    - group: bsp/boards
      files:
        - file: ../bsp/boards/Src/gpio_demo.cpp
        - file: ../bsp/boards/Src/gpio_test.c
    # - group: applications
    #   files:

源文件和头文件都已经成功导入了,我们可以对文件内容进行编写,看其是否能通过编译。

  1. 编写文件并编译

可以看到日志这几行,显示gpio_demo和gpio_test都成功被编译了

1
2
3
[14/22] Building C object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/bsp/boards/Src/gpio_test.o
[15/22] Building C object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.o
[16/22] Building CXX object CMakeFiles/Template_Linux.dir/home/tungchiahui/user/Source/STM32_Projects/N1_F407ZGT6_GPIO_Test/bsp/boards/Src/gpio_demo.o
  1. 图形化

  2. 简介

由于ARM团队比较给力,短短2个月就搞出来了图形化操作,截止3月初已经更新。

ARM团队更新了什么图形化功能,下方教程就会推迟几天更新一下对应的内容。

  1. 添加源文件

等待ARM公司更新功能中… …

常见问题

  1. FreeRTOS使用ARMCLANG(AC6)编译报错的问题

  2. 如果你是使用的模板,那么将模板中的“其他注意事项”文件夹中的Middlewares文件夹复制到根目录即可。

  1. 如果你是自己从Windows上从0开始创立的工程(没有使用模板),那么需要你去寻找CubeMX下载的固件源码

比如Linux中固件源码在/home/tungchiahui(你自己的用户名)/STM32Cube/Repository/中。

假如你是F103,那么打开STM32Cube_FW_F1_V1.8.5文件夹。

如果你是F407,那么打开STM32Cube_FW_F4_V1.28.0文件夹。

找到路径/home/tungchiahui/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.5/Middlewares/Third_Party/FreeRTOS/Source/portable/

将这个GCC文件夹里的ARM_CM3文件夹复制到 工程文件夹 对应的RVDS文件夹下。

  1. 错误执行cmake配置

如果遇到error cbuild: error executing 'cmake' configuration这种错误。则删掉MDK-ARM文件夹下的tmp文件夹。再重新编译即可。

1
2
#删除tmp文件夹
rm -rf ./tmp

  1. 修改汇编语言的编译器为ARMClang集成的汇编编译器

这是个警告,不影响正常使用,但是咱们尽量可以修改一下。

Plain Text Warning: A1950W: The legacy armasm assembler is deprecated. Consider using the armclang integrated assembler instead. 0 Errors, 1 Warning

暂时没找到解决方案

  1. 出现某些工具没被下载的情况

按下面的arm tools然后进入下面的界面选择对应版本,再点击update tool registry即可.(最常见的就是编译器和调试器的库没自动下载.)

如果不知道需要哪些工具,建议可以全部都选上最新版本.(亲测全选最新版本是可以正常使用的)