GD32VF103:采用RISC-V内核设计的MCU

发布者:WiseThinker最新更新时间:2024-11-18 来源: elecfans关键字:GD32VF103  MCU 手机看文章 扫描二维码
随时随地手机看文章

GD32VF103 开发板

去年九月份的时候 RT-Thread 的 Andy Chen 组织定做了一块 GD32V 开发板,托 Andy 的福,我也搭车买了一块。

这块开发板小巧精美,供电、烧录、调试信息打印都是通过一个 Type-C USB 接口进行,更重要的是它所搭载的主控芯片 GD32VF103 是一颗采用 RISC-V 内核设计的 MCU,这对于对 RISC-V 感兴趣的同学来说,具有十足的吸引力。


GD32VF103 系列 SOC 是兆易创新与芯来科技合作,基于 RISC-V 架构设计的一款面向 IOT 领域的 MCU,主频最高 108 MHZ,根据定位差异,片内 Flash 16~128 KB,片上 SRAM 8~32 KB。

d75edeb8-edce-11ec-ba43-dac502259ad0.png


d7750576-edce-11ec-ba43-dac502259ad0.png

在定制这块板子的时候,陈老大为我们选了 Flash 和 SRAM 容量最大的那颗,所以在选择上大家不用纠结。

更加难能可贵的是兆易开放了完整的用户手册,有 500 多页。这颗芯片采用的 RISC-V 内核是芯来科技设计的,代号 Bumblebee,芯来科技也开放了一份关于 Bumblebee 的指令架构手册,详细描述了这颗芯片采用的 RISC-V 指令集、内核特权架构、中断异常、Timer 以及低功耗相关的机制,总的来说,用这颗芯片来做 RISC-V 相关的研究学习,还是很合适的。

SDK

随开发板配套了一份 RT-Thread Nano SDK,里面还包含有开发板的原理图和简单的使用手册以及代码烧写工具 GigaDevice MCU ISP Programmer ,整套 SDK 可以在 https://realthread.cowtransfer.com/s/8350a2c039b740 下载。

由于当时为了让大家尽快拿到开发板,所以仓促中板子上的 JTAG 口留下了一点小瑕疵——如果要连 JTAG 的话,需要做一点小修改,这个在开发板原理图《GD32VF_EVB_V1_20190901》中有说明。

参考配套文档《GD32VF使用说明_20190919》 即可完成 RT-Thread 代码的编译,然后根据该文档描述的固件烧录方法,按着板子的 BOOT0 按键,再按 RESET 按键使板子进入烧写模式,然后通过GigaDevice MCU ISP Programmer 烧录固件到板子上。

需要注意的是,板子烧录固件是通过板子上的 UART 转 USB 烧写的,烧录时串口波特率需要设置为 256000,系统启动后,RT-Thread 也通过这个 UART 打印调试信息,打印调试信息的波特率为 115200,注意不要搞错了。

另外,同一时刻,串口调试工具和 GigaDevice MCU ISP Programmer 烧录软件,只有一个能占用串口,所以在烧录固件之前要记得关闭串口调试工具,否则有可能会无法正常进入烧录模式。

运行 RT-Thread mainline

如果是做产品的话,使用芯片供应商提供的 SDK 是最靠谱的,如果是学习研究的话,我一向喜欢尝试最新的代码,所以 RT-Thread mainline 是一定要试一试的。

安装 ENV 工具 和 risc-v toolchain

RT-Thread 支持 Windows 和 Linux 两种编译开发环境,这里我打算在 Windows 下编译开发,所以需要先去 RT-Thread 官网下载一个 ENV 工具:https://www.rt-thread.org/page/download.html

工具下载下来后解压到任何你喜欢的地方,但是记住路径里面不要有中文字符,双击 env.exe 可执行程序就可以启动进入命令行模式,还可以通过右键把它添加到 Windows 的开始工具栏。

