HPM系列MCU开发环境配置(基于SDK版本1.6,使用VSCode)

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
2
3
4
5
6
7
8
9
10
# 在GitHub下载
git clone https://github.com/hpmicro/hpm_sdk -b v1.6.0 --depth=1
git clone https://github.com/hpmicro/sdk_env -b v1.6.0 --depth=1

# 在gitee镜像下载
git clone https://gitee.com/hpmicro/hpm_sdk -b v1.6.0 --depth=1
git clone https://gitee.com/hpmicro/sdk_env -b v1.6.0 --depth=1

# 要是报什么乱七八糟的错误可以试试这个命令
git config --global core.longpaths true

注意安装目录不能有中文!!!!!!不然会导致后面工程没法正常生成(写到后面发现的,所以前面有的图片带中文路径,但是不影响,因为用的都是相对路径,就懒得改了)。

clone完后进入sdk_env文件夹,检查里面有没有hpm_sdk文件夹,以及里面有没有类似下文图片的内容。

tp

tp

如果没有文件夹,或者里面没东西,那么把上面clone下来的hpm_sdk文件夹复制到sdk_env文件夹里面。至此,HPM SDK下载和安装完成。

基础概念(个人见解)

sdk_env文件夹里面有个start_gui.exe文件,可以打开GUI的工程生成器

tp

点左上角Language可以换中文

tp

可以看到,工程生成器有以下几个配置路径:

  1. 开发板路径
    这个SDK里面的开发板指的是板级硬件,包含了初始化代码,引脚描述,外设使用情况,及引脚复用。
    sdk自带了官方出的几款开发板的配置,在拥有了自己设计的硬件后,也可以在里面添加自己的开发板。
  2. 应用路径
    应用路径就是实例代码和工程模板。
  3. 输出路径
    输出路径是最终生成编译脚本和放置编译临时文件的位置,一般默认跟随应用路径即可。

开发使用(个人见解)

创建自己的开发板

从现有配置创建新配置

进入sdk_env/hpm_sdk/boards文件夹,可以看到很多官方出的板子,选择一个和自己的方案最相近的,复制一份作为我们自己的开发板配置。
这里以hpm6750evk2为例,复制hpm6750evk2文件夹到相同目录并重命名为hpm6750evk2_test文件夹,作为我们的开发板(名字可以用任意英文,命名规则跟c语言变量差不多)

tp

进入hpm6750evk2_test文件夹,将hpm6750evk2.yaml的文件名修改为hpm6750evk2_test.yaml,来保证工程生成器能正确识别开发板配置。(文件夹里面的yaml文件必须和文件夹同名才能被识别成有效开发板)

tp

修改配置来适配实际硬件

打开上述的hpm6750evk2_test.yaml文件,可以看到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# Copyright (c) 2022-2024 HPMicro
# SPDX-License-Identifier: BSD-3-Clause

board:
name: hpm6750evk2
soc: HPM6750
device: HPM6750xVMx
openocd-soc: hpm6750-dual-core
openocd-probe: cmsis_dap
on-board-ram:
type: sdram
size: 32M
width: 32bit
on-board-flash:
type: qspi-nor-flash
size: 16M
feature:
- board_audio_in
- board_audio_out
- board_audio_in_vad
- board_audio_codec
- board_uart_software_rx_idle_pin
- board_gpt_pin
- board_motor_control
- board_pwm_rgb_led
- board_puart_pin
- board_enet_pps_pin
- board_sdcard
- board_sdram
- board_enet_phy
- board_enet_dual_phy
- board_dual_usb
- board_power_button

其中:

  • 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里面看到
tp

yaml文件修改完成后,接下来修改pinmux.h board.h pinmux.c board.c四个代码,其中pinmux.c pinmux.h两个可以用 https://tools.hpmicro.com/ 提供的引脚配置工具生成,board.h board.c需要手动修改,这就是编程问题了。
文件夹下面的其他东西,比如READMEdoc都是给人看的,不是必需项。CMakeLists.txt 是CMake生成脚本,必须保留。

复制工程到SDK外部和生成工程

HPM工程生成器默认生成工程会生成到SDK内部,这可能导致意外的修改导致SDK损坏,所以可以通过复制工程到SDK外部来解决。

在你喜欢的地方新建一个文件夹作为你的工程目录,进入/sdk_env/hpm_sdk/samples里面选择一个你需要的示例工程,复制到前面你新建的文件夹里面,这里以hello_world为例。

tp

然后打开工程生成器,勾选使用自定义应用路径,然后在用户应用里面选择你刚才新建的文件夹的路径,然后就会在下面的用户应用里面看到你复制过去的示例工程。

tp
tp

构建类型按需求选就行,这里略过。然后在SDK开发板选项里面选择你上面新建的自定义板子:
tp

然后检查生成路径是不是你刚才新建的文件夹。
tp

如果都没毛病,点击下面的生成按钮,然后等待跑完。

tp

下面的日志框里面没有红字或者黄字就是生成成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

