本文以 立创·天空星开发板-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
#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,使得烧录后直接运行。
- 排错
还没有评论,来说两句吧...