GD32学习

article/2025/9/27 6:29:06

1.简介

关于兆易创新GD32的产品,目前在单片机MCU的业务上,GD全部是32bit的单片机,目前GD32的单片机从内核上区分有Cortex-M3、Cortex-M4、Cortex-M23三个系列,其中红色框框为主推系列:

在这里插入图片描述
开发调试环境: 支持主流的Keil MDK4/5、IAR、Eclipse等IDE环境
开发编程/烧写工具: 因为采用标准的Cortex-M内核,所有支持标准的JlinkV8/V9、Ulink2和自己的GD-link工具
开发特色: 同样是基于标准库的形式进行开发,每一个外设都有相对应的API封装库,不必要去熟悉每个外设的底层寄存器,可以快速上手

2.新建工程(IAR、Keil5)

2.1 IAR工程(基于GD32F105RCT6)

第一步:
GD官网下载GD32F10x_Firmware_Library_V2.2.2
新建工程文件夹iar_progect_uart其中包括:
Application:GD32F10x_Firmware_Library_V2.2.2\Template所包含文件
Firmware: GD32F10x_Firmware_Library_V2.2.2\Firmware
Utilities: GD32F10x_Firmware_Library_V2.2.2\Utilities在这里插入图片描述
第二步:
新建工程,选择工程文件夹iar_project_uart,输出工程名字iar_uart:
在这里插入图片描述
右键add,添加5个group分别为:
在这里插入图片描述
第三步:
向group中添加源文件(.C文件)
Application分组中添加Application文件夹中的.c文件
在这里插入图片描述
CMSIS中添加Firmware\CMSIS\GD\GD32F10x\Sourcesystem_gd32f10x.c
在这里插入图片描述
Peripherals中添加Firmware\GD32F10x_standard_peripheral\Source所有.c
在这里插入图片描述
Startup中添加Firmware\CMSIS\GD\GD32F10x\Source\IAR\startup_gd32f10x_cl.s
在这里插入图片描述
Utilities中添加用户编写的文件
在这里插入图片描述
第四步:
Options设置:
选择芯片型号,需要提前安装GD32F10x_AddOn_V2.0.2支持包
在这里插入图片描述
然后添加头文件路径:
在这里插入图片描述
第五步:
编译完成后烧录

2.2 Keil5工程(基于GD32F105RCT6)

第一步:
创建工程文件夹,准备好相应文件
在这里插入图片描述
建立工程,选择工程文件夹,然后选择对应芯片
在这里插入图片描述
第二步:
同样创建五个group,然后添加.c文件:
在这里插入图片描述
在这里插入图片描述
需要注意的是Startup中添加Firmware\CMSIS\GD\GD32F10x\Source\ ARM \startup_gd32f10x_cl.s
第三步:
添加头文件路径与宏定义
在这里插入图片描述
补充:Use MicroLIB 需要勾选,否则程序下载后不运行
在这里插入图片描述

第四步:
设置下载器,下载程序调试
在这里插入图片描述
在这里插入图片描述

3.时钟配置

第一步:
打开时钟配置文件,修改为外部高速晶振
在这里插入图片描述
在这里插入图片描述
第二步:
选择外部晶振频率
在这里插入图片描述
第三步:
修改gd32f10x.h中外部晶振的频率值
在这里插入图片描述
第四步:
上述操作只是选择了108MHz作为时钟频率,但距离真正产生108MHz时钟还需要先对时钟源(高速外部时钟)进行倍频等处理。
在system_gd32f10x.c文件中找到如下代码段:

static void system_clock_108m_hxtal(void)
在这里插入图片描述

4 GPIO的使用

4.1 输出高电平

1.使能时钟
2.配置GPIO端口
3.电平置零

void user_gpio_init_PA9()
{/* enable clock */rcu_periph_clock_enable(RCU_GPIOA);/* configure GPIO port */gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);GPIO_BC(GPIOA) = GPIO_PIN_9;
}
 使用:gpio_bit_set(GPIOA,GPIO_PIN_9);gpio_bit_reset(GPIOA,GPIO_PIN_9);gpio_input_bit_get(GPIOA,GPIO_PIN_9);gpio_output_bit_get(GPIOA,GPIO_PIN_9);

5 ARM内核中断使用

5.1中断知识

