《兆易創(chuàng)新GD32VW553H-EVAL開發(fā)實踐指南》電子書正式上線! 本書是RT-Thread工程師團隊與兆易創(chuàng)新聯(lián)合推出的評測活動產(chǎn)出,系統(tǒng)梳理了從UART、WDG、I2C、TIMER、PWM、SPI等基礎(chǔ)外設(shè),到Wi-Fi無線通信的完整驅(qū)動開發(fā)實踐,手把手帶你完成從硬件調(diào)試到無線應(yīng)用部署的完整流程。
本文是《GD32VW553上的UART實踐》。
目錄
開發(fā)環(huán)境搭建
VSCode軟件調(diào)試環(huán)境搭建
芯片資源 - Uart
UART功能調(diào)試
Git鏈接
開發(fā)者貢獻名單
1 開發(fā)環(huán)境搭建
1.1 軟件下載鏈接
RT-Thread 環(huán)境:https://github.com/RT-Thread/rt-thread/tree/master/bsp/gd32/risc-v/gd32vw553h-eval
方案一:可以使用git工具直接拉取RT-Thread整包:git clone https://github.com/RT-Thread/rt-thread.git
方案二:可以直接從git界面下載zip整包,本地解壓;

RT-Thread ENV工具:https://www.rt-thread.org/download.html#download-rt-thread-env-tool

編譯器工具鏈:https://www.gigadevice.com.cn/product/mcu/mcus-product-selector/gd32vw553hmq6

固件燒錄工具GD32AllInOneProgrammer:https://www.gd32mcu.com/cn/download?kw=GD32+All-In-One+Programmer&lan=cn

1.2 環(huán)境配置
1.2.1 RT-Thread ENV工具配置
將1.1->第3小節(jié):鏈接中下載的文件拷貝至工作文件夾(此處為筆者習(xí)慣,僅供參考,可跳過);

打開路徑中的exe文件運行RT-Thread ENV工具,此時該文件會自動配置Windows下的環(huán)境變量;

此處需要注意輸出文件中包含的環(huán)境變量的設(shè)置,當我們解壓并使用后,再次移動軟件位置時,記得將環(huán)境變量同步更改,否則可能會報錯,無法找到pkgs指令;若是不會修改環(huán)境變量,最簡單的解決方案就是刪除當前的ENV整包,然后在需要安裝的位置重新解壓,并運行即可;
當軟件環(huán)境配置完成后,分別運行pkgs —upgrade、pkgs —update,此時觀察倉庫可以發(fā)現(xiàn)倉庫中增加了packages文件夾,里面包含了gd32的lib庫;


1.2.2 GD32編譯鏈環(huán)境搭建
對于任意一款芯片的編譯肯定都需要適配交叉編譯工具鏈,一般這部分廠商都有提供,本次需要將交叉編譯工具集成到RT-Thread的環(huán)境中;
由于在第一章1.1已經(jīng)下載好了編譯器工具鏈,首先需要選擇一個自己想要放置編譯鏈的地方解壓工具鏈;
然后在RT ENV環(huán)境下運行下面命令,注意:PTAH=后面跟著的路徑需要改為自己的路徑,下方指令不可直接復(fù)制粘貼使用!下方指令不可直接復(fù)制粘貼使用!下方指令不可直接復(fù)制粘貼使用!
setRTT_EXEC_PATH=E:\GD32\GD32VW5\GD32EmbeddedBuilder_v1.5.4_Rel\Tools\RISC-V Embedded GCC\8.2.0-2.2-20190521-0004\bin
運行完成后,在gd32vw553h-eval的目錄下直接執(zhí)行scons -j128編譯即可;
記得一定要在\rt-thread-master\bsp\gd32\risc-v\gd32vw553h-eval,這個目錄下執(zhí)行,其中j后面跟著的數(shù)字是指使用幾個核進行編譯,可根據(jù)自己的電腦實際性能調(diào)整;
編譯完成后既可以看到文件夾中多了rtthread.bin文件,該文件就是后面需要下載到板卡的二進制文件;
1.3 固件燒錄(直接按照git中完成)
固件燒錄需要使用上述的第一章1.1中下載的GD32AllInOneProgrammer軟件,燒錄說明位于燒錄軟件下的Doc文件夾,或在線搜索使用方法,下述是燒錄的示例:

