Linux 環(huán)境下配置CH32V系列單片機(jī)開發(fā)環(huán)境
0. 準(zhǔn)備工作
0.1 CH32V 介紹
CH32V系列芯片是南京沁恒微電子推出的基于RISC-V架構(gòu)的MCU。
其中 CH32V103系列為RISC-V3A架構(gòu)
CH32V203,CH32V208,CH32V303,CH32V305,CH32V307系列為RISC-V4F架構(gòu)
0.2 開發(fā)庫與開發(fā)工具鏈
本教程使用的開發(fā)庫與開發(fā)工具鏈如下
沁恒提供的硬件庫(包含基本啟動(dòng)文件和鏈接腳本,下文簡稱庫)
RISC-V Embedded GNUC工具鏈
沁恒提供的定制版openocd
VSCode
官方提供了MRS_Toolchain_Linux的工具包,其中包含了RISCV Embedded GNUC工具鏈和定制版openocd,Leo醬沒有使用其提供的CNUC工具鏈,是自己去官網(wǎng)下載的最新版。鏈接如下
https://gnu-mcu-eclipse.github.io/toolchain/riscv/
下載后,請(qǐng)自行組織目錄結(jié)構(gòu)安裝相應(yīng)工具鏈(其實(shí)就是復(fù)制到一個(gè)地方放好)并添加環(huán)境變量。(對(duì)于openocd建議建立鏈接并起別名以使其與系統(tǒng)環(huán)境的openocd分離,Leo醬鏈接到了/usr/bin/rvopenocd)
1. 項(xiàng)目建立
1.1 建立項(xiàng)目目錄并復(fù)制庫文件
按照統(tǒng)一結(jié)構(gòu)來構(gòu)建目錄。如下
Drivers :硬件庫和板級(jí)支持包
Core :核心業(yè)務(wù)
System :系統(tǒng)級(jí)軟件包(如果使用操作系統(tǒng)等)
Makefile :Make自動(dòng)構(gòu)建腳本
link.ld :鏈接腳本 (庫中包含)
startup_ch32v10x.S :啟動(dòng)文件(以CH32V103為例,庫中包含)
將庫中的外設(shè)相關(guān)放到Peripheral中,將riscv架構(gòu)相關(guān)文件core_riscv.h和core_riscv.c放置到Platforrm 中。將debug.h和debug.c放到Core中。并將Link.ld和啟動(dòng)文件放到頂層目錄。在頂層目錄新建Makefile。
并用VSCode打開項(xiàng)目目錄。
建立后的項(xiàng)目目錄結(jié)構(gòu)如下

1.2 編寫中斷和系統(tǒng)時(shí)鐘配置
在Core中新建ch32v10x_it.c,system_ch32v10x.c,ch32v10x_conf.h和system_ch32v10x.h并編寫其中內(nèi)容如下注:這四個(gè)文件在庫提供的模板里能夠找到,可以直接復(fù)制使用(另外包含了一個(gè)ch32v10x_it.h)
ch32v140x_it.c
system_ch32v10x.c
system_ch32v10x.h
ch32v10x_conf.h
2. 編寫測(cè)試程序
2.1 編寫主函數(shù)
建立main.c驅(qū)動(dòng)LED閃爍
2.2 編寫Makefile
編寫Makefile內(nèi)容如下
3.編譯與燒錄
3.1 編譯
編譯的過程很簡單,在終端中執(zhí)行make便可以完成編譯,編譯鏈接后會(huì)在項(xiàng)目頂層目錄生成一個(gè)build目錄,其中存在用于調(diào)試燒錄的.elf,.hex,.bin文件。
3.2 燒錄
燒錄這一點(diǎn)就需要多說幾嘴了,首先需要使用官方提供的WCH-LINK進(jìn)行燒錄,需要從官方提供的支持包中將相關(guān)的驅(qū)動(dòng)程序和依賴庫進(jìn)行安裝,從官方提供的MRS_Toolchain_Linux工具包的beforeinstall目錄中的start.sh中我們可以發(fā)現(xiàn)其實(shí)就是對(duì)beforeinstall 目錄中的幾個(gè)庫進(jìn)行拷貝,并且把udev規(guī)則文件給添加到了系統(tǒng)中。
Leo醬對(duì)于其中的libusb使用了官方提供的最新版本進(jìn)行編譯安裝。
另外,對(duì)于WCH-LINK的固件需要進(jìn)行更新,否則在調(diào)用openocd時(shí)會(huì)提示libusb溢出錯(cuò)誤。最新版的固件,需要下載Windows版本的MounRiver并且從其中的目錄中扒出來。
路徑為 {InstallDir}/update/firmware/firmware.bin,扒出來以后使用WCH-ISP Tool進(jìn)行下載,很抱歉這還是Window平臺(tái)的軟件,不過升級(jí)固件后就一勞永逸(只要官方別再給整幺蛾子)了,Leo醬用的虛擬機(jī)進(jìn)行的固件升級(jí)。哎,筆鋒至此,聲淚俱下,由衷感受到國產(chǎn)化進(jìn)程的艱難和Linux平臺(tái)硬件開發(fā)者的艱辛。
弄完這個(gè)以后就可以直接使用openocd 進(jìn)行下載了,官方文檔里提供了清除,燒錄,驗(yàn)證,復(fù)位的操作,在這里,Leo醬給整理成了一個(gè)Shell腳本,使用時(shí)只需要跟隨要下載的文件即可,如下:
由此,編譯和燒錄就完成了。
3.3 調(diào)試
可以通過gdb結(jié)合vscode進(jìn)行調(diào)試,然而,暫時(shí)無法實(shí)現(xiàn)編譯,下載,調(diào)試一條龍服務(wù)。需要先手動(dòng)編譯下載后,啟動(dòng)openocd Server然后使用gdb鏈接調(diào)試,調(diào)試前,配置.
vscode/launch.json文件如下
以上。