兆易创新GD32VW553上的UART实践 | 技术集结

描述

《兆易创新GD32VW553H-EVAL开发实践指南》电子书正式上线! 本书是RT-Thread工程师团队与兆易创新联合推出的评测活动产出,系统梳理了从UART、WDG、I2C、TIMER、PWM、SPI等基础外设,到Wi-Fi无线通信的完整驱动开发实践,手把手带你完成从硬件调试到无线应用部署的完整流程。

本文是《GD32VW553上的UART实践》。

目录


 

开发环境搭建
 


 

VSCode软件调试环境搭建


 

芯片资源 - Uart


 

UART功能调试


 

Git链接


 

开发者贡献名单
 

1 开发环境搭建

1.1 软件下载链接

RT-Thread 环境: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整包,本地解压;

uart

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

uart

编译器工具链:https://www.gigadevice.com.cn/product/mcu/mcus-product-selector/gd32vw553hmq6

uart

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

uart

1.2 环境配置

1.2.1 RT-Thread ENV工具配置

将1.1->第3小节:链接中下载的文件拷贝至工作文件夹(此处为笔者习惯,仅供参考,可跳过);

uart

打开路径中的exe文件运行RT-Thread ENV工具,此时该文件会自动配置Windows下的环境变量;

uart

此处需要注意输出文件中包含的环境变量的设置,当我们解压并使用后,再次移动软件位置时,记得将环境变量同步更改,否则可能会报错,无法找到pkgs指令;若是不会修改环境变量,最简单的解决方案就是删除当前的ENV整包,然后在需要安装的位置重新解压,并运行即可;

当软件环境配置完成后,分别运行pkgs —upgrade、pkgs —update,此时观察仓库可以发现仓库中增加了packages文件夹,里面包含了gd32的lib库;

uartuart

1.2.2 GD32编译链环境搭建

对于任意一款芯片的编译肯定都需要适配交叉编译工具链,一般这部分厂商都有提供,本次需要将交叉编译工具集成到RT-Thread的环境中;

由于在第一章1.1已经下载好了编译器工具链,首先需要选择一个自己想要放置编译链的地方解压工具链;

然后在RT ENV环境下运行下面命令,注意:PTAH=后面跟着的路径需要改为自己的路径,下方指令不可直接复制粘贴使用!下方指令不可直接复制粘贴使用!下方指令不可直接复制粘贴使用!

  •  

set RTT_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的目录下直接执行scons -j128编译即可;

记得一定要在\rt-thread-master\bsp\gd32\risc-v\gd32vw553h-eval,这个目录下执行,其中j后面跟着的数字是指使用几个核进行编译,可根据自己的电脑实际性能调整;

编译完成后既可以看到文件夹中多了rtthread.bin文件,该文件就是后面需要下载到板卡的二进制文件;

1.3 固件烧录(直接按照git中完成)

固件烧录需要使用上述的第一章1.1中下载的GD32AllInOneProgrammer软件,烧录说明位于烧录软件下的Doc文件夹,或在线搜索使用方法,下述是烧录的示例:

uart

需要注意的是使用上述软件烧录时需要将boot1置为高电平,烧录结束后重新设置为低电平,手动调整板载的boot跳线帽。

运行结果:烧录完毕后,使用串口连接自己的串口终端软件,即可通过串口与开发板交互;

1.4. 测评结论

GD32这款板子在环境搭建上相对还是比较简单的,基本可以无脑跟着Git中的指引一步步完成开发环境的搭建,无需开发者到处寻找资料;同时搭建开发环境所需的软件包也比较集中,且容易获取;

2 VSCode软件调试环境搭建

2.1 调试环境搭建

配置VSCode调试环境,首先在第一章中已经下载好了《GD32EmbeddedBuilder》,调试环境配置时需要用到该文件夹中的Tools;

uart

其次在BSP根目录下执行下述命令,生成VSCode工程所需文件。

scons —target=vs

在VSCode安装扩展插件Cortex-Debug,版本v1.4.4。

完成上述工作后,点击运行和调试选项,创建一个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}相关的路径改为自己launch.json的绝对路径/相对路径使用;

上述文件中的部分字段需要根据用户环境进行修改,格式需与示例一致:

“serverpath”:该字段需要改为用户的openocd所在路径,openocd工具位于GD32EmbeddedBuilder工具包中。