关于 ENV 的详细使用说明可以参考《Env用户手册》和 《RT-Thread 编程指南》,这两份文档在 RT-Thread 官网都可以下载:https://www.rt-thread.org/document/site/

我发现工具里面默认只带了 arm_gcc 的 toolchain,这里要编译 RISC-V,所以还需要下载 RISC-V 的 toolchain,RISC-V 官方的 toolchain 在 Github 上,地址如下:https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases :

d78a0cbe-edce-11ec-ba43-dac502259ad0.png

选择对应的版本,下载后解压到 ENV 工具的 /tools/gnu_gcc/risc-v/目录下。

d7a549fc-edce-11ec-ba43-dac502259ad0.png

为了能在 ENV 命令行里面认到 riscv-none-embed-gcc 相关的命令,还需要做如下修改:

d7bdbff0-edce-11ec-ba43-dac502259ad0.png

即在 env 的 tools/ConEmu/ConEmu/CmdInit.cmd 文件里重新设置 RTT_EXEC_PATH 环境变量,把原来的 arm_gcc 路径替换成刚才下载的 risc-v toolchain 的安装路径。

我查阅了前面提到的两份RT-Thread 文档和官网论坛上关于 ENV 的常见问题问答贴,没找到关于在 ENV 里面添加 命令的修改说明,所以上面这个修改方法是我尝试出来的,不一定科学,如果有人知道更科学的修改方法,请告诉我。

当然,前面的 SDK 包里也提供了 env 和 risc-v toolchain,但是在这里我想用最新的工具和代码从头开始尝试下整个过程。

修改 RT-Thread mainline 代码

RT-Thread 的官方代码托管在 Github 上,可以通过 git 下载:


git clone https://github.com/RT-Thread/rt-thread.git


其实 RT-Thread mainline 已经支持了 GD32VF103 ,不过对应的开发板是 GigaDevice 官方的 gd32vf103-eval。

d7dd7e58-edce-11ec-ba43-dac502259ad0.png

这块开发板和我手上的开发板有个很重要的区别——这块开发板上面有贴一颗外部高速晶振,而我手上的板子没有贴,芯片是依靠内部的 8M RC 振荡时钟工作的,内部振荡时钟的精度要低一些,但是对于不使用以太网的场合,基本是够用的。

所以在系统时钟配置部分需要做如下修改:

d7f25b34-edce-11ec-ba43-dac502259ad0.png

即把 __SYSTEM_CLOCK_108M_PLL_IRC8M 这个宏打开, __SYSTEM_CLOCK_108M_PLL_HXTAL 这个宏屏蔽。

我们板子上有带 三个 LED、所以流水灯这种经典项目必须加上:

在 bsp/gd32vf103v-eval/applications/main.c 文件的 main 函数中加入如下内容:


rt_kprintf('Hello GD32VF103VBT6! build %s %s ', __DATE__, __TIME__); // gpio clk rcu_periph_clock_enable(RCU_GPIOE); // gpio init gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_3); gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_4); gpio_init(GPIOE, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_5); while (1) { gpio_bit_reset(GPIOE, GPIO_PIN_3);rt_thread_mdelay(300); gpio_bit_reset(GPIOE, GPIO_PIN_4);rt_thread_mdelay(300); gpio_bit_reset(GPIOE, GPIO_PIN_5);rt_thread_mdelay(300); gpio_bit_set(GPIOE, GPIO_PIN_3);rt_thread_mdelay(30); gpio_bit_set(GPIOE, GPIO_PIN_4);rt_thread_mdelay(30); gpio_bit_set(GPIOE, GPIO_PIN_5);rt_thread_mdelay(30); }


修改后的代码我推送到了Gitee 上,如果有同学感兴趣,可以直接 clone 下来 have a try:


git clone https://gitee.com/andyshrk/rt-thread.git


编译

打开 ENV 工具,进入 RT-Thread 源码的 /bsp/gd32vf103v-eva/ 目录下运行 scons 命令进行编译:

