GD32工程模版的建立
在建立GD32的工程模版之前,我们先来聊聊什么是嵌入式开发?嵌入式开发是为特定目的而设计的计算系统编写软件的过程。这些系统通常具有受限的资源(处理能力、内存、能源等),并且需要可靠地执行特定任务。裸机编程和基于调度器的开发(说白了就是嵌入式中常提到的RTOS实时操作系统)。首先介绍裸机开发,假设我们现在有3个任务,那么裸机调度器就会将这三个任务轮询地去执行,每次只会执行一个任务。控制流线性执行任务
GD32工程模版的建立
前言
本文章参考了同为米醋电子工作室会员柒的部分优秀笔记,仅做个人学习用,如有侵权,请联系本人删除。
一、什么是嵌入式开发?
在建立GD32的工程模版之前,我们先来聊聊什么是嵌入式开发?
嵌入式开发是为特定目的而设计的计算系统编写软件的过程。这些系统通常具有受限的资源(处理能力、内存、能源等),并且需要可靠地执行特定任务。在嵌入式开发中 ,有两种主要的编程范式:裸机编程和基于调度器的开发(说白了就是嵌入式中常提到的RTOS实时操作系统)。
首先介绍裸机开发,假设我们现在有3个任务,那么裸机调度器就会将这三个任务轮询地去执行,每次只会执行一个任务。
| 控制流 | 线性执行 |
|---|---|
| 任务切换 | 无 |
| 执行模式 | 阻塞式 |
| 特点 | 简单、可预测 |
注意:裸机的所有调度方案都是阻塞式的,因为我们的程序是自上而下
步步运行的。
那调度器开发(实时操作系统)呢?
具体就不深入讲解了,后续再深入学习。
| 控制流 | 优先级调度 |
|---|---|
| 任务切换 | 自动 |
| 执行模式 | 并发 |
| 特点 | 实时性、模块化开发 |


注意:在开发效率上,所有操作系统的效率都不如裸机开发高。
在开发上的区别,操作系统要规避全局变量满天飞。

二、工程模板搭建
本教程将带您深入理解嵌入式系统的工程框架搭建过程,掌握从时钟配置到工程代码组织的全过程,打造专业的嵌入式开发基础。
本教程的对应视频是b站up主西风的【西门子-嵌入式】零基础入门省国赛冲刺培训第三讲、工程模板建立_哔哩哔哩_bilibili。看了视频觉得不错的小伙伴,可以联系up主,考虑加入会员群一起学习。
首先详细介绍一下工程模板搭建,其中会穿插一下知识点和注意事项。
嵌入式开发环境的搭建不再赘述,本人也是建议去看B站up主西风的第0讲环境搭建。
1、Cubmax工程的建立
- 第一步:在添加STM32F410芯片的基础上从mcu中新建工程

- 第二步:选择芯片(STM32F429ZGT6)
注意:一般输入STM32F429ZG即可,完全输入可能查找不到

- 第三步:配置时钟树(RCC)
首先在Pinout & Configuration一栏的RCC中将HSE和LSE选择为下图所示选项。
此操作为选择时钟源,确定使用内部时钟(HSI/LSI)还是外部时钟(HSE/LSE)。内部时钟提供便捷性,外部时钟提供更高的精度。
我们选择外部时钟

然后在Clock Configuration一栏中按下图所示设置时钟树

那么我们为什么要这样配置时钟源呢?
主要时钟源:
HSI (High-speed Internal): 内部高速RC振荡器。优点是启动快,无需外部元件;缺点是精度和稳 定性不如外部晶振。通常是默认时钟源。
HSE (High-speed External): 外部高速晶振或时钟源。优点是精度和稳定性高;缺点是需要外部晶 振电路,启动需要稳定时间。通常是高性能应用的首选。
LSI (Low-speed Internal): 内部低速RC振荡器。用于看门狗、RTC(实时时钟)。
LSE (Low-speed External): 外部低速晶振。主要用于RTC,精度比LSI高。
PLL (Phase-Locked Loop): 锁相环。可以把来自HSI或HSE的时钟信号进行倍频,得到更高的系统 时钟频率(SYSCLK)。
需要注意的是当我们配置外部高速时钟源时频率需要根据芯片自身的外部晶振更改,不是固定的,这在我们做开发的时候非常容易忽略而直接使用默认的数值,导致我们的串口出现问题。*;如下所示GD32的外部晶振频率,由于GD32芯片最高内频率可达220MHZ,所以我们主频直接拉到最高 180MHZ,加快RC振荡器的启动速度;

- 第四步:SYS配置
通用选择选择SWD(串行线调试)可以根据自身不同的烧录器而选择

那为什么我们要选择使用SWD协议调试呢?
我们首先来了解一下不同debug的区别
1:Disable (禁用)
2:Serial Wire (SWD - 串行线调试) 作用: 启用ARM标准的串行线调试接口。这是目前最常用的ARM MCU调试模式。只需要两个引脚,引脚少,ST_Link采用此调试,适合大部分调试;(适用于ST_Link 和 DAP)
3:JTAG 作用:传统调试模式,引脚多,支持边界扫描和链式连接,调试需要4个或5个引脚,J_Link使用此种调试 对于入门和常规开发,Serial Wire (SWD) 通常是首选。
使用建议
✅ **使用ST-Link时:**选择Serial Wire
✅ **使用J-Link时:**可选JTAG或Trace Asynchronous
⚠️ **注意:**在CubeMX中选择的调试协议必须与MDK中选择的协议一致
🔍 **调试问题:**如果遇到烧录和调试失败,尝试切换协议
推荐: Serial Wire
- 第五步:project配置
注意设置项目的名称和项目位置时,应避免使用特殊字符(即中文)和空格。下图为错误示例,这样子会导致项目创建失败!


以上5个框选分别为
1:进行工程命名 2:修改工程保存的路径 3:修改IDE和版本(选择v5也可) 4:生成所需要的HAL库文件 5:生成必要的.c或.h文件
2、keil程序框架搭建
打开我们的keil之后会看到现成的模版,此处需要强调一个点:
我们的代码编写都要在BEGIN和END之间,不然下次点击生成模版的时候,代码就会清除,这就是“保留用户代码”。

- 第一步:建立新的文件夹存放我们自己编写的代码

- 第二步:点击魔术棒,将刚建立的文件夹添加进来


这样子基本框架就搭好了。
接下来我们用一个调度器的代码来举例一下:
我们首先点击魔法棒旁边的品字格,添加一下HardWare文件夹;(图例文件名为MyApp)
自定义Scheduler.c 和Mydefine.h添加到文件夹中。(此处是直接移植过来的)



点开Scheduler.h文件,我们会发现里面比蓝桥杯单片机中的.h文件多了三行代码。这其实是三行宏定义头文件(也叫做头文件预定义);这段代码的目的是防止头文件的重复包含。 在大型项目中,多个源文件可能会包含相同的头文件,而这个预处理指令确保每个头文件在一次编译中 只会被包含一次,从而避免多次定义和编译错误。
Mydefine.h:包含需要用到的.h头文件引用,便于文件管理,实际上就是把所有自定义底层.h文件包含进 去,形成相互传递的作用。
三、STM32烧录器深度解析
当你与STM32微控制器初次相遇时,烧录器 将是你不可或缺的伙伴。它就像连接你想法与硬件现实的魔法棒。这篇指南将以生动形象的方式,带你彻底搞懂它是什么、为什么需要它、以及它是如何工作的。



注意:GND必须连接
烧录器推荐:

更多推荐



所有评论(0)