GD32vw53h 开发板(Uart功能)测评 - 完整版

文章目录

  • [1. 开发环境搭建](#1. 开发环境搭建)
    • [1.1. 软件下载链接](#1.1. 软件下载链接)
    • [1.2. 环境配置](#1.2. 环境配置)
      • [1.2.1 RT-Thread ENV工具配置 <BR>](#1.2.1 RT-Thread ENV工具配置
        )
      • [1.2.2 GD32编译链环境搭建](#1.2.2 GD32编译链环境搭建)
    • [1.3 固件烧录(直接按照git中完成)](#1.3 固件烧录(直接按照git中完成))
    • [1.4. 测评结论](#1.4. 测评结论)
  • [2. 调试](#2. 调试)
    • [2.1. 调试环境搭建](#2.1. 调试环境搭建)
    • [2.2. 调试环境测试](#2.2. 调试环境测试)
    • [2.3. 测评结论](#2.3. 测评结论)
  • [3. 芯片资源 - Uart](#3. 芯片资源 - Uart)
    • [3.1. Uart分布](#3.1. Uart分布)
    • [3.2. 存储](#3.2. 存储)
    • [3.3. USART 模块内部框图](#3.3. USART 模块内部框图)
  • [4. UART功能调试](#4. UART功能调试)

1. 开发环境搭建

1.1. 软件下载链接

  1. RTThread 环境:https://github.com/RT-Thread/rt-thread/tree/master/bsp/gd32/risc-v/gd32vw553h-eval

    1.1. 方案一:可以使用git工具直接拉取RT-Thread整包:git clone https://github.com/RT-Thread/rt-thread.git

    1.2. 方案二:可以直接从git界面下载zip整包,本地解压;

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

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

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

1.2. 环境配置

1.2.1 RT-Thread ENV工具配置

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

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

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

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


1.2.2 GD32编译链环境搭建

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

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

  3. 然后在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

  4. 运行完成后,在gd32vw553h-eval的目录下直接执行scons -j128编译即可;

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

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

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

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

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

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

1.4. 测评结论

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

2. 调试

2.1. 调试环境搭建

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

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

scons --target=vs

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

  2. 完成上述工作后,点击运行和调试选项,创建一个launch.json配置文件,配置文件示例如下:

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"
        }
    ]
}

这里需要注意如果你的 w o r k s p a c e F o l d e r 工作空间不是当前的路径,可以自行将 {workspaceFolder}工作空间不是当前的路径,可以自行将 workspaceFolder工作空间不是当前的路径,可以自行将{workspaceFolder}相关的路径改为自己launch.json的绝对路径/相对路径使用;

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

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

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

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

2.2. 调试环境测试

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

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

2.3. 测评结论

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

3. 芯片资源 - Uart

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

3.1. 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段

代码段

  1. 其中我们主要关注和使用较多的就是主存储0x0800 0000 - 0x083F FFFF和0x0BF4 0000 - 0x0BF7 FFFF ROM区间;
  2. 根据芯片的引导配置章节可以看出,该芯片将Bootload、secure boot分别放在了ROM段0x0BF40000、0x0BF46000作为起始地址,本地代码一般放在了起始地址0x08000000的主存储区;

3.3. USART 模块内部框图

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

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

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

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

  5. GD32vw553 引脚映射关系

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

4. UART功能调试

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

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

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

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

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

相关推荐
一晌小贪欢3 小时前
用 PyQt5 做一个「批量目录重命名」工具,并打包成带图标的 EXE
开发语言·驱动开发·python·python基础·python小白
KL's pig/猪头/爱心/猪头18 小时前
写一个rv1106的led驱动3-功能函数编写
linux·驱动开发·rv1106
自由的好好干活1 天前
PLX9x5x_PCI_Driver 中断从注册到调用完整流程
驱动开发·ai编程
自由的好好干活2 天前
PLX 9x5x PCI 驱动程序执行流程详解(Qoder生成)
驱动开发·ai编程
viqjeee2 天前
ALSA驱动开发流程
数据结构·驱动开发·b树
自由的好好干活2 天前
win7驱动开发环境搭建
驱动开发
敏叔V5872 天前
AI应用开发框架对比:LangChain vs. Semantic Kernel vs. DSPy 深度解析
人工智能·驱动开发·langchain
似霰3 天前
AIDL Hal 开发笔记4----驱动开发
android·驱动开发·framework·hal
yuanmenghao3 天前
车载Linux 系统问题定位方法论与实战系列 - OOM 与资源耗尽:系统是如何被“慢慢拖死”的
linux·运维·服务器·网络·驱动开发·自动驾驶