d81072d6-edce-11ec-ba43-dac502259ad0.png

编译成功会生成 rtthread.bin 文件,参考提到的文档使用 GigaDevice MCU ISP Programmer 烧写到开发板上。

系统成功启动后在串口中会看到如下打印,并且板子上的 3 个 LED 灯会轮流闪烁:

d837b5f8-edce-11ec-ba43-dac502259ad0.png

这个 warning 似乎是因为某个堆栈设置的太小了,等我后面具体看下代码再处理掉。


关键字:GD32VF103  MCU 引用地址:GD32VF103:采用RISC-V内核设计的MCU

上一篇:【GD32H757Z海棠派开发板使用手册】第十一讲 SPI-SPI NOR FLASH读写实验
下一篇:最后一页

推荐阅读最新更新时间:2024-11-18 10:29

单片机扩展I/O口
单片机扩展I/O口的方式有很多,如采用可编程通用并行接口8255,采用CPLD技术等,本用74HC238+74HC573进行扩展,电路比较简单,编程方便。电路如图所示。 74HC238译码器可接受3位二进制加权地址输入(A0, A1和A2),并当使能时,提供8个互斥的高有效输出(Y0至Y7)。74HC238特有3个使能输入端:两个低有效(E1和E2)和一个高有效(E3)。除非E1和E2置低且E3置高,否则74HC138将保持所有输出为高。74HC238的真值表如表所示。 E1 E2 E3 A0 A1 A2 Y0 Y1 Y2 Y3 Y4 Y5 Y6
[单片机]
基于MSP430单片机的多功能复费率三相电能表
随着国民经济的发展,企业和个人的用电量大幅提高。现在用户的用电时间比较集中,以致 电力 系统的负荷曲线变化很大。为了调整负荷曲线,充分利用发、供电设备容量,需要实现电价分时计费。复费率电能表就是按照高峰、低谷时间分别记录用电量,以便按不同的价格收取电费,鼓励用户主动采取避峰填谷的措施,以利于供电、用电双方。同时具有GPRS远程抄表、微机集中抄表、停电抄表、防盗电、计量有功无功电能和测量需量等功能的多功能电表可以代替几块表的功能,既节约了资金又减少了设备占用的面积,而且还降低了抄表的成本。本文基于TI公司的MSP430F449高性能 单片机 给出了一个多功能复费率三相电能表的解决方案。 2 系统总体结构和功能说明 整个系统分为两
[电源管理]
松翰单片机内部8位分辨率ADC
;目的学习内部8位分辨率ADC及数据处理 ;完整代码下载: http://www.51hei.com/f/shrad.rar CHIP SN8F27E65 //{{SONIX_CODE_OPTION .Code_Option WDT_CLK Flosc/4 .Code_Option Reset_Pin P04 .Code_Option LVD LVD_Max ; 3.3V Reset .Code_Option Watch_Dog Disable ;关闭看门狗 .Code_Option Low_Fcpu Flosc/1 .Code_Option High_Clk IHRC_16M ; Internal 16M RC
[单片机]
特斯拉推出MCU升级 中控显示屏响应速度提升1倍
据外媒报道,随着近日车载媒体计算机的升级完成,许多特斯拉Model S及Model X的用户发现,其中央显示屏的响应速度得到了大幅提升。为此,许多特斯拉用户也在考虑实现车辆升级。 如今,特斯拉首席执行官埃隆·马斯克表示,公司有能力提升硬件设备的性能,但车主们似乎还在观望,在新款车载软件完成升级后,或许会带来性能的提升。 昨日(2018年3月27日),业内人士就新、旧两版的车载微控制单元(MCU)进行比较控制测试(controlled comparison test),结果表明新款硬件为用户带来了全新的体验,其响应速度是旧版的2倍。这使得中控屏的响应速度与Model 3处于相似水平,后者也配备了新款媒体计算机。 马斯克在推特上
[汽车电子]
瑞萨电子面向下一代电子电气架构中不断发展的小型应用
瑞萨电子面向下一代电子电气架构中不断发展的小型应用,推出全新车用执行器和传感器控制MCU 16位RL78/F24和RL78/F23带来增强的连接性、网络安全与功能安全性能 2021 年 12 月 16 日,日本东京讯 - 全球半导体解决方案供应商瑞萨电子集团(TSE:6723)今日宣布,推出两款全新微控制器(MCU)——RL78/F24和RL78/F23,专为汽车执行器和传感器控制应用而设计,支持下一代电子电气(E/E)架构中不断发展的边缘应用。凭借全新的RL78/F24和RL78/F23,瑞萨扩展了RL78低功耗16位MCU产品家族,加强了瑞萨广泛的汽车电子产品阵营,为客户提供从执行器到区域控制等领域的高可靠性、高性能
[嵌入式]
瑞萨电子面向下一代电子电气架构中不断发展的小型应用
基于C8051F040单片机的承载平台平衡调整系统
引言 随着现代科技不断发展,人们对于各种基座平台水平精度的要求也越来越高,而现有的一些光学仪器已不能满足对一些工程、建筑、实验室和军舰基座平台进行水平度检测,针对这一现实问题,采用新华龙公司的C8051F040作为主控制器,设计出一个具有承重、倾角调节及液晶显示、语音播报等功能的高精度电子承载平台平衡调整系统。电子承载平台是一种承重、测量的设备,其工作原理是通过倾角传感器将作用在承载平台上的倾角大小转换为相应的电信号,以数字量的形式在液晶显示屏上显示出来,并且系统能实现自动调平。 系统采用C8051F040作为控制核心,利用高精密倾角传感器将倾角大小经液晶屏显示、语音播报输出,并能通过外部设定自动调整平台的水平和倾斜。如何选择
[单片机]
基于C8051F040<font color='red'>单片机</font>的承载平台平衡调整系统
PIC单片机内部上电延时复位(POR)的设计思路及电路图设计
1.设计思路   在单片机初始加电时,复位系统中首先投入工作、发挥作用的是VDD上升沿检测电路。在加电过程中,由于电源回路中的滤波电容的存在,单片机的电源电压VDD的值是逐渐上升的。   当VDD上升到-定值(一般为1.6~1.8V)时,会产生一个很窄的复位脉冲(正脉冲)。该复位脉冲一方面将复位锁存器的一端设置为低电平,另一方面利用本身的下降沿启动定时器PWRT开始工作,进行72ms的延时。   该延时时间一到,便启动定时器OST开始工作,再进行1024TOSC的延时。与内部上电延时复位功能相关的硬件等效电路如图1所示。上电延时复位的延时时间的长短与振荡器的振荡方式、定时器OST是否关闭等因素有关,如表1所示。   图
[单片机]
PIC<font color='red'>单片机</font>内部上电延时复位(POR)的设计思路及电路图设计
英飞凌与马瑞利合作 利用AURIX™ TC4x MCU系列推动区域控制单元创新
11月8日,英飞凌科技股份公司(Infineon Technologies AG)与汽车行业移动出行技术供应商马瑞利(Marelli)合作开发先进的E/E架构解决方案。此次合作结合了两家公司的汽车专业知识,利用英飞凌最新的AURIX™ TC4x微控制器开发创新的区域控制单元(ZCU)。英飞凌的AURIX TC4x系列专为新型E/E架构而设计,扩展了汽车微控制器单元(MCU)的功能,以实现安全可靠的处理。该MCU系列支持多Gbit以太网和PCI Express等高速通信接口,以及CAN-XL和10BASE-T1S等新接口。这为汽车制造商应用下一代E/E架构提供了出色的性能、数据吞吐量和灵活性。 图片来源:英飞凌 马瑞利电子
[汽车电子]
英飞凌与马瑞利合作 利用AURIX™ TC4x <font color='red'>MCU</font>系列推动区域控制单元创新
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved