【GD32篇】新建KEIL工程

2023-11-06

以GD32f103C8T6芯片为例。

一、下载MDK5 软件包

下载地址:https://www.keil.com/dd2/pack/

1.选择工程所需的软件包。

2.打开软件包,安装在KEIL5同路径下

3.安装成功后打开keil软件,可查看到自己下载的软件包。

二、GD32资料下载

GD32的相关资料可直接到GD32官网下载。

下载地址:兆易创新 (gd32mcu.com)

1.点击资料下载->软件下载

2.在搜索栏直接搜索GD32F10x

3.解压文件

Docs文件夹中包含有固件库的使用指南。

Firmware文件夹中包含GD32F10x芯片的驱动文件以及固件库文件等相关文件。

三、新建工程

工程的建立可根据自己的习惯,选择合适的工程模板,当然将所有文件放在一个文件夹中也是可以的,只是不美观、不方便管理。

1.创建工程模板

在自己新建工程是少使用中文,尽量多使用英文。

常规的工程模板为:

(1)CMSIS: 存放内核驱动程序和启动引导文件

(2)FWLIB:存放库函数文件

(3)Project:存放工程文件

(4)User: 存放用户程序(主函数)

(5)APP:存放用户程序(相关外设驱动)

2.向模板中导入相关文件

· 向CMSIS目录中导入内核驱动及相关文件

可将Fimware->CMSIS中的所有文件都复制到自己的工程模板的CMSIS目录

· 向FWLIB目录中导入固件库文件(标准库)

可将Fimware->GD32F10x_standard_peripheral目录中的所有文件复制到工程的FWLIB目录

· 新建文件

User目录下可直接新建main.c文件,也可在keil软件中新建文件。APP目录下的文件也是如此。

新建文本文档,将其重命名为main,扩展名改为c文件

3.添加项目

· 打开KEIL5,点击Project->New uVision Projecr...

选择文件路径,添加工程名(英文),可根据自己项目填写合适的文件名,点击保存。

· 选择芯片型号

此处笔者选择的型号为GD32F103C8

此时空旷的界面就开始多了一些东西。

· 添加文件

添加分组:

方法1:

点击Target 1,右键选择Add Group...

重命名:点击需要重命名的分组,长按左键。

方法2:

可点击品字形的小方块,依次添加分组。

添加文件:
CMSIS:

在工程CMSIS目录中依次添加以下文件:

core_cm3.h #内核相关文件

system_gd32f10x.c #gd32的时钟配置

system_gd32f10x.h

gd32f10x.h #实现了片上外设的所有寄存器的映射

startup_gd32f10x_md.s #启动文件 该文件需要根据芯片闪存大小选择

跳转到工程CMSIS目录下找到上述文件并添加到工程。

所有文件添加完成。点击ok

FWLIB:

GD32F10x_standard_peripheral 文件夹下有include和source两个文件夹,这里属于CMSIS以外的、芯片片上外设部分。

sousce:gd32每个外设的驱动源程序

include:外设头文件

添加固件库文件(标准库)时,此处直接将所有外设的.c文件添加到工程中即可。使用快捷键Ctrl+A可直接选择所有文件。

添加流程与上↑相同。

main.c以及后续新建的外设驱动文件也是如此添加,所有文件添加好之后点击ok.

添加路劲

添加所有.h文件所在的路径。

点击魔法棒

依次添加所有.h所在的目录(具体到所在的那一级目录),可将软件缩放,在一侧打开工程目录,以便观察所有的.h文件。

全部添加完成点击OK进行保存,此后新建的头文件,若不在这些路径下,也需要包含对应的路径。

相关配置

选择Use default compiler version 5,点击ok保存。

4.编译工程

此时发现添加的文件多了+号,表示我们的文件以及头文件路径添加起了作用,但还有24个错误。

随机点一个,发现RTE_Components.h文件找不到。这个报错的地方在gd32f10x_libopt.h中。

查看了添加的所有文件中,好像是没有这个文件。

此时官方提供的模板就很重要,也许可以帮助到我们。果不其然,在模板文件中有gd32f10x_libopt.h文件,此时只需要将它加入到工程中,看看能不能解决问题。

笔者将其复制到模板的CMSIS目录下,而工程中也包含了改路径,可不用为其添加路径。也可根据自己的习惯,放在其他目录下,只要包含其路径即可。

再次编译。

还有一处错误,RTE_Components.h文件找不到的错误已经解决,说明咱们做的判断是正确的。

注:gd32f10x_libopt.h文件中包含所有的外设源程序头文件。

而此处错误是没有main函数,毕竟一切从main函数开始,那就添加一个main函数试试。

此时就没有错误和警告了,切记,在一个文件中,最后必须空一行,否则会报警告,但不影响整个程序。

好了,开始编程之旅吧。

2023/01/09

四、后续Error(更新中...)

1.启动文件添加错误

部分友友按照上述流程操作,还会报6个错误,在网上查找解决办法,一时间也没找到。

这个错误其实很好解决。

startup_gd32f10x_md.s启动文件在ARM、IAR两个目录下都有,名字还一样,在工程中添加了IAR下的启动文件,就会报上述的错误。

×掉原来的startup_gd32f10x_md.s,在添加ARM目录下的startup_gd32f10x_md.s,问题就能解决

2.宏定义

用过STM32F10x的小伙伴门都知道需要手动定义宏:STM32F10X_HD 和USE_STDPERIPH_DRIVER,细心的小伙伴就会发现文章中并没有写到两个宏的定义。

对于STM32而言,

STM32F10X_HD宏:是为了告诉STM32标准库我们使用的是STM32大容量型芯片,使 STM32 标准库根据我们选定的芯片型号来配置。但在选择芯片时,便会自动根据所选的芯片判断到芯片型号。

USE_STDPERIPH_DRIVER宏:则是为了让stm32f10x.h包含stm32f10x_conf.h 头文件。

注:stm32f10x_conf.h 中包含STM32F10x所有外设源程序头文件。

而GD32F10x的gd32f10x.h文件较STM32就显得有些简单(代码量)。也不需要额外定义USE_STDPERIPH_DRIVER宏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【GD32篇】新建KEIL工程 的相关文章