需要注意的是使用上述軟件燒錄時需要將boot1置為高電平,燒錄結(jié)束后重新設(shè)置為低電平,手動調(diào)整板載的boot跳線帽。
運行結(jié)果:燒錄完畢后,使用串口連接自己的串口終端軟件,即可通過串口與開發(fā)板交互;
1.4. 測評結(jié)論
GD32這款板子在環(huán)境搭建上相對還是比較簡單的,基本可以無腦跟著Git中的指引一步步完成開發(fā)環(huán)境的搭建,無需開發(fā)者到處尋找資料;同時搭建開發(fā)環(huán)境所需的軟件包也比較集中,且容易獲取;
2 VSCode軟件調(diào)試環(huán)境搭建
2.1 調(diào)試環(huán)境搭建
配置VSCode調(diào)試環(huán)境,首先在第一章中已經(jīng)下載好了《GD32EmbeddedBuilder》,調(diào)試環(huán)境配置時需要用到該文件夾中的Tools;

其次在BSP根目錄下執(zhí)行下述命令,生成VSCode工程所需文件。
scons —target=vs
在VSCode安裝擴展插件Cortex-Debug,版本v1.4.4。
完成上述工作后,點擊運行和調(diào)試選項,創(chuàng)建一個launch.json配置文件,配置文件示例如下:
{"version":"0.2.0","configurations":[ { "name":"Cortex Debug", "cwd":"${workspaceFolder}", "executable":"${workspaceFolder}/rtthread.elf", "request":"launch", "type":"cortex-debug", "servertype":"openocd", "serverpath":"E:/GD32/GD32VW5/Tools/GD32EmbeddedBuilder_v1.5.2.30854/Tools/OpenOCD/xpack-openocd-0.11.0-3/bin/openocd", "configFiles": [ "${workspaceFolder}/openocd_gdlink.cfg" ], "runToEntryPoint":"main", "showDevDebugOutput":"raw", "toolchainPrefix":"E:/GD32/GD32VW5/Tools/GD32EmbeddedBuilder_v1.5.2.30854/Tools/RISC-V Embedded GCC/8.2.0-2.2-20190521-0004/bin/riscv-none-embed" }]}
這里需要注意如果你的${workspaceFolder}工作空間不是當前的路徑,可以自行將${workspaceFolder}相關(guān)的路徑改為自己launch.json的絕對路徑/相對路徑使用;
上述文件中的部分字段需要根據(jù)用戶環(huán)境進行修改,格式需與示例一致:
“serverpath”:該字段需要改為用戶的openocd所在路徑,openocd工具位于GD32EmbeddedBuilder工具包中。
“toolchainPrefix”:該字段需修改為用戶的工具鏈所在路徑,工具鏈位于GD32EmbeddedBuilder工具包中。
完成上述配置后即可點擊調(diào)試選項進行調(diào)試,調(diào)試時boot管腳均置為低電平即可,調(diào)試時同樣會進行固件下載。
2.2 調(diào)試環(huán)境測試
在工程界面點擊Cortex Debug,即可進入調(diào)節(jié)界面;

在調(diào)試界面可以查看變量值、暫停后可以查看當前任務(wù)的調(diào)用棧情況,同時也支持在vscode界面進行斷點操作、單步調(diào)試、Reset等;

2.3 測評結(jié)論
整體來說調(diào)試環(huán)境搭建非常簡單,但是調(diào)試界面相對于keil、esp-idf、勞德巴赫等其他環(huán)境較為簡陋,不過功能完全足夠開發(fā)者使用;
3 芯片資源 - Uart
芯片采用RISC-V架構(gòu)處理器,適用于低能耗、小面積的嵌入式應(yīng)用,具有簡單的動態(tài)分支預(yù)測、指令預(yù)取緩沖區(qū)和I-cache等多種高效微架構(gòu)特點。
3.1 Uart分布

根據(jù)芯片架構(gòu)示意圖可以看到,芯片共有三路串口,其中UART2掛載在APB2總線上,USART0和UART1掛載在APB1上;這里需要注意我們在使用不同Uart時,需要初始化對應(yīng)的總線時鐘;
3.2 存儲
RISC-V處理器采用哈弗架構(gòu),可以使用單獨的總線來提取指令和加載/存儲數(shù)據(jù)。程序存儲器,數(shù)據(jù)存儲器,寄存器和I/O端口組織在同一線性4GB(32位芯片)地址空間內(nèi)。具體的存儲器映射表可以查看《GD32VW55x_用戶手冊_Rev1.4.pdf》第1.3節(jié);
Uart地址空間
USART0:0x4000 4800 - 0x4000 4BFF
UART1:0x4000 4400 - 0x4000 47FF
UART2:0x4001 1000 - 0x4001 13FF
Ram段

代碼段


其中我們主要關(guān)注和使用較多的就是主存儲0x0800 0000 - 0x083F FFFF和0x0BF4 0000 - 0x0BF7 FFFF ROM區(qū)間;
根據(jù)芯片的引導(dǎo)配置章節(jié)可以看出,該芯片將Bootload、secure boot分別放在了ROM段0x0BF40000、0x0BF46000作為起始地址,本地代碼一般放在了起始地址0x08000000的主存儲區(qū);
3.3 USART 模塊內(nèi)部框圖