[11:45:50] ************************* Execute Start! *************************
[11:45:50] -- Application: C:/Users/****/Desktop/hp/my_project/hello_world
-- Board: hpm6750evkmini from C:/Users/****/Desktop/hp/sdk_env/hpm_sdk/boards
[11:45:50] -- Found toolchain: gnu (C:/Users/****/Desktop/hp/sdk_env/toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win)
[11:45:50] -- hpm_sdk: 1.6.0 (C:/Users/****/Desktop/hp/sdk_env/hpm_sdk)
[11:45:51] -- The C compiler identification is GNU 13.2.0
[11:45:51] -- The CXX compiler identification is GNU 13.2.0
[11:45:51] -- The ASM compiler identification is GNU
[11:45:51] -- Found assembler: C:/Users/****/Desktop/hp/sdk_env/toolchains/rv32imac_zicsr_zifencei_multilib_b_ext-win/bin/riscv32-unknown-elf-gcc.exe
[11:45:51] -- GNU ld linker script: C:/Users/****/Desktop/hp/sdk_env/hpm_sdk/soc/HPM6700/HPM6750/toolchains/gcc/flash_sdram_xip.ld
[11:45:52] -- IAR linker script: C:/Users/****/Desktop/hp/sdk_env/hpm_sdk/soc/HPM6700/HPM6750/toolchains/iar/flash_sdram_xip.icf
-- IAR device name: HPM6750xVMx
[11:45:52] -- IAR Embedded Workbench Project: C:/Users/****/Desktop/hp/my_project/hello_world/hpm6750evkmini_flash_sdram_xip_debug/iar_embedded_workbench\hello_world.ewp
[11:45:52] -- Segger linker script: C:/Users/****/Desktop/hp/sdk_env/hpm_sdk/soc/HPM6700/HPM6750/toolchains/segger/flash_sdram_xip.icf
-- Segger device name: HPM6750xVMx
[11:45:53] -- Segger openocd board config: $(ProjectDir)/../../../../sdk_env/hpm_sdk/boards/openocd/boards/hpm6750evkmini.cfg
[11:45:53] -- Segger Embedded Studio Project: C:/Users/****/Desktop/hp/my_project/hello_world/hpm6750evkmini_flash_sdram_xip_debug/segger_embedded_studio/hello_world.emProject
[11:45:53] -- Configuring done
[11:45:53] -- Generating done
-- Build files have been written to: C:/Users/****/Desktop/hp/my_project/hello_world/hpm6750evkmini_flash_sdram_xip_debug
[11:45:53] Project IDE Path: C:/Users/****/Desktop/hp/my_project/hello_world/hpm6750evkmini_flash_sdram_xip_debug/segger_embedded_studio/hello_world.emProject
[11:45:53] ************************* Execute End! *************************

配置VSCode

生成完成后,进入刚才新建的的工程文件夹,进入刚才从sdk里面复制过来的示例文件夹,就会看到生成的东西。
tp

在里面新建一个文件夹叫.vscode,进入。

在里面新建一个文件,叫c_cpp_properties.json,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"configurations": [
{
"name": "hpm",
"includePath": [],
"defines": [],
"compilerPath": "D:\\mcu_other\\sdk_env\\toolchains\\rv32imac_zicsr_zifencei_multilib_b_ext-win\\bin\\riscv32-unknown-elf-gcc.exe",
"cStandard": "gnu11",
"cppStandard": "gnu++14",
"intelliSenseMode": "gcc-x64",
"compileCommands": "./hpm6750evk2_test_flash_sdram_xip_debug/compile_commands.json"
}
],
"version": 4
}

其中:

  • 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,这个文件夹根据你选择的不同配置名字也不一样,每次生成需要自己看看确认。

其他的可以不改或根据自己的知识进行修改。

现在回到上一级文件夹,应该是这样的:

tp

用VSCode打开这个文件夹,如果前面配置的都正确,那么现在已经可以正常使用VSCode的跳转和自动补全功能了。如果不是,可以检查c_cpp_properties.json,在打开工程文件夹的情况下编辑c_cpp_properties.json,会有黄线提示问题的,根据提示修改就行了。

SDK本地化

切换到工程生成器,确认所有配置和前文所述一致.

tp

SDK本地化会固化板子配置,以后无法通过修改上文的SDK开发板来修改配置,但是会创建和SDK独立的源码组,不会改坏SDK。
点击下面的应用SDK本地化,看到以下信息就说明成功了。

tp

编译

打开前面sdk_env里面的start_cmd.cmd,用命令进入前面的工程SDK配置文件夹:

tp

在里面执行ninja指令即可编译。

tp

编译成功会显示占用。

下载

连接好硬件和电脑,切换到工程生成器。
点击左下角烧写Flash,probe选择你接板子的调试器,soc选择和你用的型号芯片一样的就行,board也选择和你用的型号芯片一样的就行,点确定。

tp

文件路径选择刚才编译文件夹里面out文件夹里面的elf文件就行,然后点烧写就烧进去了。

tp

PS:下面显示的命令可以复制出来以后独立用,不用每次都打开这个GUI。

HPM系列MCU开发环境配置(基于SDK版本1.6,使用VSCode)

https://wuxiproj.mzy7.cn/posts/a36123c2.html

作者

【社区】UM4I

发布于

2024-08-12

更新于

2024-12-07

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×