【GD32307E-START】开发板开箱、开发环境建立及工程模板测试

01-GD32F307E-START+开箱、开发环境建立及工程模板测试(Keil-MDK GCC Template)

兆易GD32307E-START开发板搭载GD32 ARM Cortex-M4微控制器主流芯片GD32F307。

开箱

板子的做工还是非常精良小巧的。有两颗按键,一颗是复位,一颗是用户按键,同样也板载了一路LED灯,可以用来做板子的功能验证。同时支持GD-Link就不需要找下载器,但是板子的供电部分比较离谱,都是老款的接口,现在都不好找线,现在开发板都是type-c了。板但是板子的USB口为什么还是MINI-USB啊,过于离谱。而且,板子上有三个USB口,居然其中的两个不能给板子供电!!!
在这里插入图片描述

在这里插入图片描述

开发环境搭建(Windows)

  1. MDK-ARM Keil
  2. GCC
MDK-ARM Keil 环境搭建
  1. 官网下载资料

    官网资料地址 https://www.gd32mcu.com/cn/download/0?kw=GD32F3

    1. GD32F30x系列MCU用户手册,支持GD32F303/GD32F305/GD32F307
    2. GD32F307xx系列MCU数据手册
    3. GD32F30x系列开发板套件资料

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. GD32307E-START开发板配套资料

    https://www.xcc.com/sample/28?tag=sample-info-works

    在这里插入图片描述
    固件库文件 GD32F30x_Firmware_Library
    板级Basic案例 GD32307-START-V1.0 Demo
    在后面搭建自己的工程模板时,可能会以某个案例作为基础,进行工程扩展。
    在这里插入图片描述
    在这里插入图片描述

  3. 工程环境搭建

    默认已经安装MDK-ARM Keil并破解,进行安装gd32f30x_pack文件。

    在这里插入图片描述
    打开 GD32307-START-V1.0 Demo文件下的02_USART_Printf工程,编译0错误0警告。
    下载代码

在这里插入图片描述

在这里插入图片描述

  1. 工程模板测试
    GD32307-START-V1.0 Demo文件提供的固件库版本是GD32F30x_Firmware_Library_V1.1.0,
    但是最新的版本已经GD32F30x_Firmware_Library_V2.1.5,虽然老版也能使用,但是既然更新了,肯定是有好处的,而且为了搭建自己的工程模板,所以下面建立自己的模板。
    同时修改了串口部分的代码,添加板载led驱动,原工程案例里面使用是gd32f307c_eval开发板的配置和这个板子有一点区别,因此不在使用,但是保留文件,里面代码可以参考。
    在这里插入图片描述在这里插入图片描述

点灯效果 串口打印效果

在这里插入图片描述
在这里插入图片描述

GCC Makefile 环境搭建

搭建过程参考 https://gitee.com/End-ING/embedded-gcc-template

  1. GNU Arm Embedded Toolchain交叉编译器

    进入arm开发者官网,往下滑动选择下载解压可用的ZIP压缩包文件

    下载链接: Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer

    在这里插入图片描述

    将下载好的压缩包文件解压在gcc-arm-none-eabi”文件夹中,并记住文件内“bin”文件的路径,后续需添加到系统环境变量Path中。

    在这里插入图片描述
    添加完环境变量后,进行测试,检测是否安装好。

在这里插入图片描述
在这里插入图片描述

  1. 安装Mingw-w64 GCC

    点击链接进入到SourceForge官网,往下翻可以找到很多版本的下载链接,选择红色框内型号即可,不同前后缀的具体差异请参考:

    MinGW gcc下载链接及sjlj、dwarf、seh异同以及gcc安装_AMDDMA的博客-CSDN博客_seh和sjlj

    下载链接:

    MinGW-w64 - for 32 and 64 bit Windows - Browse Files at SourceForge.net

    在这里插入图片描述

    同样,将下载好的文件解压到“gcc-arm-none-eabi”文件夹下,记住目录下的“bin”文件路径
    在这里插入图片描述
    进入“bin”文件内找到“mingw32-make”应用程序文件,复制一份并重命名为“make”。这么做有利于在命令行执行make指令,而不是输入mingw32-make。
    在这里插入图片描述

​ 添加完环境变量后,进行测试,检测是否安装好。
在这里插入图片描述
在这里插入图片描述

3. 安装调试软件Download pre-built OpenOCD for Windows