從模塊內(nèi)部框圖可以看出,Uart的讀寫操作主要都是在讀/寫緩沖區(qū)完成,用戶可以通過CPU在串口傳輸完成后直接讀取讀緩沖區(qū)的內(nèi)容,或像寫緩沖區(qū)寫入數(shù)據(jù),配置控制/狀態(tài)寄存器及中斷完成Uart的讀寫操作;
從圖中同樣可以看到該芯片Uart支持DMA直接將緩沖區(qū)數(shù)據(jù)搬入/出;
讀寫緩沖區(qū)分別對應(yīng)Uart的數(shù)據(jù)接受/發(fā)送寄存器,同時FIFO的控制/狀態(tài)獲取,主要依賴于FIFO控制和狀態(tài)寄存器;
同時芯片支持硬件流控功能,可通過nCTS和nRTS引腳來實現(xiàn)。通過將USART_CTL2寄存器中RTSEN位置1來使能RTS流控,將USART_CTL2寄存器中CTSEN位置1來使能CTS流控。

GD32vw553 引腳映射關(guān)系

測試階段暫時將PA2/3作為UART1的收發(fā)引腳,PA6/7作為UART2的收發(fā)引腳;
4 UART功能調(diào)試
4.1 測試環(huán)境
Demo中僅使能了UART0一路串口,首先需要測試3路串口是否均可使用,可以在RTT的menuconfig中將UART1/2使能;
使能后會出現(xiàn)宏定義相關(guān)的報錯,此時需要修改drv_usart.c文件,由于GD32vw55x的另外兩路都是UART,drv中寫死的USART宏并不適用,臨時改為UART1/UART2,重新編譯可成功編譯;

單步調(diào)試查看調(diào)用棧,可以發(fā)現(xiàn)在程序啟動后會首先調(diào)用board.c中的rt_hw_board_init,另外在rt_hw_board_init中已經(jīng)初始化了board.c UART數(shù)組中的所有串口,我們可以在后續(xù)直接測試UART1/2的功能;

RTT中main其實只是一個Task,并不像裸機開發(fā)那樣時start.s跳轉(zhuǎn)出的首個函數(shù);

我們可以在main task中調(diào)用uart API發(fā)送/接收數(shù)據(jù);

4.3 Tx/Rx 功能測試結(jié)果
由下圖可以看到UART1/2均可正常使用,且中斷可被正常觸發(fā);

依然是上述代碼,將Uart2的Tx接入Uart1的Rx,可以看到打印如下:

同理可測Uart2的接收功能;
5 Git鏈接
https://gitee.com/zhang-haitao-1/gd32vw553h-test
6 開發(fā)者貢獻名單
《兆易創(chuàng)新GD32VW553H-EVAL開發(fā)實踐指南》包含的內(nèi)容以及對應(yīng)的貢獻者如下,感謝各位小伙伴的支持與貢獻!

-
嵌入式
+關(guān)注
關(guān)注
5207文章
20578瀏覽量
336204 -
uart
+關(guān)注
關(guān)注
22文章
1318瀏覽量
106889 -
兆易創(chuàng)新
+關(guān)注
關(guān)注
24文章
725瀏覽量
84034 -
GD32
+關(guān)注
關(guān)注
7文章
434瀏覽量
27532
發(fā)布評論請先 登錄
基于RISC-V的兆易創(chuàng)新GD32VW553系列全新WiFi6 MCU亮相
兆易創(chuàng)新推出GD32VW553系列Wi-Fi 6 MCU
GD32VW553認證測試指南應(yīng)用說明
GD32VW553系列的研制射頻硬件指南應(yīng)用說明
GD32VW553 BLE開發(fā)指南應(yīng)用說明
GD32VW553基本命令用戶指南應(yīng)用說明
GD32VW553快速開發(fā)指南應(yīng)用說明
AN154 GD32VW553快速開發(fā)指南
AN151 GD32VW553 AT指令用戶指南
AN153 GD32VW553基本指令用戶指南
AN152 GD32VW553 BLE開發(fā)指南
嘗鮮體驗,兆易創(chuàng)新GD32VW553 無線MCU評測活動開啟!技術(shù)解決方案深度評測,直播預(yù)約中 | 社區(qū)活動
【直播預(yù)告】兆易創(chuàng)新 GD32VW553 系列產(chǎn)品直播解讀,重磅來襲! | 問學(xué)直播
基于 RT-Thread 和兆易創(chuàng)新GD32F527的CAN總線監(jiān)視器 | 技術(shù)集結(jié)
兆易創(chuàng)新GD32VW553上的UART實踐 | 技術(shù)集結(jié)
評論