Clion HPM5301lite开发


参考文献

在 CLion 中开发 HPM6000 系列单片机

条件

HPM5301evklite,调试器选用了daplink,但是需要支持jtag调试的,强烈推荐南航无线dap和淘宝无线dap,能调arm和ch32的哪家,我没收他俩广告费
hpm官方sdk与sdk_env
HPMicro Semiconductor Ltd · GitHub
env自带了toolchain,但是也可以用andes的 ,据说是只有andes的才能发挥RV的全部实力
GitHub - andestech/nds-gnu-toolchain: GNU toolchain for AndesCore

开发环境配置

添加环境变量,请忽略下图的GNNRISCV_ToolChain的环境变量,那个已经删掉了

PS:toolchain的环境变量指向的目录不要带bin,否则编译会有问题

工具链在ENV里面带了,填进去就行,最新的13.2

CLion开发

hpm sdk生成工具在Clion中打开
工具链如图
Pasted image 20240811120732.png
报错
Pasted image 20240811120757.png

加上这个试试
Pasted image 20240811120911.png

成功
Pasted image 20240811121056.png

不过这个目录有点怪啊,我原本以为是直接复制出来一份例程,没成想还是改原来的?
这个问题跳转到SDK本地化开发解决。

有个问题,上图的这个编译实际上是不对的,应该在这里设置一下
Pasted image 20240811205240.png
可执行文件这个把elf文件选上,正常编译结果下图所示,别的型号的片子也差不多
Pasted image 20240811205400.png

本地化开发

本地化开发是依托答辩,建议把sample里面的例程直接复制过来,加上Cmake的参数就行了,跟上面步骤是一样的

OpenOCD 下载与调试

openocd必须用HPM的env里面提供的openocd,CLion开发实测不需要将其添加到环境变量中,只需指定即可

一个bug
我的实际目录是这样的
Pasted image 20240811205939.png

但是呢,来看看CLion,没有图了,用人话说就是CLion的这个目录里面看不到这个openocd
Pasted image 20240811210041.png

另外还需要对env_sdk的openocd目录做一点手脚,熟悉openocd的同学们应该能发现实际上env里面这个openocd是不完整的,CLion也会提示找不到scripts/board,这个东西实际上在sdk里面
Pasted image 20240811210252.png

所以,要把这些东西复制到env的openocd/scripts目录里面Pasted image 20240811210946.png
这个时候CLion应该不会报错了,接下来是编写面板配置文件(.cfg)

bindto 0.0.0.0  
  
adapter speed 8000  
  
adapter srst delay 500  
  
adapter driver cmsis-dap  
  
transport select jtag  
  
source [find soc/hpm5300.cfg]  
  
flash bank xpi0 hpm_xpi 0x80000000 0x2000000 1 1 $_TARGET0 0xF3000000 0x6 0x1000  
  
proc init_clock {} {  
    $::_TARGET0 riscv dmi_write 0x39 0xF4002000  
    $::_TARGET0 riscv dmi_write 0x3C 0x1  
  
    $::_TARGET0 riscv dmi_write 0x39 0xF4002000  
    $::_TARGET0 riscv dmi_write 0x3C 0x2  
  
    $::_TARGET0 riscv dmi_write 0x39 0xF4000800  
    $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF  
  
    $::_TARGET0 riscv dmi_write 0x39 0xF4000810  
    $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF  
  
    $::_TARGET0 riscv dmi_write 0x39 0xF4000820  
    $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF  
  
    $::_TARGET0 riscv dmi_write 0x39 0xF4000830  
    $::_TARGET0 riscv dmi_write 0x3C 0xFFFFFFFF  
    echo "clocks has been enabled!"  
}  
  
$_TARGET0 configure -event reset-init {  
    init_clock  
}  
  
$_TARGET0 configure -event gdb-attach {  
    reset halt  
}  
  
reset_config srst_only

这个实际上是hpm5301evklite.cfg和probe/cmsis-dap.cfg的缝合体,以及又加上了一点我自己的屎
如果你要是用6200evk去开发,就把find soc那句改成hpm6280.cfg,这些文件都在openocd/scripts/soc里面
再把下面的flash相关的东西从board的cfg偷过来就行了。
调试起来挺舒服的,不过速度相比较stm32g474-nucelo来说略有一点点卡,
Pasted image 20240811212504.png

更新

bindto 0.0.0.0  
  
adapter speed 8000  
  
adapter srst delay 500  
  
adapter driver cmsis-dap  
  
transport select jtag  
  
source [find soc/hpm5300.cfg]  
  
source [find board/hpm5301evklite.cfg]  
  
reset_config srst_only

舒服了,直接调就行了,跟stm32的cfg差不多一个写法


文章作者: Harry Zhang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Harry Zhang !
  目录