1.优先级数值越小,优先级越高。
2. Cortex-M支持中断嵌套,高优先级异常会抢占低优先级异常。
3. 有三个系统异常:复位/NMI/Hardfault 它们的优先级是负数
4. GD32Fxxx使用了4bit来表达优先级,4bit分为抢占优先级和子优先级。
5. 抢占优先级高的会打断抢占优先级低的中断;
如果抢占优先级相同,谁先发生的先执行完谁,若同时发生,则执行子优先级高的中断;
如果抢占优先级相同,子优先级也相同,若同时发生,则比较中断编号,中断编号越小优先级越高。
6.EXTI是中断/事件控制器包括边沿检测电路,能够向处理器内核产生中断请求或者唤醒事件,三种触发类型:上升沿、下降沿、任意沿。
7.Arm Cortex-M3处理器和嵌套式矢量型中断控制器(NVIC)在处理(Handler)模式下对所有异常进行优先级区分以及处理。当异常发生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序 (ISR)后自动将其出栈。
取向量是和当前工作态压栈并行进行的,从而提高了中断入口效率。处理器支持咬尾中断,可实现背靠背中断,大大削减了反复切换工作态所带来的开销。
8.EXTI触发源包括来自I/O管脚的16根线以及来自内部模块的4根线。(包括LVD、RTC闹钟、USB唤醒、以太网唤醒)。
通过配置GPIO模块的AFIO_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源。
在这里插入图片描述

5.2 按键中断的使用

int main(void)
{systick_config();//系统配置rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);gpio_bit_reset(GPIOA, GPIO_PIN_9);//配置一个输出控制LED的GPIOrcu_periph_clock_enable(RCU_GPIOB);//配置一个输入按键用于中断的产生gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);rcu_periph_clock_enable(RCU_AF);//中断时钟nvic_irq_enable(EXTI0_IRQn, 2U, 0U);//中断使能gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_0);//设置中断源为PB0exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//中断/事件控制器初始化exti_interrupt_flag_clear(EXTI_0);//清除中断标志位uint16_t temp = 0;while(1){temp++;delay_1ms(1000);}
}
void EXTI0_IRQHandler(void)//中断处理函数
{if(RESET != exti_interrupt_flag_get(EXTI_0)){gpio_bit_write(GPIOA, GPIO_PIN_9, (bit_status)(1 - gpio_input_bit_get(GPIOA,GPIO_PIN_9)));exti_interrupt_flag_clear(EXTI_0);}
}

中断处理函数的名字在启动文件startup_gd32f10x_cl.s中:
在这里插入图片描述
中断号IRQn在gd32f10x.h中:
在这里插入图片描述
EXTI线的编号为0-19共20根,位置在gd32f10x_exti.h中:

在这里插入图片描述

5.3 串口中断

USART:通用同步和异步收发器
UART:通用异步收发器
当进行异步通信时,这两者是没有区别的。区别在于USART比UART多了同步通信功能。 这个同步通信功能可以把USART当做SPI来用,比如用USART来驱动SPI设备。

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

同步是阻塞模式,异步是非阻塞模式。

其中SPI IIC为同步通信 UART为异步通信, usart为同步&异步通信。
单工、半双工、全双工
单工数据传输只支持数据在一个方向上传输;
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
I2C是半双工,SPI是全双工,uart是全双工。

设置uart3接收中断:

uart3_init();/* USART interrupt configuration */
nvic_irq_enable(UART3_IRQn, 0, 0);/* enable receive interrupt */
usart_interrupt_enable(UART3, USART_INT_RBNE);// receive buffer not empty
void UART3_IRQHandler(void)
{if(RESET != usart_interrupt_flag_get(UART3, USART_INT_FLAG_RBNE)){/* read one byte from the receive data register */rx_buffer[rx_counter++] = (uint8_t)usart_data_receive(UART3);}user_gpio_toggle(GPIO_PA9);
}

6 ADC的使用

7 定时器的使用


http://chatgpt.dhexx.cn/article/f25kiMtG.shtml

相关文章

了解GD2函数库

PHP目前在Web开发领域已经被广泛应用,PHP不仅可以生成HTML页面,而且可以创建和操作二进制形式的数据,如图像,文件等。其中使用PHP操作图形可以通过GD2函数库来实现。利用GD2函数库可以在页面中绘制各种图像,统计图&…

GDKOI2023 D2T1

