当前位置: 首页 > news >正文

【GD32】(一) 开发方式简介及标准库开发入门

文章目录

    • 0 前言
    • 1 开发方式选择
    • 2 标准库模板的创建
    • 3 遇到的问题和解决方法

0 前言

  因为项目关系,需要使用GD32。之前对此早有耳闻,知道这个是一个STM32的替代品,据说甚至可以直接烧录STM32的程序(一般是同型号),但是GD32型号的编排更加复杂,不能和STM32一一对应,所以,从长远角度来看,还是建议按照官方推荐的方式来开发,其实本质上和STM32开发是差不多的,所以对于熟练STM32开发的人来说上手还是挺快的,关键是要学会查找和使用资料。

GD32开发资料下载——记得点开右上角的箭头可以展开更多

1 开发方式选择

  可能是为了跟上STM32的脚步,兆易最近(2024.04)也开发了适配自家产品的集成开发环境——Embedded Builder,对标STM32的CubeIDE。

在这里插入图片描述

但是我体验下来的感觉并不好,一个是支持的型号有限(没有我正在使用的型号),一个是win7(莫得选择)支持不太好,打开之后不知道为啥显示屏一大段黑条,关掉软件之后就立刻好了(可能是显卡要求比较高?)。

  综上,我不得不放弃私以为更好用的HAL库,转而使用标准库进行开发。以下是开发记录。

2 标准库模板的创建

  标准库开发的第一步,毫无疑问肯定是搭建一个项目工程的模板,这样之后的项目可以直接复制这个模板,然后在此基础上添加自己需要的代码即可,非常方便。

  1. 下载资料
      首先打开上面那个链接,然后在左侧找到对应的芯片型号,这里以GD32E230为例,首先点开 “GD32E2 MCU” 标签页,然后在右侧就能看到这个型号相关的资料:

在这里插入图片描述

当然,这些资料不是都需要下载的,如果是初学,只需要下载必要的文件即可,其他的留个印象,之后如果涉及到可以再来翻阅。

  主要需要下载的有以下几个资料:

  • GD32E230xx Datasheet 芯片数据手册,查看外设引脚必备;
  • GD32E23x User Manual 用户手册,主要是介绍芯片的特性,存储,外设及其相关寄存器等,编程必备;【注意,这个文件有中文版,不想翻译的可以考虑只下载这个】
  • GD32E23x AddOn 软件支持包,使用Keil开发必备;
  • GD32E23x Firmware Library 标准固件库,搭建模板必备。

另外,“用户手册”和“其他资料”中有很多“AN”开头的文件,适用于特定问题的解决,最好留个印象,这样遇到相关的问题不至于不知道去哪里找资料了。

  1. 创建标准库模板工程
      基本流程和STM32配置差不多,这里只展示文件的目录结构,具体的配置流程可以参考之前的一篇文章。
|-- CMSIS                   # 内核文件
|   |-- gd32e23x.h
|   |-- gd32e23x_libopt.h
|   |-- startup_gd32e23x.s
|   |-- system_gd32e23x.c
|   `-- system_gd32e23x.h
|-- Hardware               # 自定义外设
|   |-- usart.c
|   `-- usart.h
|-- Objects                # 编译链接文件
|   |-- gd32e23x_adc.d
|   |-- gd32e23x_adc.o
|   |-- ......
|   `-- usart.o
|-- RTE                    # Real Time Environment,Keil自带的内核相关文件 
|   `-- _Target_1
|       `-- RTE_Components.h
|-- StdPeriph              # 标准外设库
|   |-- Include
|   |   |-- gd32e23x_adc.h
|   |   |-- gd32e23x_cmp.h
|   |   |-- gd32e23x_crc.h
|   |   |-- ......
|   |   `-- gd32e23x_wwdgt.h
|   `-- Source
|       |-- gd32e23x_adc.c
|       |-- gd32e23x_cmp.c
|       |-- gd32e23x_crc.c
|       |-- ......
|       `-- gd32e23x_wwdgt.c
|-- User                   # 用户文件
|   |-- gd32e23x_it.c
|   |-- gd32e23x_it.h
|   |-- main.c
|   |-- main.h
|   |-- systick.c
|   `-- systick.h
|-- gde2_project.uvguix.Zoey  # 最外层目录的这些文件都是项目相关的文件
|-- gde2_project.uvoptx
`-- gde2_project.uvprojx9 directories, 112 files