随机推荐

  • linux 数组里面是json,将JSON解析为shell脚本中的数组

    小编典典 如果您确实无法使用适当的JSON解析器 例如 1 请尝试 基于的解决方案 jq awk Bash 4 x readarray t values lt 3 print 4 myfile json Bash 3 x IFS n rea
  • lua 3.0 中 普通方法延时

    local delayTime cc DelayTime create 1 local callFunND cc CallFunc create function self pushjoystick end local seq cc Seq
  • 微信企业付款至零钱,状态处理中,status=PROCESSING的解决办法

    前段时间腾讯因为支付系统异常 更新了一些东西 然后就开始出现了这个问题 时不时的就会有一个两个状态为 处理中 的交易 但文档中并没有给出解决办法 尝试咨询了客服 给出了两个解决方案 1 把该笔交易当做失败处理 但以后这笔订单就不要再去折腾它
  • ESP8266 RTOS SDK 移植 u8g2 移植代码

    LED屏驱动ssd1306 屏幕128x64大小 1 移植代码核心 方法1 port c define SCL Pin GPIO SCL define SDA Pin GPIO SDA void delay us uint32 t time
  • Flink学习20:算子介绍reduce

    1 reduce简介 按照指定的方式 把每个元素进行累计执行 比如实现累加计算 示例 import keyByNameTest StockPrice import org apache flink api scala createTypeI
  • C++ 类学习总结(三) 类的拷贝赋值操作

    拷贝赋值操作 基本概念 拷贝构造函数 是一种构造函数 用同类型的对象初始化本对象的操作 即将新对象初始化为同类型另一个对象的副本 拷贝赋值运算符 接收一个本类型对象的赋值运算符版本 返回本对象的引用 类的默认函数 默认合成函数 当我们定义了
  • STM32F103 实验 PWM输出

    目录 本文 在上一章的基础上 将介绍如下内容 PWM输出实验 上一篇 STM32F103实验定时器 https blog csdn net qq 40318498 article details 96436994 正文 实验目的 使用TIM
  • Bridge:桥接模式

    将抽象部分与它的实现分离 使他们都可以独立地变化 抽象与实现的分离方法 是借助耦合 对于一个派生类而言 其从基类继承了抽象函数 并对抽象函数进行实现 这是常规的抽象与实现耦合的情况 而 若将函数实现的功能代码抽出 放到一个特定的实现类里 并
  • 设计模式(适配器模式)

    这里写目录标题 一 应用 1 1 概念 1 2 应用场景 二 实现 2 1 Python实现 2 2 Java实现 2 3 Golang实现 一 应用 1 1 概念 适配器是一种结构化的设计模式 主要是为了让不兼容的对象能够相互兼容 1 2
  • shell脚本——循环语句、sed、函数、数组、免交互expect

    目录 循环语句 for while 与 until sed 基本用法 sed脚本格式 函数 注意事项 定义函数和调用函数 脚本中函数的位置 查看函数 删除函数 函数返回值 函数的传参操作 使用函数文件 递归函数 数组 声明数组 数组切片 免
  • 记录 BL-604 环境配置

    与两个朋友组队参加个比赛 第一次正经的参加比赛 弥补之前一些遗憾吧 随便记录一下 下载博流的开发包 https gitee com bouffalolab bl mcu sdk 注册平头哥 https occ t head cn auth
  • NandFlash介绍、操作流程分析以及S5PV210的NandFlash控制器介绍

    1 NandFlash的型号与命名 注 本文以S5PV210芯片和K9F2G08芯片做分析 1 Nand的型号命名都有含义 拿K9F2G08来示例分析一下 K9F表示是三星公司的NandFlash系列 2G表示Nand的大小是2Gbit 2
  • Tomcat 各安装包选择及使用情景。

    本文参考 Apache Tomcat 8 5 51 官方 README 文件 当我们进入 Tomcat 主页下载 Tomcat 时 会看到各种安装包的选择 Binary Distributions 二进制发行包 Core zip pgp s
  • QT/C++ 多线程时,工作界面的样式频繁改变导致程序奔溃的问题

    QT C 多线程时 工作界面的样式频繁改变导致程序奔溃的问题 一 错误现象与原因 最近在学习QT 遇到了一点问题 是关于工作线程与UI线程的 其主要问题为 我的工作线程是一个死循环 当我点击按钮进入工作线程 我的工作线程用emit发送一个信
  • IDEA使用JUnit时@Test无效以及无法导入org.junit包的一系列问题

    先找到idea的安装位置 进入lib文件夹 然后打开idea File gt Project Structure 选择Project Settings中的Libraries 点击如图 号 然后添加以下两个包 点击OK 添加成功就可以了 ht
  • 3.java 基础if语句测评题-答案

    知识点 java 基础if语句测评题 答案 题目1 训练 李雷想买一个价值7988元的新手机 她的旧手机在二手市场能卖1500元 而手机专卖店推出以旧换新的优惠 把她的旧手机交给店家 新手机就能够打8折优惠 为了更省钱 李雷要不要以旧换新
  • SQL-更新和删除数据

    如何使用UPDATE和DELETE语句进一步操作表数据 1 更新数据 更新 修改 表中的数据 使用UPDATE语句 更新表中的特定行 更新表中的所有行 注 不要省略WHERE子句 在使用UPDATE时一定要细心 因为稍微不注意 就会更新表中
  • ArcGIS教程:面积制表

    摘要 计算两个数据集之间交叉制表的区域并输出表 插图 使用方法 区域定义为输入中具有同样值的全部区 各区无需相连 栅格和要素数据集都可用于区域输入 假设区域输入和类输入均为具有同样分辨率的栅格 则可直接使用它们 假设分辨率不同 则可先应用内
  • AT指令(中文详解版)

    AT命令最常见的应用场景 1 智能手机 一般智能手机都是一个主芯片控制一个通信模块 这个通信模块就是一个完整的 简单的手机 包括手机应该有的射频 基带等部分 还有GSM协议栈 完全可以独立打电话 发短信 用GPRS上网等 主芯片实现复杂的应
  • 【GD32篇】新建KEIL工程

    以GD32f103C8T6芯片为例 一 下载MDK5 软件包 下载地址 https www keil com dd2 pack 1 选择工程所需的软件包 2 打开软件包 安装在KEIL5同路径下 3 安装成功后打开keil软件 可查看到自己