本文以 立创·天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。
立创·天空星开发板-GD32F407VET6-环境搭建
- 单片机
- ARM
- ARM内核系列
- Cortex-M系列
- 常用ARM芯片厂商
- GD32
- GD32的产品系列
- 开发板
- 开发板资源、尺寸标注图
- 设计图纸
- GD32F407
- Keil ARM 安装
- 下载地址
- 安装步骤
- GD32开发包安装
- 点灯仪式
- 排错
单片机
单片机(Microcontroller)是一种集成电路芯片,它集成了处理器、存储器、输入/输出接口以及各种功能模块于一身。
- 总线:
总线是一组导线,连接了单片机中的各个部分,如处理器、存储器和输入/输出接口。它负责在各个部件之间传递信息和数据。常见的总线有地址总线、数据总线和控制总线。
- 地址总线:用于传递存储器和外设的地址信息。
- 数据总线:用于传输实际的数据。
- 控制总线:用于传递控制信号,如读写操作。
总线与外设通信:单片机通过总线与外设进行通信。当处理器需要与外设通信时,它会将外设的地址放在地址总线上,将要传输的数据放在数据总线上,并通过控制总线发送控制信号,以实现对外设的读写操作。
- GPIO(General Purpose Input/Output,通用输入输出):
GPIO,全称为“通用输入/输出”(General Purpose Input/Output),是计算机系统中用于与外部世界进行数字通信的一种接口标准。它允许硬件和软件通过电信号来交换数据,控制外部设备或接收外部事件。GPIO 模式有:
模式 | 性质 |
---|---|
浮空输入 | 数字输入 |
上拉输入 | 数字输入 |
下拉输入 | 数字输入 |
模拟输入 | 模拟输入 |
开漏输出 | 数字输出 |
推挽输出 | 数字输出 |
复用开漏输出 | 数字输出 |
复用推挽输出 | 数字输出 |
GPIO通常用于连接各种外设,如按钮、LED灯、传感器、马达、继电器等,以便与计算机系统进行交互。
- 通信协议:
单片机与外设之间通信的方式有很多,通常需要遵循一定的协议。以下是一些常见的通信协议:
● UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器):这是一种异步串行通信协议,用于在单片机与外设之间传输数据。UART通信需要两根线:一根用于发送数据(TX),另一根用于接收数据(RX)。
● SPI(Serial Peripheral Interface,串行外设接口):SPI是一种同步串行通信协议,使用主从模式进行通信。它需要四根线:时钟线(SCLK)、主设备数据输出线(MOSI)、主设备数据输入线(MISO)和片选线(SS)。
● I2C(Inter-Integrated Circuit,内部集成电路总线):I2C是一种同步串行通信协议,使用主从模式进行通信。它只需要两根线:串行数据线(SDA)和串行时钟线(SCL)。
ARM
ARM是一种芯片架构,由英国的ARM Holdings公司开发和授权,被广泛应用于各种嵌入式系统、移动设备和消费电子产品中。ARM架构被设计成低功耗、高性能、可定制化的特点,能够满足各种应用场景下的需求。ARM架构主要设计了以下几个部分内容:
- 指令集架构(Instruction Set Architecture):
ARM架构是基于精简指令集计算机(RISC)架构设计的,其指令集具有高效的指令执行速度、较小的代码大小和低功耗等特点。ARM架构提供了多个指令集版本,包括32位和64位,不同版本的指令集支持不同的特性和功能,以适应不同的应用场景。
- 存储器架构(Memory Architecture):
ARM架构的存储器架构包括内存、闪存、EEPROM等类型,它们提供了不同的存储特性和使用场景。ARM架构还支持虚拟内存技术,通过虚拟地址和物理地址映射实现了对于内存的更高效的利用,提高了系统的运行效率和稳定性。
- 总线架构(Bus Architecture):
ARM架构的总线架构包括数据总线、地址总线和控制总线等,它们提供了连接CPU、存储器、外设等各个部件之间的通信和数据传输。ARM架构的总线架构是高度灵活和可扩展的,可以适应不同的应用场景和系统需求。
- 处理器架构(Processor Architecture):
ARM架构的处理器架构包括中央处理器(CPU)、图形处理器(GPU)、数字信号处理器(DSP)等。ARM架构的处理器架构具有高性能、低功耗、低成本等特点,可以适应不同的应用场景和设备类型。
- 安全架构(Security Architecture):
ARM架构的安全架构提供了各种安全功能和特性,包括硬件加密、安全存储、安全启动等。ARM架构的安全架构可以保护系统的安全性和稳定性,防止恶意攻击和数据泄露等安全问题。
ARM内核系列
ARM公司设计的处理器内核有很多种,根据不同的应用场景和性能需求,可以选择不同的内核进行设计。以下是一些常见的ARM内核:
- Cortex-A系列:面向高性能应用领域的内核,主要用于移动设备、智能终端、高端嵌入式系统等领域。Cortex-A系列内核具有高性能、高可扩展性、丰富的外设接口和低功耗等优点。
- Cortex-R系列:面向实时应用领域的内核,主要用于工业控制、汽车电子、航空航天等领域。Cortex-R系列内核具有高可靠性、低延迟、强实时性和硬件保护等特点。
- Cortex-M系列:面向低功耗嵌入式系统的内核,主要用于智能传感器、便携式设备、家用电器等领域。Cortex-M系列内核具有低功耗、低成本、高效能、易于开发等特点。
- ARM7系列:面向嵌入式系统领域的内核,主要用于控制器、存储设备、安全芯片等领域。ARM7系列内核具有低成本、低功耗、高集成度、易于开发等特点。
- ARM9系列:面向嵌入式系统领域的内核,主要用于数字音视频、通信、网络设备等领域。ARM9系列内核具有高性能、多媒体处理能力、丰富的外设接口和易于扩展等特点。
Cortex-M系列
Cortex-M系列是ARM公司推出的一种面向低功耗嵌入式系统的处理器内核,主要用于智能传感器、便携式设备、家用电器等领域。Cortex-M系列内核具有低功耗、低成本、高效能、易于开发等特点,是目前嵌入式系统领域最受欢迎的处理器内核之一。根据不同的性能和功耗需求,Cortex-M系列内核又分为以下几类:
- Cortex-M0系列:面向低功耗、成本敏感型应用,适用于智能传感器、安全芯片、家用电器等领域。Cortex-M0系列内核的主频通常在10MHz-50MHz之间,具有低功耗、低成本、易于开发等特点。
- Cortex-M3系列:面向高性能、实时应用,适用于工业控制、汽车电子、医疗设备等领域。Cortex-M3系列内核的主频通常在50MHz-120MHz之间,具有高性能、强实时性和硬件保护等特点。
- Cortex-M4系列:基于Cortex-M3系列内核,增加了DSP和浮点运算单元,适用于音视频处理、图像处理、控制算法等领域。Cortex-M4系列内核的主频通常在80MHz-240MHz之间,具有高性能、DSP(Digital Signal Processing)和浮点运算能力等特点。
- Cortex-M7系列:基于Cortex-M4系列内核,增加了双精度浮点运算单元和指令预取器等特性,适用于音视频编解码、高速通信等领域。Cortex-M7系列内核的主频通常在200MHz-400MHz之间,具有高性能、低延迟和高精度的浮点运算能力等特点。
常用ARM芯片厂商
国内/国外 | 公司 | 知名芯片 | 官网 |
---|---|---|---|
国外 | 意法半导体 | STM32 | https://www.st.com/ |
国外 | 恩智浦 | LPC系列,K系列,KL系列,i.MX系列 | https://www.nxp.com/ |
国外 | 瑞萨电子 | RA系列 | https://www.renesas.cn |
国外 | 德州仪器 | AM系列 | https://www.ti.com/ |
国外 | 高通 | Qualcomm | https://www.qualcomm.com/ |
国内 | 兆易创新 | GD32系列 | https://www.gigadevice.com.cn/ |
国内 | 国民技术 | N32系列 | https://www.nationstech.com/ |
国内 | 武汉芯源 | CW32 | https://www.whxy.com/ |
国内 | 深圳航顺 | HK32 | https://www.hsxp-hk.com/ |
国内 | 华大半导体 | HC32 | https://www.hdsc.com.cn/ |
国内 | 瑞芯微 | RK系列(rk3568) | http://www.rock-chips.com/ |
国内 | 全志科技 | R系列,V系列,A系列 | https://www.allwinnertech.com/ |
国内 | 联发科 | MTK | https://www.mediatek.com/ |
GD32
GD32是一款由中国芯片制造商GigaDevice推出的32位ARM Cortex-M微控制器系列。
它们与 STMicroelectronics 的STM32系列微控制器非常相似,使用相同的 ARM Cortex-M 内核,提供广泛的外设和功能,包括各种通信接口、模拟输入输出、数字输入输出、定时器、中断控制器等等。
GD32的产品系列
● L系列:基于Cortex-M23内核,主要特点是低功耗和低成本,适用于高端家电、消费电子、医疗设备、工业控制等领域。
● F系列:基于Cortex-M4内核,主要特点是高性能和丰富的外设资源,适用于高端消费电子、医疗设备、工业控制、安防监控等领域。
● E系列:基于Cortex-M0+内核,主要特点是超低功耗和小尺寸,适用于物联网、可穿戴设备、智能家居等领域。
● V系列:基于Cortex-M0内核,主要特点是低功耗和高性价比,适用于低端家电、消费电子、LED灯等领域。
● C系列:基于Cortex-M4内核,主要特点是高性能和低功耗,适用于智能家居、安防监控、工业控制等领域。
● W系列:基于Cortex-M33内核,主要特点是超低功耗和高性价比,适用于物联网、可穿戴设备等领域。
● A系列:基于Cortex-A7内核,主要特点是高性能和丰富的外设资源,适用于高端工业控制、嵌入式计算机等领域。
开发板
本文以 立创·天空星开发板-GD32F407VET6-青春版 作为学习的板子,记录学习笔记。
开发板资源、尺寸标注图
设计图纸
详细设计图:https://pro.lceda.cn/editor#id=1949206d8e694271bd8ab6f068e260c2
GD32F407
GD32F4xx系列器件是基于Arm® Cortex®-M4处理器的32位通用微控制器。
存储器的组织采用了哈佛结构,预先定义的存储器映射和高达4 GB的存储空间,充分保证了系统的灵活性和可扩展性。
- GD32F405/407为Cortex®-M4互联型
- 512K~3072K Flash,192K SRAM
- 高达168MHz,支持FPU
- 2.6~3.6V供电,5V容忍I/O
- -40℃~85 ℃工业级温度范围
- 全系列硬件管脚及软件兼容
Keil ARM 安装
Keil是一家嵌入式系统开发工具提供商,其主要产品是Keil MDK(Microcontroller Development Kit),是一款集成开发环境(IDE),支持多种芯片架构,包括ARM、C51、C251等,可以进行代码编辑、编译、调试、仿真等工作。
下载地址
keil社区版下载地址:https://www.keil.arm.com/mdk-community/
keil官方支持版下载地址:https://www.keil.com/download/product/
安装步骤
一般来说,一路点击下一步即可,如果需要自定义安装路径,有以下几点注意事项:
● 路径中一定不要有中文或空格路径
● Core路径要放到和C51相同的Keil路径(例如默认的C:\Keil_v5)
● 如果安装路径和C51不同,会导致C51项目无法直接双击打开
● 安装过程如提示有文件覆盖就点确认,进行覆盖
● Pack路径可以使用默认路径,也可以参考以下自定义路径结构
Core:D:\Program\Keil\KeilC51_v5\
Pack:D:\Program\Keil\KeilC51_v5\ARM\Packs
附上一张图,更加直观:
GD32开发包安装
GD32 开发包可以选择在线安装和离线安装两种方式
- 在线安装
打开 Keil, 点击 Pack Installer, 选择 GD32F407VE,然后点击安装,下图是已经安装过后的界面
- 离线安装
从官网下载 GD32F4XX AddOn 文件 进行安装,直接允许下载后的文件即可,它会自动定位到 Keil Arm 的包存储路径。需要注意的是,该文件放置的路径不要有特殊符号。例如
D:\Program\Keil\GigaDevice.GD32F4xx_DFP.3.2.0.pack
点灯仪式
创建一个项目,点亮开发板上的用户 LED 灯
- 下载 固件库文件
文件目录结构如下所示:
GD32F4xx_Firmware_Library_V3.2.0
├─Docs
│ ├─Schematic
│ └─User Guide
├─Examples
├─Firmware
│ ├─CMSIS
│ │ └─GD
│ │ └─GD32F4xx
│ │ ├─Include
│ │ └─Source
│ │ ├─ARM
│ │ └─IAR
│ ├─GD32F4xx_standard_peripheral
│ │ ├─Include
│ │ └─Source
│ └─GD32F4xx_usb_library
├─Template
│ ├─IAR_project
│ └─Keil_project
└─Utilities
- 新建项目,规划的目录结构如下:
GD32F407VE_01_LED
├─Driver
├─Firmware
│ ├─CMSIS
│ │ └─GD
│ │ └─GD32F4xx
│ │ ├─Include
│ │ └─Source
│ │ ├─ARM
│ │ └─IAR
│ ├─GD32F4xx_standard_peripheral
│ └─GD32F4xx_usb_library
├─Project
│ ├─Listings
│ └─Objects
└─User
不难理解的是,CMSIS(Cortex Microcontroller Software Interface Standard) 目录中存放的是固件抽象层的代码。
所以,在 CMSIS
目录存放的是 core_cm4.h
、core_cm4_simd.h
、 core_cmFunc.h
、 core_cmInstr.h
这些头文件,它们为 Cortex-M 处理器系列定义了通用工具接口,使得开发人员可以为处理器和外设实现一致且简单的软件接口。
在 CMSIS\GD\GD32F4xx\
目录中存放的是针对 CMSIS
中存放的抽象接口的具体实现,这些实现是根据不同的芯片来决定的。我们采用的是 GD32F407VE
,故而,这些实现由兆易创新公司提供。
另外,SPL(Standard Peripheral Library)目录中存放的是 GD32 标准库文件。Project 目录就是 Keil 的工程目录,以及相关的临时文件。
设计好目录结构后,就可以将固件库中的模板代码拷贝到自己的工程中。
- 将固件库中的
Firmware
完整拷贝到项目中,名称也是Firmware
- 将固件库中的
Template
中的代码拷贝到项目中的User
中。包括:gd32f4xx_it.c
、gd32f4xx_libopt.h
、main.h
、systick.h
、gd32f4xx_it.h
、main.c
和systick.c
创建好的项目结构如下:
同时需要将文件设置到 Include Path 中,如下所示:
- 修改主时钟频率
打开 system_gd32f4xx.h
文件,将 __SYSTEM_CLOCK_240M_PLL_25M_HXTAL
注释,这个时钟配置代表主频是 240MHz,晶振频率为 25MHz,但 天空星开发板-GD32F407VET6 的主频是 168MHz,外部晶振是 8MHz,所以,需要将 __SYSTEM_CLOCK_168M_PLL_8M_HXTAL
注释解开。如下所示:
4. 编写点灯代码
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
void GPIO_config(void) {
// 1. 时钟初始化
rcu_periph_clock_enable(RCU_GPIOB);
// 2. 配置GPIO 输入输出模式
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
// 3. 配置GPIO 模式的操作方式
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_2);
}
int main(void) {
systick_config();
GPIO_config();
while(1) {
// 设置PB2为高电平
gpio_bit_set(GPIOB, GPIO_PIN_2);
delay_1ms(1000);
// 设置PB2为低电平
gpio_bit_reset(GPIOB, GPIO_PIN_2);
delay_1ms(1000);
}
}
- 修改晶振频率值
从 main.c 文件打开 gd32f4xx.h
文件,
将晶振的频率改成 8MHz
- 按 F8 键开始烧录,将程序烧录到开发板中,即可实现用户 LED 每隔一秒闪烁的效果。
排错
- 编译报错,提示找不到
led_spark
函数。
因为本项目是从固件库中的模板代码中复制的代码,可能会出现问题。
点击编译按钮后,发现会有一个报错信息,说找不到 led_spark
函数,定位到该函数在 gd32f4xx_it.c
的 SysTick_Handler 函数中。这个是触发中断后调用的函数,用不着它就将其删除即可。
- 烧录不了程序
检查是否是连接线是否正连接。同时在 Debug 的设置中使用 CMSIS-DAP Debugger
作为调试器。
在 Flash Download 中勾选 Reset and Run,使得烧录后直接运行。