值得一提的是,这里的RTE文件夹并不是自己建立的,而是在创建项目时首先添加到工程中的:

在这里插入图片描述

之所以要添加这个貌似是因为GD32E2xx固件库中,不存在这个core文件?总之必须得添加这个,不然编译的时候一堆报错。

注意,这个步骤仅限于部分型号,加不加其实取决于固件库的文件夹中有没有内核文件,如果有,直接添加文件即可,因为这一步本质上就是复制Keil安装的支持包中的内核文件而已。

这里再提一下gd32e23x_libopt.h这个文件,相当于是一个选择外设的文件,可以根据需要注释或取消注释包含的头文件,默认全部包含,但是它可能和其他文件不在一个文件夹内,而是在example文件夹中。

  添加好文件之后,接下来就是点击魔法棒来配置项目工程了,首要的肯定是先将自定义文件夹的路径包含在项目中,然后在宏定义中加上:

USE_STDPERIPH_DRIVER,GD32E230

后面这个芯片型号取决于实际使用的是啥,好像也可以不加

  配置好之后,点击编译,如果没有问题的话,一般是 0 Error(s) ,但是!可能会有一堆Warnings,如果有强迫症的,可能已经开始将警告内容复制去浏览器搜索解决方案了,我也尝试过,但无果。
  后来和其他项目工程模板仔细比对之后发现,因为使用了RTE,工程的默认编译器变成了AC6,而且不能换成AC5,所以出现了很多语法格式上的警告,所以解决办法也很简单,将警告的等级降一降:

在这里插入图片描述

亲测有效!

掌握了标准库项目模板的构建,基本也算是入门了,其他的主要就是外设的使用了,这个将在后续博客中介绍。

3 遇到的问题和解决方法

  • 下载程序之后不运行
    当发现程序运行结果和想象中不一样时,可以使用仿真器单步运行。然后就发现代码卡在开始文件的汇编代码中,也就是后缀为.s的文件。最后发现是系统的时钟配置错误。在这里插入图片描述
    如注释所示,这里要选择一个时钟源和主频,然后如果板子上没有使用外部晶振,这里仍然选择了后缀为8M_HXTAL25M_HXTAL的选项,时钟选择错误,导致系统不运行。

    关于时钟的选择,芯片特性手册和使用手册上都有提到,可以去参考。

http://www.lryc.cn/news/483462.html

相关文章:

  • 轻松上手:使用Docker部署Java服务
  • wormml_vgg19
  • Rust学习(二):rust基础语法Ⅰ
  • 【WebRTC】视频发送链路中类的简单分析(下)
  • HTML(超文本标记语言)
  • CatBoost中目标变量统计
  • WSL与Ubuntu系统--使用Linux
  • 操作系统离散存储练习题
  • 性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章
  • PHP反序列化_3-漏洞利用
  • 2.初始sui move
  • 数据结构--排序算法
  • day60 图论章节刷题Part10(Floyd 算法、A * 算法)
  • UI架构解说
  • 车机安装第三方软件实现打开软件全屏教程
  • 八大技术架构与演进2
  • ReactPress技术揭秘
  • Javascript高级—如何实现一个类型判断函数?
  • asitop macOS 终端 性能监控
  • Unity学习笔记(4):人物和基本组件
  • 【深圳大学/大学物理实验2】弗兰克-赫兹实验预习题参考
  • vue2.7.14 + vant + vue cli脚手架转vite启动运行问题记录
  • Java基础-内部类与异常处理
  • vue2或vue3的name属性有什么作用?
  • 【FOC进阶日记】实战篇③ 电机关键数据采集方法
  • XSS安全基础
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(3)
  • 516.最长回文子序列
  • leetcode hot100【LeetCode 114.二叉树展开为链表】java实现
  • SpringMVC学习记录(二)之接收数据