[bsp/gd32]Optimize GD32 bsp architecture (#6108)
* [bsp/gd32]Optimize GD32 bsp architecture
@@ -38,15 +38,17 @@ jobs:
|
||||
- {RTT_BSP: "at91/at91sam9260", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "allwinner_tina", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "ft32/ft32f072xb-starter", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32103c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32105c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32105r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32107c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32205r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32305r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32407v-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/gd32450z-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32103c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32105c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32105r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32107c-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32205r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32207i-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32305r-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32307e-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32407v-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32/arm/gd32450z-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32e230k-start", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
- {RTT_BSP: "gd32vf103v-eval", RTT_TOOL_CHAIN: "sourcery-riscv-none-embed"}
|
||||
- {RTT_BSP: "gd32303e-eval", RTT_TOOL_CHAIN: "sourcery-arm"}
|
||||
|
||||
@@ -1,30 +1,29 @@
|
||||
|
||||
# GD32 BSP 说明
|
||||
# GD32 系列BSP 说明
|
||||
|
||||
GD32 系列 BSP 目前支持情况如下表所示:
|
||||
|
||||
| **BSP 文件夹名称** | **开发板名称** |
|
||||
|:------------------------- |:-------------------------- |
|
||||
| **ARM 系列** | |
|
||||
| **F1 系列** | |
|
||||
| [gd32103c-eval](gd32103c-eval) | 兆易创新 官方 GD32103C-EVAL 开发板 |
|
||||
| [gd32105c-eval](gd32105c-eval) | 兆易创新 官方 GD32105C-EVAL 开发板 |
|
||||
| [gd32105r-start](gd32105r-start) | 兆易创新 官方 GD32105R-START 开发板 |
|
||||
| [gd32107c-eval](gd32107c-eval) | 兆易创新 官方 GD32107C-EVAL 开发板 |
|
||||
| [gd32103c-eval](arm/gd32103c-eval) | 兆易创新 官方 GD32103C-EVAL 开发板 |
|
||||
| [gd32105c-eval](arm/gd32105c-eval) | 兆易创新 官方 GD32105C-EVAL 开发板 |
|
||||
| [gd32105r-start](arm/gd32105r-start) | 兆易创新 官方 GD32105R-START 开发板 |
|
||||
| [gd32107c-eval](arm/gd32107c-eval) | 兆易创新 官方 GD32107C-EVAL 开发板 |
|
||||
| **F2 系列** | |
|
||||
| [gd32205r-start](gd32205r-start) | 兆易创新 官方 GD32205R-START 开发板 |
|
||||
| [gd32205r-start](arm/gd32205r-start) | 兆易创新 官方 GD32205R-START 开发板 |
|
||||
| [gd32207i-eval](arm/gd32207i-eval) | 兆易创新 官方 GD32207I-EVAL 开发板 |
|
||||
| **F3 系列** | |
|
||||
| [gd32303e-eval](gd32303e-eval) | 兆易创新 官方 GD32303E-EVAL 开发板 |
|
||||
| [gd32305r-start](gd32305r-start) | 兆易创新 官方 GD32305R-START 开发板 |
|
||||
| [gd32303e-eval](arm/gd32303e-eval) | 兆易创新 官方 GD32303E-EVAL 开发板 |
|
||||
| [gd32305r-start](arm/gd32305r-start) | 兆易创新 官方 GD32305R-START 开发板 |
|
||||
| [gd32307e-start](arm/gd32307e-start) | 兆易创新 官方 GD32307E-START 开发板 |
|
||||
| **F4 系列** | |
|
||||
| [gd32407v-start](gd32407v-start) | 兆易创新 官方 GD32407V-START 开发板 |
|
||||
| [gd32450z-eval](gd32450z-eval) | 兆易创新 官方 GD32450Z-EVAL 开发板 |
|
||||
|
||||
可以通过阅读相应 BSP 下的 README 来快速上手,如果想要使用 BSP 更多功能可参考 docs 文件夹下提供的说明文档,如下表所示:
|
||||
|
||||
| **BSP 使用教程** | **简介** |
|
||||
|:-------------------- |:------------------------------------------------- |
|
||||
| [外设驱动使用教程](docs/GD32系列BSP外设驱动使用教程.md) | 讲解 BSP 上更多外设驱动的使用方法 |
|
||||
| [外设驱动介绍与应用](docs/GD32系列驱动介绍.md) | 讲解 GD32 系列 BSP 驱动的支持情况,以及如何利用驱动框架开发应用程序 |
|
||||
| **BSP 制作与提交** | **简介** |
|
||||
| [BSP 制作教程](docs/GD32系列BSP制作教程.md) | 讲解 GD32 系列 BSP 的制作方法 |
|
||||
| [gd32407v-start](arm/gd32407v-start) | 兆易创新 官方 GD32407V-START 开发板 |
|
||||
| [gd32450z-eval](arm/gd32450z-eval) | 兆易创新 官方 GD32450Z-EVAL 开发板 |
|
||||
| | |
|
||||
| **RISC-V 系列** | |
|
||||
| **VF1 系列** | |
|
||||
| [gd32vf103v-eval](risc-v/gd32vf103v-eval) | 兆易创新 官方 GGD32VF103V-EVAL 开发板 |
|
||||
| [gd32vf103r-start](risc-v/gd32vf103r-start) | 兆易创新 官方 GD32VF103R-START 开发板 |
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
|
||||
# GD32 ARM 系列BSP 说明
|
||||
|
||||
GD32 ARM 系列 BSP 目前支持情况如下表所示:
|
||||
|
||||
| **BSP 文件夹名称** | **开发板名称** |
|
||||
|:------------------------- |:-------------------------- |
|
||||
| **F1 系列** | |
|
||||
| [gd32103c-eval](gd32103c-eval) | 兆易创新 官方 GD32103C-EVAL 开发板 |
|
||||
| [gd32105c-eval](gd32105c-eval) | 兆易创新 官方 GD32105C-EVAL 开发板 |
|
||||
| [gd32105r-start](gd32105r-start) | 兆易创新 官方 GD32105R-START 开发板 |
|
||||
| [gd32107c-eval](gd32107c-eval) | 兆易创新 官方 GD32107C-EVAL 开发板 |
|
||||
| **F2 系列** | |
|
||||
| [gd32205r-start](gd32205r-start) | 兆易创新 官方 GD32205R-START 开发板 |
|
||||
| [gd32207i-eval](gd32207i-eval) | 兆易创新 官方 GD32207I-EVAL 开发板 |
|
||||
| **F3 系列** | |
|
||||
| [gd32303e-eval](gd32303e-eval) | 兆易创新 官方 GD32303E-EVAL 开发板 |
|
||||
| [gd32305r-start](gd32305r-start) | 兆易创新 官方 GD32305R-START 开发板 |
|
||||
| [gd32307e-start](gd32307e-start) | 兆易创新 官方 GD32307E-START 开发板 |
|
||||
| **F4 系列** | |
|
||||
| [gd32407v-start](gd32407v-start) | 兆易创新 官方 GD32407V-START 开发板 |
|
||||
| [gd32450z-eval](gd32450z-eval) | 兆易创新 官方 GD32450Z-EVAL 开发板 |
|
||||
|
||||
可以通过阅读相应 BSP 下的 README 来快速上手,如果想要使用 BSP 更多功能可参考 docs 文件夹下提供的说明文档,如下表所示:
|
||||
|
||||
| **BSP 使用教程** | **简介** |
|
||||
|:-------------------- |:------------------------------------------------- |
|
||||
| [外设驱动使用教程](docs/GD32_ARM系列BSP外设驱动使用教程.md) | 讲解 GD32 ARM 系列BSP 上更多外设驱动的使用方法 |
|
||||
| [外设驱动介绍与应用](docs/GD32_ARM系列驱动介绍.md) | 讲解 GD32 ARM系列 BSP 驱动的支持情况,以及如何利用驱动框架开发应用程序 |
|
||||
| **BSP 制作与提交** | **简介** |
|
||||
| [BSP 制作教程](docs/GD32_ARM系列BSP制作教程.md) | 讲解 GD32 ARM系列 BSP 的制作方法 |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GD32 系列 BSP 制作教程
|
||||
# GD32 ARM系列 BSP 制作教程
|
||||
|
||||
## 1. BSP 框架介绍
|
||||
|
||||
@@ -6,13 +6,13 @@ BSP 框架结构如下图所示:
|
||||
|
||||

|
||||
|
||||
GD32的BSP架构主要分为三个部分:libraries、tools和具体的Boards,其中libraries包含了GD32的通用库,包括每个系列的Firmware Library以及适配RT-Thread的drivers;tools是生成工程的Python脚本工具;另外就是Boards文件,当然这里的Boards有很多,我这里值列举了GD32407V-START。
|
||||
GD32 ARM系列BSP架构主要分为三个部分:libraries、tools和具体的Boards,其中libraries包含了GD32的通用库,包括每个系列的Firmware Library以及适配RT-Thread的drivers;tools是生成工程的Python脚本工具;另外就是Boards文件,当然这里的Boards有很多,我这里值列举了GD32407V-START。
|
||||
|
||||
## 2. 知识准备
|
||||
|
||||
制作一个 BSP 的过程就是构建一个新系统的过程,因此想要制作出好用的 BSP,要对 RT-Thread 系统的构建过程有一定了解,需要的知识准备如下所示:
|
||||
|
||||
- 掌握 GD32 系列 BSP 的使用方法
|
||||
- 掌握 GD32 ARM系列 BSP 的使用方法
|
||||
|
||||
了解 BSP 的使用方法,可以阅读 [BSP 说明文档](../README.md) 中使用教程表格内的文档。
|
||||
|
||||
@@ -68,59 +68,7 @@ GD32的BSP架构主要分为三个部分:libraries、tools和具体的Boards
|
||||
|
||||
**2.修改BSP构建脚本**
|
||||
|
||||
bsp/gd32/gd32407v-start/Kconfig修改后的内容如下:
|
||||
|
||||
```config
|
||||
mainmenu "RT-Thread Configuration"
|
||||
|
||||
config BSP_DIR
|
||||
string
|
||||
option env="BSP_ROOT"
|
||||
default "."
|
||||
|
||||
config RTT_DIR
|
||||
string
|
||||
option env="RTT_ROOT"
|
||||
default "../../.."
|
||||
|
||||
config PKGS_DIR
|
||||
string
|
||||
option env="PKGS_ROOT"
|
||||
default "packages"
|
||||
|
||||
source "$RTT_DIR/Kconfig"
|
||||
source "$PKGS_DIR/Kconfig"
|
||||
source "../libraries/Kconfig"
|
||||
source "board/Kconfig"
|
||||
```
|
||||
|
||||
该文件是获取所有路径下的Kconfig。
|
||||
|
||||
bsp/gd32/gd32407v-start/SConscript修改后的内容如下:
|
||||
|
||||
```python
|
||||
# for module compiling
|
||||
|
||||
import os
|
||||
Import('RTT_ROOT')
|
||||
|
||||
from building import *
|
||||
|
||||
cwd = GetCurrentDir()
|
||||
objs = []
|
||||
list = os.listdir(cwd)
|
||||
|
||||
for d in list:
|
||||
path = os.path.join(cwd, d)
|
||||
if os.path.isfile(os.path.join(path, 'SConscript')):
|
||||
objs = objs + SConscript(os.path.join(d, 'SConscript'))
|
||||
|
||||
Return('objs')
|
||||
```
|
||||
|
||||
该文件是用于遍历当前目录的所有文件夹。
|
||||
|
||||
bsp/gd32/gd32407v-start/SConstruct修改后的内容如下:
|
||||
bsp/gd32/arm/gd32407v-start/SConstruct修改后的内容如下:
|
||||
|
||||
```python
|
||||
import os
|
||||
@@ -130,7 +78,7 @@ import rtconfig
|
||||
if os.getenv('RTT_ROOT'):
|
||||
RTT_ROOT = os.getenv('RTT_ROOT')
|
||||
else:
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../..')
|
||||
|
||||
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
|
||||
try:
|
||||
@@ -151,7 +99,7 @@ env = Environment(tools = ['mingw'],
|
||||
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
|
||||
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
|
||||
|
||||
if rtconfig.PLATFORM == 'iccarm':
|
||||
if rtconfig.PLATFORM == 'iar':
|
||||
env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
|
||||
env.Replace(ARFLAGS = [''])
|
||||
env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map')
|
||||
@@ -185,35 +133,9 @@ objs.extend(SConscript(os.path.join(libraries_path_prefix, 'Drivers', 'SConscrip
|
||||
DoBuilding(TARGET, objs)
|
||||
```
|
||||
|
||||
该文件用于链接所有的依赖文件,并调用make进行编译。
|
||||
该文件用于链接所有的依赖文件,主要修改固件库路径,并调用make进行编译。
|
||||
|
||||
**3.修改开发环境信息**
|
||||
bsp/gd32/gd32407v-start/cconfig.h修改后的内容如下:
|
||||
|
||||
```c
|
||||
#ifndef CCONFIG_H__
|
||||
#define CCONFIG_H__
|
||||
/* Automatically generated file; DO NOT EDIT. */
|
||||
/* compiler configure file for RT-Thread in GCC*/
|
||||
|
||||
#define HAVE_NEWLIB_H 1
|
||||
#define LIBC_VERSION "newlib 2.4.0"
|
||||
|
||||
#define HAVE_SYS_SIGNAL_H 1
|
||||
#define HAVE_SYS_SELECT_H 1
|
||||
#define HAVE_PTHREAD_H 1
|
||||
|
||||
#define HAVE_FDSET 1
|
||||
#define HAVE_SIGACTION 1
|
||||
#define GCC_VERSION_STR "5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496]"
|
||||
#define STDC "2011"
|
||||
|
||||
#endif
|
||||
```
|
||||
|
||||
该文件是是编译BSP的环境信息,需根据实际修改。
|
||||
|
||||
**4.修改KEIL的模板工程**
|
||||
**3.修改KEIL的模板工程**
|
||||
|
||||
双击:template.uvprojx即可修改模板工程。
|
||||
|
||||
@@ -237,9 +159,9 @@ bsp/gd32/gd32407v-start/cconfig.h修改后的内容如下:
|
||||
|
||||

|
||||
|
||||
**5.修改board文件夹**
|
||||
**4.修改board文件夹**
|
||||
|
||||
(1) 修改bsp/gd32/gd32407v-start/board/linker_scripts/link.icf
|
||||
(1) 修改bsp/gd32/arm/gd32407v-start/board/linker_scripts/link.icf
|
||||
|
||||
修改后的内容如下:
|
||||
|
||||
@@ -288,7 +210,7 @@ place in RAM1_region { section .sram };
|
||||
|
||||
该文件是IAR编译的链接脚本,根据《GD32F407xx_Datasheet_Rev2.1》可知,GD32F407VKT6的flash大小为3072KB,SRAM大小为192KB,因此需要设置ROM和RAM的起始地址和堆栈大小等。
|
||||
|
||||
(2) 修改bsp/gd32/gd32407v-start/board/linker_scripts/link.ld
|
||||
(2) 修改bsp/gd32/arm/gd32407v-start/board/linker_scripts/link.ld
|
||||
|
||||
修改后的内容如下:
|
||||
|
||||
@@ -434,7 +356,7 @@ SECTIONS
|
||||
|
||||
该文件是GCC编译的链接脚本,根据《GD32F407xx_Datasheet_Rev2.1》可知,GD32F407VKT6的flash大小为3072KB,SRAM大小为192KB,因此CODE和DATA 的LENGTH分别设置为3072KB和192KB,其他芯片类似,但其实地址都是一样的。
|
||||
|
||||
(3) 修改bsp/gd32/gd32407v-start/board/linker_scripts/link.sct
|
||||
(3) 修改bsp/gd32/arm/gd32407v-start/board/linker_scripts/link.sct
|
||||
修改后的内容如下:
|
||||
|
||||
```
|
||||
@@ -456,7 +378,7 @@ LR_IROM1 0x08000000 0x00300000 { ; load region size_region
|
||||
|
||||
该文件是MDK的连接脚本,根据《GD32F407xx_Datasheet_Rev2.1》手册,因此需要将 LR_IROM1 和 ER_IROM1 的参数设置为 0x00300000;RAM 的大小为192k,因此需要将 RW_IRAM1 的参数设置为 0x00030000。
|
||||
|
||||
(4) 修改bsp/gd32/gd32407v-start/board/board.h文件
|
||||
(4) 修改bsp/gd32/arm/gd32407v-start/board/board.h文件
|
||||
|
||||
修改后内容如下:
|
||||
|
||||
@@ -502,7 +424,7 @@ extern int __bss_end;
|
||||
|
||||
值得注意的是,不同的编译器规定的堆栈内存的起始地址 HEAP_BEGIN 和结束地址 HEAP_END。这里 HEAP_BEGIN 和 HEAP_END 的值需要和前面的链接脚本是一致的,需要结合实际去修改。
|
||||
|
||||
(5) 修改bsp/gd32/gd32407v-start/board/board.c文件
|
||||
(5) 修改bsp/gd32/arm/gd32407v-start/board/board.c文件
|
||||
|
||||
修改后的文件如下:
|
||||
|
||||
@@ -585,7 +507,7 @@ void SystemClock_Config(void)
|
||||
|
||||
该文件重点关注的就是SystemClock_Config配置,SystemCoreClock的定义在system_gd32f4xx.c中定义的。
|
||||
|
||||
(6) 修改bsp/gd32/gd32407v-start/board/Kconfig文件
|
||||
(6) 修改bsp/gd32/arm/gd32407v-start/board/Kconfig文件
|
||||
修改后内容如下:
|
||||
|
||||
```config
|
||||
@@ -676,7 +598,7 @@ endmenu
|
||||
|
||||
这个文件就是配置板子驱动的,这里可根据实际需求添加。
|
||||
|
||||
(7) 修改bsp/gd32/gd32407v-start/board/SConscript文件
|
||||
(7) 修改bsp/gd32/arm/gd32407v-start/board/SConscript文件
|
||||
|
||||
修改后内容如下:
|
||||
|
||||
@@ -700,7 +622,7 @@ startup_path_prefix = SDK_LIB
|
||||
|
||||
if rtconfig.CROSS_TOOL == 'gcc':
|
||||
src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/GCC/startup_gd32f4xx.s']
|
||||
elif rtconfig.PLATFORM in ['armcc', 'armclang']:
|
||||
elif rtconfig.CROSS_TOOL == 'keil':
|
||||
src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/ARM/startup_gd32f4xx.s']
|
||||
elif rtconfig.CROSS_TOOL == 'iar':
|
||||
src += [startup_path_prefix + '/GD32F4xx_Firmware_Library/CMSIS/GD/GD32F4xx/Source/IAR/startup_gd32f4xx.s']
|
||||
@@ -715,7 +637,7 @@ Return('group')
|
||||
|
||||
到这里,基本所有的依赖脚本都配置完成了,接下来将通过menuconfig配置工程。
|
||||
|
||||
**6.menuconfig配置**
|
||||
**5.menuconfig配置**
|
||||
关闭套接字抽象层。
|
||||
|
||||

|
||||
@@ -730,13 +652,13 @@ Return('group')
|
||||
|
||||
GD32407V-START板载没有以太网,因此这里主要是关闭网络相关的内容,当然GD32407V-START的资源丰富,不关这些其实也不影响,如果是其他MCU,根据实际需求自行修改吧。
|
||||
|
||||
**7.驱动修改**
|
||||
**6.驱动修改**
|
||||
一个基本的BSP中,串口是必不可少的,所以还需要编写串口驱动,这里使用的串口2作为调试串口。
|
||||
板子上还有LED灯,主要要编写GPIO驱动即可。
|
||||
|
||||
关于串口和LED的驱动可以查看源码,这里就不贴出来了。
|
||||
|
||||
**8.应用开发**
|
||||
**7.应用开发**
|
||||
|
||||
笔者在applications的main.c中添加LED的应用代码,
|
||||
|
||||
@@ -770,7 +692,7 @@ int main(void)
|
||||
|
||||
当然,这需要GPIO驱动的支持。
|
||||
|
||||
**9.使用ENV编译工程**
|
||||
**8.使用ENV编译工程**
|
||||
在env中执行:scons
|
||||
|
||||

|
||||
@@ -779,7 +701,7 @@ int main(void)
|
||||
|
||||

|
||||
|
||||
**10.使用env生成MDK工程**
|
||||
**9.使用env生成MDK工程**
|
||||
在env中执行:scons --target=mdk5
|
||||
|
||||

|
||||
@@ -798,7 +720,7 @@ int main(void)
|
||||
|
||||
1.第一次使用GD-link插入电脑后,会自动安装驱动。
|
||||
|
||||
在Options for Target -> Debug 中选择“CMSIS-DAP Debugger”,部分客户反馈找不到这一驱动器选项,那是因为MDK版本过低,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAP Debugger选项。
|
||||
在Options for Target -> Debug 中选择“CMSIS-DAP Debugger”,值得注意的是,只有Keil4.74以上的版本和Keil5才支持CMSIS-DAP Debugger选项。
|
||||
|
||||

|
||||
|
||||
@@ -885,7 +807,7 @@ GD32 BSP 的制作规范主要分为 3 个方面:工程配置,ENV 配置和
|
||||
|
||||
### 4.2 BSP 提交规范
|
||||
|
||||
- 提交前请认真修改 BSP 的 README.md 文件,README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档[《GD32系列驱动介绍》](./GD32系列驱动介绍.md)了解驱动分类。
|
||||
- 提交前请认真修改 BSP 的 README.md 文件,README.md 文件的外设支持表单只填写 BSP 支持的外设,可参考其他 BSP 填写。查看文档[《GD32 ARM系列驱动介绍》](./GD32 ARM系列驱动介绍.md)了解驱动分类。
|
||||
- 提交 BSP 分为 2 个阶段提交:
|
||||
- 第一阶段:基础 BSP 包括串口驱动和 GPIO 驱动,能运行 FinSH 控制台。完成 MDK4、MDK5 、IAR 和 GCC 编译器支持,如果芯片不支持某款编译器(比如MDK4)可以不用做。 BSP 的 README.md 文件需要填写第二阶段要完成的驱动。
|
||||
- 第二阶段:完成板载外设驱动支持,所有板载外设使用 menuconfig 配置后就能直接使用。若开发板没有板载外设,则此阶段可以不用完成。不同的驱动要分开提交,方便 review 和合并。
|
||||
@@ -1,4 +1,4 @@
|
||||
# GD32系列BSP外设驱动使用教程
|
||||
# GD32 ARM系列BSP外设驱动使用教程
|
||||
|
||||
## 简介
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
### 1)打开配置工具
|
||||
|
||||
在目录 `rt-thread\bsp\gd32\gd32407v-start` 下打开 menuconfig 配置界面。
|
||||
在目录 `rt-thread\bsp\gd32\arm\gd32407v-start` 下打开 menuconfig 配置界面。
|
||||
|
||||

|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
### 6)生成 MDK5 工程
|
||||
|
||||
输入命令 `scons --target=mdk5 -s` 重新生成 MDK5 的工程。
|
||||
输入命令 `scons --target=mdk5` 重新生成 MDK5 的工程。
|
||||
|
||||

|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# GD32系列驱动介绍
|
||||
# GD32 ARM系列驱动介绍
|
||||
|
||||
在 RT-Thread 实时操作系统中,各种各样的设备驱动是通过一套 I/O 设备管理框架来管理的。设备管理框架给上层应用提供了一套标准的设备操作 API,开发者通过调用这些标准设备操作 API,可以高效地完成和底层硬件外设的交互。设备管理框架的结构如下图所示:
|
||||
|
||||
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 149 KiB |
|
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 122 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 279 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 208 KiB After Width: | Height: | Size: 208 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -90,8 +90,17 @@ CONFIG_RT_USING_USER_MAIN=y
|
||||
CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048
|
||||
CONFIG_RT_MAIN_THREAD_PRIORITY=10
|
||||
# CONFIG_RT_USING_LEGACY is not set
|
||||
CONFIG_RT_USING_MSH=y
|
||||
|
||||
#
|
||||
# C++ features
|
||||
#
|
||||
# CONFIG_RT_USING_CPLUSPLUS is not set
|
||||
|
||||
#
|
||||
# Command shell
|
||||
#
|
||||
CONFIG_RT_USING_FINSH=y
|
||||
CONFIG_RT_USING_MSH=y
|
||||
CONFIG_FINSH_USING_MSH=y
|
||||
CONFIG_FINSH_THREAD_NAME="tshell"
|
||||
CONFIG_FINSH_THREAD_PRIORITY=20
|
||||
@@ -105,8 +114,11 @@ CONFIG_FINSH_USING_DESCRIPTION=y
|
||||
# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set
|
||||
# CONFIG_FINSH_USING_AUTH is not set
|
||||
CONFIG_FINSH_ARG_MAX=10
|
||||
|
||||
#
|
||||
# Device virtual file system
|
||||
#
|
||||
# CONFIG_RT_USING_DFS is not set
|
||||
# CONFIG_RT_USING_FAL is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@@ -152,7 +164,7 @@ CONFIG_RT_USING_PIN=y
|
||||
# CONFIG_RT_USING_USB_DEVICE is not set
|
||||
|
||||
#
|
||||
# C/C++ and POSIX layer
|
||||
# POSIX layer and C standard library
|
||||
#
|
||||
CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
|
||||
@@ -176,7 +188,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
#
|
||||
# Socket is in the 'Network' category
|
||||
#
|
||||
# CONFIG_RT_USING_CPLUSPLUS is not set
|
||||
|
||||
#
|
||||
# Network
|
||||
@@ -186,6 +197,11 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_RT_USING_LWIP is not set
|
||||
# CONFIG_RT_USING_AT is not set
|
||||
|
||||
#
|
||||
# VBUS(Virtual Software BUS)
|
||||
#
|
||||
# CONFIG_RT_USING_VBUS is not set
|
||||
|
||||
#
|
||||
# Utilities
|
||||
#
|
||||
@@ -194,7 +210,6 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_RT_USING_UTEST is not set
|
||||
# CONFIG_RT_USING_VAR_EXPORT is not set
|
||||
# CONFIG_RT_USING_RT_LINK is not set
|
||||
# CONFIG_RT_USING_VBUS is not set
|
||||
|
||||
#
|
||||
# RT-Thread Utestcases
|
||||
@@ -259,6 +274,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set
|
||||
# CONFIG_PKG_USING_JOYLINK is not set
|
||||
# CONFIG_PKG_USING_EZ_IOT_OS is not set
|
||||
# CONFIG_PKG_USING_IOTSHARP_SDK is not set
|
||||
# CONFIG_PKG_USING_NIMBLE is not set
|
||||
# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set
|
||||
# CONFIG_PKG_USING_OTA_DOWNLOADER is not set
|
||||
@@ -298,6 +314,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
#
|
||||
# CONFIG_PKG_USING_MBEDTLS is not set
|
||||
# CONFIG_PKG_USING_LIBSODIUM is not set
|
||||
# CONFIG_PKG_USING_LIBHYDROGEN is not set
|
||||
# CONFIG_PKG_USING_TINYCRYPT is not set
|
||||
# CONFIG_PKG_USING_TFM is not set
|
||||
# CONFIG_PKG_USING_YD_CRYPTO is not set
|
||||
@@ -337,6 +354,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_PKG_USING_LVGL is not set
|
||||
# CONFIG_PKG_USING_LITTLEVGL2RTT is not set
|
||||
# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set
|
||||
# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set
|
||||
|
||||
#
|
||||
# u8g2: a monochrome graphic library
|
||||
@@ -411,6 +429,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_PKG_USING_FDT is not set
|
||||
# CONFIG_PKG_USING_CBOX is not set
|
||||
# CONFIG_PKG_USING_SNOWFLAKE is not set
|
||||
# CONFIG_PKG_USING_HASH_MATCH is not set
|
||||
|
||||
#
|
||||
# system packages
|
||||
@@ -442,6 +461,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard
|
||||
#
|
||||
# CONFIG_PKG_USING_CMSIS_5 is not set
|
||||
# CONFIG_PKG_USING_CMSIS_RTOS1 is not set
|
||||
# CONFIG_PKG_USING_CMSIS_RTOS2 is not set
|
||||
|
||||
#
|
||||
@@ -484,6 +504,7 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_PKG_USING_TINYUSB is not set
|
||||
# CONFIG_PKG_USING_CHERRYUSB is not set
|
||||
# CONFIG_PKG_USING_KMULTI_RTIMER is not set
|
||||
# CONFIG_PKG_USING_TFDB is not set
|
||||
|
||||
#
|
||||
# peripheral libraries and drivers
|
||||
@@ -638,6 +659,8 @@ CONFIG_RT_LIBC_DEFAULT_TIMEZONE=8
|
||||
# CONFIG_PKG_USING_CONTROLLER is not set
|
||||
# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set
|
||||
# CONFIG_PKG_USING_MFBD is not set
|
||||
# CONFIG_PKG_USING_SLCAN2RTT is not set
|
||||
# CONFIG_PKG_USING_SOEM is not set
|
||||
|
||||
#
|
||||
# Hardware Drivers Config
|
||||
@@ -662,10 +685,13 @@ CONFIG_BSP_USING_UART1=y
|
||||
# CONFIG_BSP_USING_UART4 is not set
|
||||
# CONFIG_BSP_USING_SPI is not set
|
||||
# CONFIG_BSP_USING_I2C1 is not set
|
||||
# CONFIG_BSP_USING_WDT is not set
|
||||
# CONFIG_BSP_USING_RTC is not set
|
||||
# CONFIG_BSP_USING_HWTIMER is not set
|
||||
# CONFIG_BSP_USING_ADC is not set
|
||||
# CONFIG_BSP_USING_TIM is not set
|
||||
# CONFIG_BSP_USING_ONCHIP_RTC is not set
|
||||
# CONFIG_BSP_USING_WDT is not set
|
||||
# CONFIG_BSP_USING_SDIO is not set
|
||||
# CONFIG_BSP_USING_USBD is not set
|
||||
# CONFIG_BSP_USING_USBH is not set
|
||||
|
||||
#
|
||||
# Board extended module Drivers
|
||||
@@ -8,7 +8,7 @@ config BSP_DIR
|
||||
config RTT_DIR
|
||||
string
|
||||
option env="RTT_ROOT"
|
||||
default "../../.."
|
||||
default "../../../.."
|
||||
|
||||
config PKGS_DIR
|
||||
string
|
||||
@@ -4,17 +4,31 @@
|
||||
|
||||
GD3103C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高主频高达108M,该开发板具有丰富的板载资源,可以充分发挥 GD32103VCT6的芯片性能。
|
||||
|
||||
开发板外观如下图所示:
|
||||
|
||||

|
||||
|
||||
该开发板常用 **板载资源** 如下:
|
||||
|
||||
- GD32103VCT6,主频 108MHz,256KB FLASH ,48KB RAM
|
||||
|
||||
- 常用外设
|
||||
|
||||
- LED :5个,LED1 (电源指示灯),LED2(PC0),LED3(PC2),LED4(PE0),LED5(PE1)
|
||||
- 按键:3个,K1(用户按键,PA0),K2(用户按键,PC13),K3(用户按键,PB14)
|
||||
|
||||
- 常用接口:USB 接口
|
||||
|
||||
- General TM * 4 、Advanced TM * 2、Basic TM * 2
|
||||
- 系统时钟 * 1
|
||||
- 看门狗 * 2
|
||||
- RTC * 1
|
||||
- USART * 3、UART * 2
|
||||
- I2C * 2、I2S * 2
|
||||
- SPI * 3
|
||||
- SDIO * 1
|
||||
- CAN2.0B * 1
|
||||
- USB2.0 OTG FS * 1
|
||||
- TFT-LCD
|
||||
- EXMC/SDRAM * 1
|
||||
- ADC * 3
|
||||
- DAC * 2
|
||||
- 最多支持80GPIOs
|
||||
- 调试接口:GD-LINK
|
||||
|
||||
## 外设支持
|
||||
@@ -23,11 +37,12 @@ GD3103C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高
|
||||
|
||||
| **片上外设** | **支持情况** | **备注** |
|
||||
|:--------- |:--------:|:------------------------------------- |
|
||||
| GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...144 |
|
||||
| GPIO | 支持 | PA0, PA1... ---> PIN: 0, 1...79 |
|
||||
| UART | 支持 | UART0 - UART4 |
|
||||
| I2C | 支持 | I2C1 |
|
||||
| SPI | 支持 | SPI0 - SPI2 |
|
||||
| SPI FLASH | 支持 | |
|
||||
| ADC | 支持 | ADC0 - ADC2 |
|
||||
| **扩展模块** | **支持情况** | **备注** |
|
||||
| 暂无 | 暂不支持 | 暂不支持 |
|
||||
|
||||
@@ -45,11 +60,11 @@ GD3103C-EVAL是-兆易创新推出的一款GD32F10X系列的评估板,最高
|
||||
|
||||
### 快速上手
|
||||
|
||||
本 BSP 为开发者提供 MDK5 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。
|
||||
本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,并且支持 GCC 开发环境,也可使用RT-Thread Studio开发。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。
|
||||
|
||||
#### 硬件连接
|
||||
|
||||
使用数据线连接开发板到 PC,使用USB转TTL模块连接PA2(MCU TX)和PA3(MCU RX),打开电源开关。
|
||||
使用数据线连接开发板到 PC,使用USB转232连接USART1,打开电源开关。
|
||||
|
||||
#### 编译下载
|
||||
|
||||
@@ -81,7 +96,7 @@ msh >
|
||||
|
||||
3. 输入`pkgs --update`命令更新软件包。
|
||||
|
||||
4. 输入`scons --target=mdk4/mdk5` 命令重新生成工程。
|
||||
4. 输入`scons --target=mdk4/mdk5/iar` 命令重新生成工程。
|
||||
|
||||
## 注意事项
|
||||
|
||||
@@ -5,7 +5,7 @@ import rtconfig
|
||||
if os.getenv('RTT_ROOT'):
|
||||
RTT_ROOT = os.getenv('RTT_ROOT')
|
||||
else:
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..')
|
||||
RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../..')
|
||||
|
||||
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
|
||||
try:
|
||||
@@ -26,7 +26,7 @@ env = Environment(tools = ['mingw'],
|
||||
LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
|
||||
env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
|
||||
|
||||
if rtconfig.PLATFORM in ['iccarm']:
|
||||
if rtconfig.PLATFORM == 'iar':
|
||||
env.Replace(CCCOM = ['$CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES'])
|
||||
env.Replace(ARFLAGS = [''])
|
||||
env.Replace(LINKCOM = env["LINKCOM"] + ' --map rtthread.map')
|
||||