“toolchainPrefix”:该字段需修改为用户的工具链所在路径,工具链位于GD32EmbeddedBuilder工具包中。

完成上述配置后即可点击调试选项进行调试,调试时boot管脚均置为低电平即可,调试时同样会进行固件下载。

2.2 调试环境测试

在工程界面点击Cortex Debug,即可进入调节界面;

uart

在调试界面可以查看变量值、暂停后可以查看当前任务的调用栈情况,同时也支持在vscode界面进行断点操作、单步调试、Reset等;

uart

2.3 测评结论

整体来说调试环境搭建非常简单,但是调试界面相对于keil、esp-idf、劳德巴赫等其他环境较为简陋,不过功能完全足够开发者使用;

3 芯片资源 - Uart

芯片采用RISC-V架构处理器,适用于低能耗、小面积的嵌入式应用,具有简单的动态分支预测、指令预取缓冲区和I-cache等多种高效微架构特点。

3.1 Uart分布

uart

根据芯片架构示意图可以看到,芯片共有三路串口,其中UART2挂载在APB2总线上,USART0和UART1挂载在APB1上;这里需要注意我们在使用不同Uart时,需要初始化对应的总线时钟;

3.2 存储

RISC-V处理器采用哈弗架构,可以使用单独的总线来提取指令和加载/存储数据。程序存储器,数据存储器,寄存器和I/O端口组织在同一线性4GB(32位芯片)地址空间内。具体的存储器映射表可以查看《GD32VW55x_用户手册_Rev1.4.pdf》第1.3节;

Uart地址空间

USART0:0x4000 4800 - 0x4000 4BFF

UART1:0x4000 4400 - 0x4000 47FF

UART2:0x4001 1000 - 0x4001 13FF

Ram段

uart

代码段

uartuart

其中我们主要关注和使用较多的就是主存储0x0800 0000 - 0x083F FFFF和0x0BF4 0000 - 0x0BF7 FFFF ROM区间;

根据芯片的引导配置章节可以看出,该芯片将Bootload、secure boot分别放在了ROM段0x0BF40000、0x0BF46000作为起始地址,本地代码一般放在了起始地址0x08000000的主存储区;

3.3 USART 模块内部框图

uart

从模块内部框图可以看出,Uart的读写操作主要都是在读/写缓冲区完成,用户可以通过CPU在串口传输完成后直接读取读缓冲区的内容,或像写缓冲区写入数据,配置控制/状态寄存器及中断完成Uart的读写操作;

从图中同样可以看到该芯片Uart支持DMA直接将缓冲区数据搬入/出;

读写缓冲区分别对应Uart的数据接受/发送寄存器,同时FIFO的控制/状态获取,主要依赖于FIFO控制和状态寄存器;

同时芯片支持硬件流控功能,可通过nCTS和nRTS引脚来实现。通过将USART_CTL2寄存器中RTSEN位置1来使能RTS流控,将USART_CTL2寄存器中CTSEN位置1来使能CTS流控。

uart

GD32vw553 引脚映射关系

uart

测试阶段暂时将PA2/3作为UART1的收发引脚,PA6/7作为UART2的收发引脚;

4 UART功能调试

4.1 测试环境

Demo中仅使能了UART0一路串口,首先需要测试3路串口是否均可使用,可以在RTT的menuconfig中将UART1/2使能;

使能后会出现宏定义相关的报错,此时需要修改drv_usart.c文件,由于GD32vw55x的另外两路都是UART,drv中写死的USART宏并不适用,临时改为UART1/UART2,重新编译可成功编译;

uart

单步调试查看调用栈,可以发现在程序启动后会首先调用board.c中的rt_hw_board_init,另外在rt_hw_board_init中已经初始化了board.c UART数组中的所有串口,我们可以在后续直接测试UART1/2的功能;

uart

RTT中main其实只是一个Task,并不像裸机开发那样时start.s跳转出的首个函数;

uart

我们可以在main task中调用uart API发送/接收数据;

uart

4.3 Tx/Rx 功能测试结果

由下图可以看到UART1/2均可正常使用,且中断可被正常触发;

uart

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

uart

同理可测Uart2的接收功能;

5 Git链接

https://gitee.com/zhang-haitao-1/gd32vw553h-test

6 开发者贡献名单

《兆易创新GD32VW553H-EVAL开发实践指南》包含的内容以及对应的贡献者如下,感谢各位小伙伴的支持与贡献!

uart

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分