HPM系列MCU开发环境配置(基于SDK版本1.6,使用VSCode)
本文介绍HPM SDK下载安装,和如何不用SEGGER Embedded Studio for RISC-V来开发HPM MCU。
下载与安装
截止至2024年8月6日,HPM SDK提供到1.6版本,在GitHub和gitee上提供,可根据自身网络环境选择下载,推荐下载release版本而不是主线最新版本。
HPM SDK分为SDK本体和SDK环境。两者均需要下载(不过貌似1.6 release版本的环境里面有SDK本体)。
下载命令(需要提前安装git):
1 | 在GitHub下载 |
注意安装目录不能有中文!!!!!!不然会导致后面工程没法正常生成(写到后面发现的,所以前面有的图片带中文路径,但是不影响,因为用的都是相对路径,就懒得改了)。
clone完后进入sdk_env
文件夹,检查里面有没有hpm_sdk
文件夹,以及里面有没有类似下文图片的内容。
如果没有文件夹,或者里面没东西,那么把上面clone下来的hpm_sdk
文件夹复制到sdk_env
文件夹里面。至此,HPM SDK下载和安装完成。
基础概念(个人见解)
sdk_env
文件夹里面有个start_gui.exe
文件,可以打开GUI的工程生成器
点左上角Language可以换中文
可以看到,工程生成器有以下几个配置路径:
- 开发板路径
这个SDK里面的开发板指的是板级硬件,包含了初始化代码,引脚描述,外设使用情况,及引脚复用。
sdk自带了官方出的几款开发板的配置,在拥有了自己设计的硬件后,也可以在里面添加自己的开发板。 - 应用路径
应用路径就是实例代码和工程模板。 - 输出路径
输出路径是最终生成编译脚本和放置编译临时文件的位置,一般默认跟随应用路径即可。
开发使用(个人见解)
创建自己的开发板
从现有配置创建新配置
进入sdk_env/hpm_sdk/boards
文件夹,可以看到很多官方出的板子,选择一个和自己的方案最相近的,复制一份作为我们自己的开发板配置。
这里以hpm6750evk2
为例,复制hpm6750evk2
文件夹到相同目录并重命名为hpm6750evk2_test
文件夹,作为我们的开发板(名字可以用任意英文,命名规则跟c语言变量差不多)
进入hpm6750evk2_test
文件夹,将hpm6750evk2.yaml
的文件名修改为hpm6750evk2_test.yaml
,来保证工程生成器能正确识别开发板配置。(文件夹里面的yaml文件必须和文件夹同名才能被识别成有效开发板)
修改配置来适配实际硬件
打开上述的hpm6750evk2_test.yaml
文件,可以看到:
1 |
|
其中:
- name 是配置名,可以根据需求自由修改;
- soc 是芯片系列,根据硬件决定;
- device 是具体芯片型号,根据硬件决定;
- openocd-soc 是调试器配置,一般默认即可;
- openocd-probe 是调试器配置,根据硬件决定;
- on-board-ram 是板上外置RAM,根据硬件决定写不写,及怎么写,可以参考其他官方的板子;
- on-board-flash 是板上外置Flash,根据硬件决定写不写,可以参考其他官方的板子,一般需要,因为HPM很多型号没有内置Flash;
- feature 是支持的功能,根据硬件决定。
这里面比较重要的是openocd-probe
,因为这决定了工程生成器生成的工程里面的OpenOCD调试器默认配置脚本,写错了会导致连不上板子,此例采用cmsis_dap
调试器。自带的调试器配置可以在/sdk_env/hpm_sdk/boards/openocd/probes
里面看到
yaml文件修改完成后,接下来修改pinmux.h
board.h
pinmux.c
board.c
四个代码,其中pinmux.c
pinmux.h
两个可以用 https://tools.hpmicro.com/ 提供的引脚配置工具生成,board.h
board.c
需要手动修改,这就是编程问题了。
文件夹下面的其他东西,比如README
,doc
都是给人看的,不是必需项。CMakeLists.txt 是CMake生成脚本,必须保留。
复制工程到SDK外部和生成工程
HPM工程生成器默认生成工程会生成到SDK内部,这可能导致意外的修改导致SDK损坏,所以可以通过复制工程到SDK外部来解决。
在你喜欢的地方新建一个文件夹作为你的工程目录,进入/sdk_env/hpm_sdk/samples
里面选择一个你需要的示例工程,复制到前面你新建的文件夹里面,这里以hello_world
为例。
然后打开工程生成器,勾选使用自定义应用路径,然后在用户应用里面选择你刚才新建的文件夹的路径,然后就会在下面的用户应用里面看到你复制过去的示例工程。
构建类型按需求选就行,这里略过。然后在SDK开发板选项里面选择你上面新建的自定义板子:
然后检查生成路径是不是你刚才新建的文件夹。
如果都没毛病,点击下面的生成按钮,然后等待跑完。
下面的日志框里面没有红字或者黄字就是生成成功。
1 |
|
配置VSCode
生成完成后,进入刚才新建的的工程文件夹,进入刚才从sdk里面复制过来的示例文件夹,就会看到生成的东西。
在里面新建一个文件夹叫.vscode
,进入。
在里面新建一个文件,叫c_cpp_properties.json
,内容为:
1 | { |
其中:
- name 是配置名,按个人喜好改
- compilerPath 是编译器地址,在
/sdk_env/toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win/bin/riscv32-unknown-elf-gcc.exe
,但是最好写绝对地址,除非你懂什么环境变量之类的高级玩法。 - compileCommands 是编译指令,里面的东西可以给VSCode配置自动补全啥的,在刚才生成完的工程目录里面的SDK配置文件夹里面,我这里是
hpm6750evk2_test_flash_sdram_xip_debug
,这个文件夹根据你选择的不同配置名字也不一样,每次生成需要自己看看确认。
其他的可以不改或根据自己的知识进行修改。
现在回到上一级文件夹,应该是这样的:
用VSCode打开这个文件夹,如果前面配置的都正确,那么现在已经可以正常使用VSCode的跳转和自动补全功能了。如果不是,可以检查c_cpp_properties.json
,在打开工程文件夹的情况下编辑c_cpp_properties.json
,会有黄线提示问题的,根据提示修改就行了。
SDK本地化
切换到工程生成器,确认所有配置和前文所述一致.
SDK本地化会固化板子配置,以后无法通过修改上文的SDK开发板来修改配置,但是会创建和SDK独立的源码组,不会改坏SDK。
点击下面的应用SDK本地化,看到以下信息就说明成功了。
编译
打开前面sdk_env
里面的start_cmd.cmd
,用命令进入前面的工程SDK配置文件夹:
在里面执行ninja
指令即可编译。
编译成功会显示占用。
下载
连接好硬件和电脑,切换到工程生成器。
点击左下角烧写Flash,probe选择你接板子的调试器,soc选择和你用的型号芯片一样的就行,board也选择和你用的型号芯片一样的就行,点确定。
文件路径选择刚才编译文件夹里面out文件夹里面的elf文件就行,然后点烧写就烧进去了。
PS:下面显示的命令可以复制出来以后独立用,不用每次都打开这个GUI。
HPM系列MCU开发环境配置(基于SDK版本1.6,使用VSCode)