默认安装Vscode,安装过程比较简单,参考其他文章。有了以上三个软件的支持,已经可以在VScode中编译并生成bin文件和hex文件了,但众所周知,程序员最大的工作是Debug,那就免不了需要一款调试软件了。

Debug常用的硬件有STLink、JLink,WCH-Link,DapLink.

Download pre-built OpenOCD for Windows下载链接:OpenOCD for Windows

在这里插入图片描述

同样将下载好的压缩包解压至“OpenOCD-20231002-0.12.0”,记住文件内“bin”文件的路径。
在这里插入图片描述
添加完环境变量后,进行测试,检测是否安装好。
在这里插入图片描述在这里插入图片描述

综上所述,基本的软件环境已经配置好。

Makefile文件编写(重点)

######################################
# target
######################################
TARGET = gd32f307


######################################
# building variables
######################################
# debug build?
DEBUG = 1
# optimization for size
OPT = -Os


#######################################
# paths
#######################################
# Build path
BUILD_DIR = build

######################################
# source
######################################
# C sources
C_SOURCES =  \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_bkp.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_crc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_pmu.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_spi.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_misc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_can.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_enet.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_fwdgt.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_fmc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_dma.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_sdio.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_dbg.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_timer.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_wwdgt.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_adc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_gpio.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_rtc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_usart.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_exmc.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_rcu.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_exti.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_i2c.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_dac.c \
FirmwareLibrary/GD32F30x_standard_peripheral/Source/gd32f30x_ctc.c \
FirmwareLibrary/CMSIS/GD/GD32F30x/Source/system_gd32f30x.c \
Systemlibrary/Source/systick.c \
Systemlibrary/Source/uart.c \
BspDriver/Source/bsp_led.c \
Application/gd32f30x_it.c \
Application/gd32f307c_eval.c \
Application/main.c 

# ASM sources
ASM_SOURCES = \
Application/startup_gd32f30x_cl.S


#######################################
# binaries
#######################################
PREFIX = arm-none-eabi-
GCC_PATH = /SoftwareApplication/gcc-arm-none-eabi/bin
ifdef GCC_PATH
CC = $(GCC_PATH)/$(PREFIX)gcc
AS = $(GCC_PATH)/$(PREFIX)gcc -x assembler-with-cpp
CP = $(GCC_PATH)/$(PREFIX)objcopy
SZ = $(GCC_PATH)/$(PREFIX)size
else
CC = $(PREFIX)gcc
AS = $(PREFIX)gcc -x assembler-with-cpp
CP = $(PREFIX)objcopy
SZ = $(PREFIX)size
endif
HEX = $(CP) -O ihex
BIN = $(CP) -O binary -S
 
#######################################
# CFLAGS
#######################################
# cpu
CPU = -mcpu=cortex-m4

# fpu
# NONE for Cortex-M0/M0+/M3

# float-abi


# mcu
MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI)

# macros for gcc
# AS defines
AS_DEFS = 

# C defines
C_DEFS =  \
-DUSE_STDPERIPH_DRIVER \
-DGD32F30X_CL


# AS includes
AS_INCLUDES = 

# C includes
C_INCLUDES =\
-IFirmwareLibrary/CMSIS \
-IFirmwareLibrary/CMSIS/GD/GD32F30x/Include \
-IFirmwareLibrary/GD32F30x_standard_peripheral/Include \
-ISystemlibrary/Include \
-IBspDriver/Include \
-IApplication \


# compile gcc flags
ASFLAGS = $(MCU) $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

CFLAGS = $(MCU) $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections

ifeq ($(DEBUG), 1)
CFLAGS += -g -gdwarf-2
endif


# Generate dependency information
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)"


#######################################
# LDFLAGS
#######################################
# link script
LDSCRIPT = FirmwareLibrary/Link.ld

# libraries
LIBS = -lc -lm -lnosys 
LIBDIR = 
LDFLAGS = $(MCU) -u_printf_float -specs=nosys.specs -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections

# default action: build all
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin


#######################################
# build the application
#######################################
# list of objects
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# list of ASM program objects
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.S=.o)))
vpath %.S $(sort $(dir $(ASM_SOURCES)))

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) 
	@echo "[CC]    $<"
	@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
	@echo "[AS]    $<"
	@$(AS) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	@echo "[HEX]   $< -> $@"
	@$(CC) $(OBJECTS) $(LDFLAGS) -o $@
	@$(SZ) $@

$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	@echo "[HEX]   $< -> $@"
	@$(HEX) $< $@
	
