Linux 环境下配置CH32V系列单片机开发环境
0. 准备工作
0.1 CH32V 介绍
CH32V系列芯片是南京沁恒微电子推出的基于RISC-V架构的MCU。
其中 CH32V103系列为RISC-V3A架构
CH32V203,CH32V208,CH32V303,CH32V305,CH32V307系列为RISC-V4F架构
0.2 开发库与开发工具链
本教程使用的开发库与开发工具链如下
沁恒提供的硬件库(包含基本启动文件和链接脚本,下文简称库)
RISC-V Embedded GNUC工具链
沁恒提供的定制版openocd
VSCode
官方提供了MRS_Toolchain_Linux的工具包,其中包含了RISCV Embedded GNUC工具链和定制版openocd,Leo酱没有使用其提供的CNUC工具链,是自己去官网下载的最新版。链接如下
https://gnu-mcu-eclipse.github.io/toolchain/riscv/
下载后,请自行组织目录结构安装相应工具链(其实就是复制到一个地方放好)并添加环境变量。(对于openocd建议建立链接并起别名以使其与系统环境的openocd分离,Leo酱链接到了/usr/bin/rvopenocd)
1. 项目建立
1.1 建立项目目录并复制库文件
按照统一结构来构建目录。如下
Drivers :硬件库和板级支持包
Core :核心业务
System :系统级软件包(如果使用操作系统等)
Makefile :Make自动构建脚本
link.ld :链接脚本 (库中包含)
startup_ch32v10x.S :启动文件(以CH32V103为例,库中包含)
将库中的外设相关放到Peripheral中,将riscv架构相关文件core_riscv.h和core_riscv.c放置到Platforrm 中。将debug.h和debug.c放到Core中。并将Link.ld和启动文件放到顶层目录。在顶层目录新建Makefile。
并用VSCode打开项目目录。
建立后的项目目录结构如下

1.2 编写中断和系统时钟配置
在Core中新建ch32v10x_it.c,system_ch32v10x.c,ch32v10x_conf.h和system_ch32v10x.h并编写其中内容如下注:这四个文件在库提供的模板里能够找到,可以直接复制使用(另外包含了一个ch32v10x_it.h)
ch32v140x_it.c
system_ch32v10x.c
system_ch32v10x.h
ch32v10x_conf.h
2. 编写测试程序
2.1 编写主函数
建立main.c驱动LED闪烁
2.2 编写Makefile
编写Makefile内容如下
3.编译与烧录
3.1 编译
编译的过程很简单,在终端中执行make便可以完成编译,编译链接后会在项目顶层目录生成一个build目录,其中存在用于调试烧录的.elf,.hex,.bin文件。
3.2 烧录
烧录这一点就需要多说几嘴了,首先需要使用官方提供的WCH-LINK进行烧录,需要从官方提供的支持包中将相关的驱动程序和依赖库进行安装,从官方提供的MRS_Toolchain_Linux工具包的beforeinstall目录中的start.sh中我们可以发现其实就是对beforeinstall 目录中的几个库进行拷贝,并且把udev规则文件给添加到了系统中。
Leo酱对于其中的libusb使用了官方提供的最新版本进行编译安装。
另外,对于WCH-LINK的固件需要进行更新,否则在调用openocd时会提示libusb溢出错误。最新版的固件,需要下载Windows版本的MounRiver并且从其中的目录中扒出来。
路径为 {InstallDir}/update/firmware/firmware.bin,扒出来以后使用WCH-ISP Tool进行下载,很抱歉这还是Window平台的软件,不过升级固件后就一劳永逸(只要官方别再给整幺蛾子)了,Leo酱用的虚拟机进行的固件升级。哎,笔锋至此,声泪俱下,由衷感受到国产化进程的艰难和Linux平台硬件开发者的艰辛。
弄完这个以后就可以直接使用openocd 进行下载了,官方文档里提供了清除,烧录,验证,复位的操作,在这里,Leo酱给整理成了一个Shell脚本,使用时只需要跟随要下载的文件即可,如下:
由此,编译和烧录就完成了。
3.3 调试
可以通过gdb结合vscode进行调试,然而,暂时无法实现编译,下载,调试一条龙服务。需要先手动编译下载后,启动openocd Server然后使用gdb链接调试,调试前,配置.
vscode/launch.json文件如下
以上。