1 前言
gd32VF103是GD与芯来科技联合开发的一款RISC-V架构
芯片,最近申请到一块
兆易创新的GD32VF103R-START
开发板,下面将环境搭建需要的步骤和注意事项总结一下共享给大家,希望大家可以少走弯路。
1.1 RISK-V简介
RISC-V(发音为“risk-five”)是一种开放的 ISA,可供学术界和工业界免费使用。它构建并改进了原始的精简指令集 (RISC) 架构。
RISC-V由美国加州大学伯克利分校的KrsteAsanovic教授、Andrew Waterman和YunsupLee等开发人员于2010年发明。
• x86统治PC和服务器领域
• ARM通知移动手持领域,同时向PC和服务器领域进军
• ARM在嵌入式领域的绝对优势
之所以发明一套新的指令集架构,而不是使用成熟的x86或者arm架构,是因为这些架构经过多年的发展变得极为复杂和冗繁,并且存在着高昂的专利和架构授权问题。
RISC-V最大的优点:开源免费
一款指令集架构(ISA)最终能否取得成功,很大程度上取决于软件生态环境。RISC-V已经开发出了完整的软件工具链以及若干开源的处理器实例,应用RISC-V,你也可以设计自己的处理器
RISC-V架构的设计哲学:
1、简单可靠;
2、架构篇幅:小;
3、模块化的架构,RISC-V是一个模块化的架构,不仅短小精悍,其不同的部分还能以模块化的方式组织在一起,从而试图通过一套统一的架构满足各种不同的应用,这是x86和ARM不具备的。
4、RISC-V 是一种读入-写出架构,意味着三件事:它的算术指令只对寄存器进行操作,只有加载和存储指令才能将数据写入和读出内存,数据必须首先读入到一个寄存器,然后才能对其进行操作。
目前的"RISC-V架构文档"分为“指令集文档”和“特权架构文档”。篇幅均为100多页,RISC-V基金会网站,免费下载,基本指令数目仅有40多条,加上其他的模块化扩展指令总共几十条指令。
1.2 RISC-V与ARM
RISC-V 是开源的,而 ARM 不是。这意味着 RISC-V 是免许可和免版税的。
RISC-V 允许用户免费使用新指令扩展 ISA,并创新 RISC-V 处理器的微架构,但 ARM 要求用户支付版税。这让RISC-V很快受到了很多厂商的欢迎。
ARM被认为比RISC-V更复杂。另一个原因是,与笔记本电脑、台式机和服务器相比,ARM 对
手机的优化过度。
RISC-V 并未针对某一特定实现进行过度优化。它适用于所有计算系统,从微控制器到超级计算机。
1.3 GD32VF103简介
GD32VF103系列器件是基于Nuclei Bumblebee处理器的32位通用微控制器, 其中Bumblebee
处理器是基于RSIC-V架构指令集开发而来,以下简称RISC-V处理器。 RISC-V处理器包括三条
AHB总线分别称为I-Code总线、 D-Code总线和系统总线。 RISC-V处理器的所有存储访问, 根
据不同的目的和目标存储空间,都会在AHB总线上执行。存储器的组织采用了哈佛结构,预先
定义的存储器映射和高达4GB的存储空间,充分保证了系统的灵活性和可扩展性。
Bumblebee 处理器内核(Processor Core),简称 Bumblebee 内核,是由芯来科技(NucleiSystem Technology)联合兆易创新(Gigadevice)针对其面向 IoT 或其他超低功耗场景的通用 MCU产品定制的一款商用 RISC-V 处理器内核,专用于型号为 GD32VF103 的 MCU 产品。
• 内存:内置16KB~128KB Flash、6KB~32KB SRAM
• 工作电压:2.6~3.6V
• 外设资源:
timer(高级16位定时器,通用16位定时器)、U(S)ART、I2C、SPI/I2S、CAN、USBFS、ADC(16路外部通道)、DAC、EXMC、GPIO。
2 开发环境搭建
Ide软件:NucleiStudio_IDE
下载程序的软件:NucleiStudio_IDE(板载GD_link不可以使用GD_Link_Programmer)
2.1 NucleiStudio_IDE 下载
1、Nuclei官网
2、所有资料都可以从github下载,版本不一定是最新的
https://github.com/orgs/riscv-mcu/repositories
3、GD官网资料汇总页面
http://www.gd32mcu.com/cn/download/0?kw=GD32VF1
2.2 例程demo下载
1、官网demo
2、Nuclei提供的GD32VF103C_START的demo,需要用到Running_LED;
https://github.com/riscv-mcu/Nuclei-Studio_IDE-Project-Package
2.3 配置文件下载
下载gd32vf103_freertos-master.zip或者GD32VF103_Demo_Suites-master,需要用到其中的openocd_gdlink.cfg
3 导入DEMO工程3.1 启动Nuclei Studio
1、直接双击NucleiStudio_IDE文件包中NucleiStudio文件夹下面的可执行文件,即可启动Nuclei Studio;
2、第一次启动NucleiStudio后,将会弹出对话框要求设置Workspace目录,该目录将用于放置后续创建项目的文件夹,修改一下路径;
3、设置好Workspace目录之后,确保Workspace的路径中没有中文,单击“Launch”按钮,将会启动Nuclei Studio;
3.2 导入Running_Led工程
1、File—>Import
2、启动NucleiStudioE后,在菜单栏选择“File->Import”,出现如图对话框,选择“General”菜单下“Exit Project intoWorkspace”,设置导入方式,然后点击按钮“Next”。
3、点击“Browse”按钮选择Running_Led中工程路径
3.3 编译
1、修改替换配置文件,将GD32VF103_Demo_Suites-master中的openocd_gdlink.cfg复制过来替换Running_Led中原来的配置文件。
2、点击小锤子图标,或是在工程上右击,点击cleanproject,再点击build project,注意
3、编译后会发现problem下有两个错误,console下显示是没有错误的,此错误不影响程序运行,如果想去掉可以如下操作
此时,编译完成。
4 代码修改及工程编译
4.1 修改开发板宏
4.2 下载
将u***先连接到开发板的GD-Link接口,再如下图所示,点击debug下载程序。
4.3 修改初始化时钟后重新下载
程序下载后发现LED闪动特别慢,根本不是我们设置的时钟频率,这时候需要修改时钟初始化,如下图所示,在start.s里添加call _init。
到底需不需要call _init,确实是没有找到调用时钟初始化的地方,但是专门查看了GD官方的demo,也是没有call的,如果没用时钟配置是不能运行的,具体在哪里调用的后续再在工程中查找,调用call_init之后,时钟频率就对了。
5 参考文档
1、 https://blog.csdn.net/qq_41876038/article/details/120004172
2、 https://zhuanlan.zhihu.com/p/389626435
3、 Nuclei_Studio_User_Guide.pdf
4、GD32VF103Datasheet
5、GD32VF103 UserManual