$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
	@echo "[BIN]   $< -> $@"
	@$(BIN) $< $@	
	
$(BUILD_DIR):
	@mkdir $@		

#######################################
# program
#######################################
program:
	openocd -f cmsis-dap.cfg -f gd32f30x.cfg -c init -c halt -c "program build/$(TARGET).elf verify reset exit"

#######################################
# clean up
#######################################
clean:
	-del /q  $(BUILD_DIR)

#######################################
# dependencies
#######################################
-include $(wildcard $(BUILD_DIR)/*.d)

# *** EOF ***

make 测试

在这里插入图片描述

程序下载
在这里插入图片描述
下载成功,点灯成功,但是GCC下面的打印没有解决,因此通过不同时间的延时,表示不同.
在这里插入图片描述

解决了 gcc下面的串口打印问题,在gcc下面使用_write进行定向printf。
在这里插入图片描述

#ifdef BUILD_PLATFORM_KEIL
// printf 
/* retarget the C library printf function to the USART */
int fputc(int ch, FILE *f)
{
    usart_data_transmit(USART0, (uint8_t)ch);
    while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
    return ch;
}
#endif
// gcc 环境下用此函数重定向printf
int _write (int fd, char *pBuffer, int size)
{
    uint32_t i;
    for (i = 0; i < size; i++)
    {
        usart_data_transmit(USART0, (uint8_t)pBuffer[i]);
        while(RESET == usart_flag_get(USART0, USART_FLAG_TBE)); 
    }
    return size;
}

综上所述,GD32F307E-START+开箱、开发环境建立及工程模板测试(Keil-MDK GCC Template)
Embedded-GD32-Board-Template
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/191880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时间序列预测 — LSTM实现单变量风电滚动预测(Keras)

目录 1 数据处理 1.1 数据集简介 1.2 数据集处理 2 模型训练与预测 2.1 模型训练 2.2 模型滚动预测 2.3 结果可视化 1 数据处理 1.1 数据集简介 实验数据集采用数据集5&#xff1a;风电机组运行数据集&#xff08;下载链接&#xff09;&#xff0c;包括风速、风向、温…

纯新手发布鸿蒙的第一个java应用

第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程&#xff08;当前用的IDEA 3.1.1 Release&#xff09; 选择第一个&#xff0c;其他的默认只能用(API9)版本&#xff0c;…

居家适老化设计第三十二条---卫生间之扶手

以上产品图片均来源于淘宝 侵权联系删除 居家适老化中的扶手是指在家居环境中&#xff0c;为老年人提供支撑和帮助的装置&#xff0c;通常安装在家中的各个需要扶抓的位置&#xff0c;如楼梯、卫生间、浴室、厨房等处。扶手的设计应考虑老年人的体力、平衡和安全需求&#xf…

顶级Mac数据恢复工具—— 13个 Mac 数据恢复程序榜单

如果您点击此博客&#xff0c;首先可能是您不小心格式化了外部或内部存储&#xff0c;无论是 SD卡还是硬盘&#xff0c;其次&#xff0c;您收到了一些错误消息&#xff0c;表明您丢失了所有内容&#xff0c;现在您已经精疲力竭了的形状。原因可能有多种&#xff1a;您不小心删除…

探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示

&#x1f490;作者&#xff1a;insist-- &#x1f490;个人主页&#xff1a;insist-- 的个人主页 理想主义的花&#xff0c;最终会盛开在浪漫主义的土壤里&#xff0c;我们的热情永远不会熄灭&#xff0c;在现实平凡中&#xff0c;我们终将上岸&#xff0c;阳光万里 ❤️欢迎点…

Slf4j使用Logback时,Logback如何初始化

前言 Slf4j SLF4J&#xff0c;全称 Simple Logging Facade for Java&#xff0c;是一个用于Java编程语言的日志系统抽象层。它为多种现有日志框架&#xff08;例如Log4j、java.util.logging等&#xff09;提供了统一的接口, 但自身并不实现日志功能。 SLF4J 允许用户在部署时…

校园导游程序及通信线路设计(结尾附着总源码)

校园导游程序及通信线路设计 摘  要 新生或来访客人刚到校园&#xff0c;对校园的环境不熟悉。就需要一个导游介绍景点&#xff0c;推荐到下一个景点的最佳路径等。随着科技的发展&#xff0c;社会的进步&#xff0c;人们对便捷的追求也越来越高。为了减少人力和时间。针对对…

一起学docker系列之十一使用 Docker 安装 Redis 并配置持久化存储

目录 前言1 基本安装步骤安装Redis镜像&#xff1a;查看已下载的Redis镜像&#xff1a;运行Redis容器&#xff1a;进入Redis容器&#xff1a;使用Redis CLI进行基本操作&#xff1a; 2 配置文件同步准备配置文件&#xff1a;修改Redis配置文件 /app/redis/redis.conf&#xff1…

Project DESFT 白皮书中文版——应用于普惠金融的可信数字凭证解决方案

1. 概述 Project DESFT 是由 Solv 基金会与 zCloak Network 联合设计孵化&#xff0c;以跨境贸易和金融服务为场景的分布式可信数字凭证解决方案&#xff08;Distributed Trusted Digital Credential Solution&#xff09;&#xff0c;项目获得新加坡金管局&#xff08;Monetar…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的&#xff0c;可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Python---练习:使用Python函数编写通讯录系统

预览通讯录系统最终效果 首先&#xff0c;进行需求分析&#xff0c;整个系统功能&#xff0c;分为6个板块&#xff0c;功能如下&#xff1a; ① 添加学员信息 ② 删除学员信息 ③ 修改学员信息 ④ 查询学员信息 ⑤ 遍历所有学员信息 ⑥ 退出系统 系统共6个功能&#xff…

drool 7 multiThread 测试

基本信息 通过option &#xff0c;使用如下代码进行设置 //线程数量10MaxThreadsOption optionMaxThreadsOption.get(10);kieBaseConf.setOption(option);kieBaseConf.setOption(MultithreadEvaluationOption.YES);并发是以CompositeDefaultAgenda/Rule为颗粒度来的&#xff0…

国企央企降薪20%,年终奖也没了。

* 你好&#xff0c;我是前端队长&#xff0c;在职场&#xff0c;玩副业&#xff0c;文末有福利&#xff01; 精彩回顾&#xff1a;京东内部员工&#xff0c;爆料工资与公积金收入&#xff01; 最近&#xff0c;很多国企央企也开始降薪了&#xff0c;有的甚至降幅达到 21%&#…

针对操作系统漏洞的反馈方法

一、针对操作系统漏洞的反馈方法 漏洞扫描指基于漏洞数据库&#xff0c;通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测&#xff0c;发现可利用漏洞的一种安全检测&#xff08;渗透攻击&#xff09;行为。在进行漏洞扫描后&#xff0c;需先确定哪些是业务…

2023年亚太杯数学建模C题新能源汽车成品文章(思路模型代码成品)

一、翻译 新能源汽车是指采用先进的技术原理、新技术和新结构&#xff0c;以非常规车用燃料&#xff08;非常规车用燃料是指汽油和柴油以外的燃料(非常规车用燃料是指汽油和柴油以外的燃料&#xff09;&#xff0c;并集成了汽车动力控制和驱动等先进技术的汽车。新能源汽车包括…

博物馆线上导览系统的设计与实现-计算机毕业设计源码64574

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

网络运维与网络安全 学习笔记2023.11.25

网络运维与网络安全 学习笔记 第二十六天 今日目标 ACL原理与类型、基本ACL配置、高级ACL配置 高级ACL之ICMP、高级ACL之telnet ACL原理与类型 项目背景 为了企业的业务安全&#xff0c;要求不同部门对服务器有不同的权限 PC1不能访问Server PC2允许访问Server 允许其他所…

Portraiture全新4.1.2版本升级更新

关于PS修图插件&#xff0c;相信大家都有安装过使用过&#xff0c;而且还不止安装了一款&#xff0c;比如最为经典的DR5.0人像精修插件&#xff0c;Retouch4me11合1插件&#xff0c;Portraiture磨皮插件&#xff0c;这些都是人像精修插件中的领跑者。其中 Portraiture 刚刚升级…

HDMI接口信号流向及原理图分析

1、HDMI的来源及发展 如今显示器上最常用的接口无非HDMI&#xff08;High Definition Multimedia Interface&#xff09;与DP&#xff08;DisplayPort&#xff09;两种&#xff0c;VGA与DVI已经很少使用&#xff0c;原因在于VGA传输的是模拟信号&#xff0c;在发送端需要将数字…

【UGUI】实现跑酷游戏分数血量显示在UI中

//1.实现让玩家的金币分数显示在UI文本中 2.让血量和滑动条关联起来 这一节课主要学会获取组件并改变属性&#xff0c;举一反三&#xff01; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro;//1.实现让玩…
最新文章