截止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月创建的,可能与以后的版本有些出入)
-
需要准备的软件
-
CubeMX最新版
-
VScode最新版
-
vcpkg包管理工具
-
pyOcd(如何安装下方有教程)
-
ST-Link驱动(如何安装下方有教程)
-
vcpkg安装与环境配置
- 下载依赖包
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
- 克隆vcpkg仓库
https://github.com/microsoft/vcpkg/tree/master
1
git clone https://github.com/microsoft/vcpkg.git
- 生成vcpkg程序
1
2
3
cd vcpkg
sudo chmod a+x ./bootstrap-vcpkg.sh
sudo ./bootstrap-vcpkg.sh
- 配置环境
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
出现如图提示则安装成功!

-
MDK5工程生成与ARMCLANG(AC6)编译器配置
-
工程生成与编译器配置
-
方式一 :配置编译器教程需要在Windows进行,在Linux上目前很难修改编译器选项,可以参考下方Windows教程里的生成工程并配置默认编译器。(实质就是把编译器从默认的AC5改成AC6)
- 方式二 :克隆已经生成好的模板(模板目前只有几个常用型号的)
仓库链接:
https://github.com/TungChiahuiMCURepos/CubeMX_CMake_Template
1
git clone https://github.com/TungChiahuiMCURepos/CubeMX_CMake_Template.git


-
工程配置(比如初始化一个GPIO口并创建任务使其电平翻转)
先复制一份工程模板

重命名工程

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

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



在文件夹MDK-ARM下打开终端
1
2
cd MDK-ARM
code .
-
安装并激活MDK6插件
下载好ARM Keil Studio Pack

激活MDK6插件


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

右下角把这些要安装的pack都安装一下,有什么提示要允许的都允许一下
在安装Packs的时候,需要保证一个良好的网络环境(需要一个有魔法的网络环境),
这个阶段会持续5-20分钟,请慢慢等待。(看你的机场速度而决定)
(只有第一次运行需要这些操作)

这个调查可以不查

如图即是安装成功

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


如果环境没配置好,右键这个文件,选择active environment(图中因为我的环境配置好了,所以是deactive失能)
然后再执行上一步的Convert

如图已经初始化成功了

-
编译
点击build按钮发现文件大小一样就是编译成功了。
若编译失败,则看一下是否是工程文件列表被多配置了一个点。(看下方进阶教程里的添加源文件解决)


-
Linux如何配置ST-Link等调试器?
-
安装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添加一下设备。

-
更新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环境教程
-
需要准备的软件
-
Keil MDK5.3x及以上
-
VScode最新版
-
CubeMX最新版
-
vcpkg安装与环境配置
- 克隆vcpkg仓库
https://github.com/microsoft/vcpkg/tree/master
1
git clone https://github.com/microsoft/vcpkg.git

- 生成vcpkg程序



- 配置环境

点击高级系统设置


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



- 测试
1
vcpkg --version
显示如下图所示,则安装成功

-
生成工程文件
- 打开CubeMX并登录ST账号

- 安装好Pack



- 配置工程


-
打开工程并配置默认编译器
- 配置默认编译器为ARMCLANG(AC6)


- 编译验证

-
下载并激活Keil MDK6插件
- 打开VScode

- 安装Keil Studio Pack插件

-
安装完毕后,重启VScode
-
然后右下角会跳出来两个窗口,点击激活MDK6Community.


显示这个通知即激活成功。
-
MDK5工程转化为MDK6工程
点击Convert进行转化

右下角把这些要安装的pack都安装一下,有什么提示要允许的都允许一下
在安装Packs的时候,需要保证一个良好的网络环境(需要一个有魔法的网络环境),
这个阶段会持续5-20分钟,请慢慢等待。(看你的机场速度而决定)
(只有第一次运行需要这些操作)

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

这个调查可以不查

如图即是安装成功

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

点击转化MDK5工程

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

-
编译


可以看到,通过KEIL MDK6编译后的大小和KEIL MDK5编译后的大小完全相同。
-
Windows如何配置ST-Link等调试器?
Windows就更简单了,根本不用多下其他东西,只要你在MDK5上能用,基本在MDK6上也能用。
-
添加设备选择ST-Link


五、进阶使用教程(全平台通用)
-
Run(运行程序)和Debug(调试程序)?
-
选择packs

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

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


-
(RUN)将程序下载到ST-Link中
点击RUN,然后在新弹出的窗口选择对应的型号,比如我选择STM32F103C8

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


-
(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了。
-
VScode头文件配置
(这只是可以更好的编辑代码,这些头文件并没有被加入到编译环境中)
-
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误报错说找不到,但是其实已经可以正常编译了,也可以正常提示这些头文件了。



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

现在最新版MDK6自带clangd插件。
- 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

- 现在来安装clangd:
按住Ctrl shift P打开搜索框
输入clangd 找到下载语言服务器这一项目,点击安装clangd(请保持良好的网络状况)

- 接着配置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找到如下图的选项

代码提示就正常啦

-
添加源文件(对应Project Items)和头文件(对应Include Path)到编译环境中
-
常规方法(修改yaml文件)
-
相关资料
添加源文件需要使用yaml标记语言修改cproject.yml文件。
官方为此提供了相关的更为详细的资料文档:https://github.com/Open-CMSIS-Pack/cmsis-toolbox/blob/main/docs/YML-Input-Format.md#source-file-management


-
创建文件(.c和.h)
我们这里先在bsp中创建4个文件分别放入到Src和Inc中。


-
添加头文件路径

将头文件所在的目录写入

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
-
添加源文件与分组

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

- group: bsp/boards
files:
- file: ../bsp/boards/Src/gpio_demo.cpp
- file: ../bsp/boards/Src/gpio_test.c
# - group: applications
# files:
源文件和头文件都已经成功导入了,我们可以对文件内容进行编写,看其是否能通过编译。
-
编写文件并编译





可以看到日志这几行,显示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
-
图形化
-
简介
由于ARM团队比较给力,短短2个月就搞出来了图形化操作,截止3月初已经更新。
ARM团队更新了什么图形化功能,下方教程就会推迟几天更新一下对应的内容。
-
添加源文件

等待ARM公司更新功能中… …
六 、 常见问题
-
FreeRTOS使用ARMCLANG(AC6)编译报错的问题
- 如果你是使用的模板,那么将模板中的“其他注意事项”文件夹中的Middlewares文件夹复制到根目录即可。


- 如果你是自己从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文件夹下。



-
错误执行cmake配置

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

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

-
修改汇编语言的编译器为ARMClang集成的汇编编译器
这是个警告,不影响正常使用,但是咱们尽量可以修改一下。

Plain Text
Warning: A1950W: The legacy armasm assembler is deprecated.
Consider using the armclang integrated assembler instead.
0 Errors, 1 Warning
暂时没找到解决方案
-
出现某些工具没被下载的情况
按下面的arm tools然后进入下面的界面选择对应版本,再点击update tool registry即可.(最常见的就是编译器和调试器的库没自动下载.)
如果不知道需要哪些工具,建议可以全部都选上最新版本.(亲测全选最新版本是可以正常使用的)