前言 相比于D1T1,这题才是真正的签到题,然而,我却爆0了。为了纪念这悲壮的0分,写下了这篇题解。 题目大意 给出 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105) 个字符串及其出现时间(以几点几分给出&…

一文看懂 GD2库

文章目录 一、 GD2简介1、 验证码(实际上是一个img) 二、 GD2库使用步骤2.1添加扩展2.2修改php配置文件2.3重启服务 三、 GD2里面的常用方法3.1 imagecreate3.2 imagecolorallocate3.3 imagefill3.4 输出图像资源3.5创建真彩画布3.6在图像中写文字3.6.1i…

MySQL的主从复制

MySQL的主从复制 目录 为什么需要主从复制?MySQL 主从复制概念MySQL 主从复制主要用途MySQL主从形式 一主一从一主多从,提高系统的读性能多主一从 (从5.7开始支持)双主复制级联复制 MySQL 主从复制原理MySQL主从复制的过程MySQL…

redis主从结构 (一主一从,一主多从,主从从)

关闭防火墙和selinux systemctl disable firewalld.service systemctl stop firewalld vim /etc/selinux/config sed -n 7p /etc/selinux/config SELINUXdisabled setenforce 0 从服务器首次做的是全量同步,且同步的数据会覆盖本机的数据 master 192.168.…

Mysql主从模式

文章目录 👉🏻前言❤️主从模式说明🤍logbin日志🤍Mysql主从复制的流程🤍主从复制中遇到的问题 ❤️主从模式配置🤍Master配置🤍Slave配置 ❤️其他设置🤍半同步复制🤍并…

mysql主从同步

目录 1.创建主从同步用户 2.授予主从同步权限 3.刷新权限 4.修改master配置文件 5.重启MySQL 6.查看master的状态 7.修改slave配置文件 8.重启mysql 9.构建主从连接信息 10.开始同步 11.查看同步信息 12.同步失败 13.同步报错 13.1 server_id冲突 13.2 initiali…

mysql主从原理

目录 一、主从复制原理 1.原理 2.也就是说 3.注意 随着访问量的不断增多,mysql数据库的压力不断增加,需要对mysql进行优化和架构改造,可以使用高可用、主从复制、读写分离、拆分库、拆分表进行优化。下面我们来学习mysql主从复制高可用如…

MySQL主从复制

一、MySQL主从复制原理 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能,一般都会采用「主从复制」。 比如:在复杂的业务系统中,有一句sql执行后导致锁表,并且这条sql的的执行时间有比较长&…

Mysql主从同步配置

1. mysql主从同步定义 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的&am…

MySQL 的主从架构

数据库主从概念、优点及用途 主从数据库中主是主库的意思,从是从库的意思。数据库主库对外提供读写操作,从库对外提供读操作。 数据库为什么需要主从架构呢? 高可用,实时灾备,用于故障切换。比如主库挂了&#xff0c…

MySQL主从同步(一主一从、一主多从、主从从)等结构的概述与配置

前言:前面我们了解了MySQL数据库的基础知识,今天及接下来的五天时间里我会给大家带来MySQL进阶方面的一些学习总结,如有不足,还请大家留言指出;下面我们就开始今天的内容。 ** 部署mysql主从同步结构 **  主从同步…

MySQL的主从

前言 金三银四面试的时候,面试官经常会问MySQL主从。今天就跟大家聊聊MySQL的主从。 数据库主从概念、优点、用途 数据库主从复制原理 主主、主从、主备的区别 MySQL是怎么保证主从一致的 数据库主从延迟的原因与解决方案 聊聊数据库的高可用方案 1. 数据库…

主从原理,一主多从架构

主从架构总结 主从原理 用binlog做主从,redolog只支持innodb 过程 ①start slave后从库启动io线程连接主库,请求读日志②dump线程根据请求信息读取指定位置后的日志③完成后就响应成功,没有确认机制④IO线程收到信息,将受到的日…

主从复制:主从复制的概述、一主一从架构搭建主从复制的原理、同步数据一致性问题

文章目录 1. 主从复制的概述1.1 如何提升数据库的并发能力1.2 主从复制的作用 2. 主从复制的原理2.1 原理剖析2.2 复制的最大问题2.3 复制的基本原则 3. 一主一从架构搭建3.1 准备工作3.2 主机配置文件3.3 从机配置文件3.4 建立账户并授权3.5 配置需要复制的主机3.6 测试3.7 停…

c/c++经典面试题(高频考点)

一、数据结构及算法(快排、归并、堆排等) 十大排序算法 数据结构(c/c版)-严蔚敏 数据结构与算法(思维导图) E:\学习\4.数据结构(C语言版)].严蔚敏_吴伟民.扫描版.pdf 数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图 1.快速排…

吐血整理 | 最常见的 C/C++ 面试题(含答案)

大家好,我是 K 哥! 最近群里有小伙伴想跳槽,问我有没有常见的 C/C 面试题。这不正好,K 哥之前整理了一份 PDF,里面包含了各种经典的 C/C 题目,当然更重要的是还附带了非常详细的答案。 K 哥不仅面试之前会反…

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C的区…

C++面试题总结,一篇就够了

C面试题汇总 1. C基础1.1 内存模型1.1.0 内存四区1.1.1 简述C、C程序编译的内存分配情况1.1.2 分配函数与释放函数1.1.2.1 malloc / free1.1.2.2 new / delete1.1.2.3 new/delete 与 malloc/free 区别1.1.2.5 calloc 、realloc1.1.2.6 在C中,使用malloc申请的内存能…

C面试题--汇总

目录 一、C语言基础面试题1. gcc编译器编译的完整流程,分别有什么作用?2.什么是回调函数?3.地址能否使用 printf函数中的 %u形式打印?4.结构体与共用体(联合体)的区别5. static、const、volatile关键字有什…