首页 > 编程语言 >零基础国产GD32单片机编程入门(一)GD32单片机GPIO输出Keil5工程创建含源码

零基础国产GD32单片机编程入门(一)GD32单片机GPIO输出Keil5工程创建含源码

时间:2024-08-24 13:24:25浏览次数:13  
标签:输出 引脚 低电平 单片机 源码 GD32 GPIO

文章目录

一.概要

GPIO(general porpose intput output):单片机通用输入输出端口的简称。可以通过单片机烧录的程序代码控制单片机引脚输出高电平或者低电平,也可以读取引脚电平信号为高电平还是低电平。STM32单片机的GPIO引脚与外部设备连接起来,从而实现与外部模块通信,控制以及数据采集的功能。
输出电压:高电平:3.3V,低电平:0V
输入电压:高电平:3.3V,低电平:0V,部分管脚容忍5V输入

引脚图中的 GPIOA—GPIOD口 等均属于 GPIO 引脚。从引脚图可以看出,GPIO 占用了 GD32芯片大部分的引脚。GPIOA端口,它有 PA0-PA15。

在这里插入图片描述

二.GD32单片机GPIO内部结构图

如下图所示,GPIO口可以通过寄存器配置成各种模式:

模拟输入(Analog Input)则用于 ADC 电压采集,一般是采集0~3.3V的电压信号。

浮空输入(Input floating)就是读取引脚高低电平信号,完全由外部的输入决定,一般接按键的时候使用这个模式。

上拉下拉输入(Input Pull-Up,Input Pull-Down)就是读取引脚高低电平信号,但开启上拉时引脚默认电压为高电平,开启下拉时,引脚默认电压为低电平,这样就可以消除引脚不定状态的影响,上下拉电阻的值在40K欧姆左右。

推挽模式输出(Output Push-Pull),推挽模式时双 MOS 管以推挽方式工作,配置寄存器可控制 I/O 输出高电平或者低电平

开漏模式输出(Output Open-Drain)开漏模式输出时,只有 N-MOS 管工作,配置寄存器可控制 I/O 输出高阻态或低电平,没法输出高电平,要输出高电平得外部上拉。

复用功能推挽开漏模式(AF),一般I/O口需配置成通讯外设引脚的都时候都需要配置成这个模式。在这个模式下,输出和输出速度都可配置,可工作在开漏及推挽模式,输出信号由外设接口(比如USART,SPI等)决定。一般直接用外设接口的寄存器来获取引脚输入电平信号。
在这里插入图片描述
在程序中通过两个32位的控制寄存器(GPIOx_CTL0/ GPIOx_CTL1)和两个32位
的数据寄存器(GPIOx_ISTAT, GPIOx_OCTL)配置GPIO管脚的各种模式。
在这里插入图片描述
在这里插入图片描述

三.GD32单片机GPIO输入输出信号流向

如下图上半部分,就是一个GPIO推挽输出的信号流向:
输出数据寄存器输出一个高电平时,P-MOS 管导通,N-MOS 管截止,对外输出高电平(3.3V)。
输出数据寄存器输出一个低电平时,P-MOS 管截止,N-MOS 管导通,对外输出低电平(0V)。

如下图下半部分,就是一个GPIO输入的信号流向:
从单片机I/O引脚进来就连接到TTL施密特触发器就把电压信号转化为0、1的数字信号存储在输入数据寄存器。
施密特触发器,当输入电压高于正向阈值电压,输出为1,当输入电压低于负向阈值电压,输出为0,当输入在正负向阈值电压之间,输出不改变。

在这里插入图片描述

四.GD32单片机GPIO引脚的复用以及重映射

GPIO引脚的复用:

GD32有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
例如串口0的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做串口0的发送接收引脚的时候,叫端口复用。

GPIO软件重映射(Remap):
一些引脚复用功能可以重映射到其他两个不同的引脚上,用于优化引脚的输出和PCB的布线,一个外设的引脚除了具有默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其它的端口。
比如PB4引脚,默认是下载口的一个复位引脚,现在都用SWD下载,这个引脚就可以作为普通GPIO,根据表格需要重映射配置才可以成为普通GPIO。

查看数据手册中PB4需要重映射才能配置成普通GPIO:
在这里插入图片描述

查看应用手册,需要配置AFIO_ PCF0寄存器中的SWJ_CFG位实现重映射。
在这里插入图片描述

在这里插入图片描述

PB4配置成普通GPIO的配置代码如下(基于GD32标准库):

rcu_periph_clock_enable(RCU_AF);//使能复用功能时钟
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);//下载口NJTRST引脚重映射成普通I/O口rcu_periph_clock_enable(RCU_GPIOB);//GPIOB时钟打开
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);//PB4配置成输出

引脚重映射和引脚复用不是一个概念,引脚重映射是把引脚的复用功能,也就是把片上外设的功能映射到其他引脚上。

五.从零开始创建一个GD32F103C8T6单片机GPIO输出驱动LED灯例程

硬件准备:

STLINK接GD32F103C8T6开发板,STLINK接电脑USB口。

在这里插入图片描述
软件准备:

电脑上得安装好Keil5软件,并安装好STLINK驱动,GD32F103的Pack包GigaDevice.GD32F10x_DFP。注意Keil5下不同品牌型号单片机需安装对应的Pack包。
Keil5安装使用见CSDN文章:
Keil5安装使用说明

创建工程:

1.Keil5新建工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.选择必须添加的系统文件以及外设文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.添加main相关的文件到文件夹
在这里插入图片描述

4.添加main相关的文件到Keil5工程
在这里插入图片描述

在这里插入图片描述

6.添加代码
在这里插入图片描述

7.编译代码并下载程序到单片机

编译代码
在这里插入图片描述

配置下载器选择
在这里插入图片描述

下载
在这里插入图片描述

下载完后,按下板子复位按键,板子灯就能闪烁了

main代码如下:


#include "gd32f10x.h"
#include "gd32f10x_libopt.h"
#include "systick.h"


int main(void)
{
	rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1);//设置主频108M(#define __SYSTEM_CLOCK_108M_PLL_HXTAL         (uint32_t)(108000000)),8M外部晶振  (#define HXTAL_VALUE    ((uint32_t)8000000))
  	systick_config();//配置1ms SysTick
	rcu_periph_clock_enable(RCU_AF);//AF时钟使能 
	
	gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);//下载口NJTRST引脚当做普通I/O口
	rcu_periph_clock_enable(RCU_GPIOB);//GPIOB时钟打开
	gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_4);//PB4配置成输出
	
    while(1)
    {
        delay_1ms(1000);//等待1000ms
        gpio_bit_set(GPIOB, GPIO_PIN_4);//PB4输出高
        delay_1ms(1000);
        gpio_bit_reset(GPIOB, GPIO_PIN_4);//PB4输出低
    }
 
}


一般我们工程创建好后,后续工程代码修改添加,就不会每次都重新创建了。我们整理了下我们的GPIO工程,把外设文件,启动文件,系统文件规整到文件夹,后续实验都在这个工程上修改。
在这里插入图片描述

六.工程源代码下载

GPIO工程代码及GD32 Keil5 Pack安装文件下载地址
在这里插入图片描述

通过百度网盘分享的文件:1.GPIO输出实验.zip,2.GigaDevice.GD32F10…等2个文件
链接:https://pan.baidu.com/s/1ArouHh0wR2-ArVKK4gZJ6w
提取码:b6m1

如果链接失效,可以联系博主给最新链接

CSDN代码下载

七.小结

GPIO是GD32单片机开发中的最基本操作,学会了GPIO,可以驱动继电器,LED灯等基本控制。了解了重映射的配置,同时方便后续画板子布局。

标签:输出,引脚,低电平,单片机,源码,GD32,GPIO
From: https://blog.csdn.net/zy2232652/article/details/141469925

相关文章

  • 【排序算法】八大排序(下)(c语言实现)(附源码)
    ......
  • Java计算机毕业设计学生综合成绩测评系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在当今教育信息化快速发展的时代背景下,学生综合成绩测评系统已成为高等教育管理不可或缺的一部分。随着学生数量的增长、课程体系的复杂化以及教育评......
  • Java计算机毕业设计校园资源共享平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育规模的持续扩大,校园内资源分配不均与闲置浪费现象日益凸显。图书资料、学习用品、实验器材乃至生活物品等,在学生们手中往往难以实现高效......
  • Java计算机毕业设计校园疫情防控系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续影响的背景下,校园作为知识传播与人才培养的重要场所,其疫情防控工作显得尤为重要。随着复学复课的逐步推进,如何科学、高效地管理校......
  • Java计算机毕业设计学术助手开发(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着信息技术的飞速发展,学术研究领域正经历着前所未有的变革。面对海量且日益增长的学术资源,科研工作者在寻找、筛选及整合相关信息时面临着巨大挑战......
  • 009java jsp SSM springboot月度员工绩效考核管理系统绩效指标管理(源码+文档+PPT+任务
     项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:window......
  • 015java jsp SSM springboot在线视频课程教育学习平台系统(源码+文档+PPT+开题+运行视
     项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:window......
  • # 为什么Qt源码中要用d_ptr和q_ptr
    为什么需要d_ptr和q_ptr  Qt中的公有类中一般都会包含d_ptr这样一个私有类型的指针,指针指向该类对应的私有类,引入这个指针主要是为了解决二进制兼容的问题。q_ptr是和d_ptr配套的,后面会介绍到。什么是二进制兼容  Qt作为一个第三方库,发布后会有很多公有类提供给第三方使用......
  • LinkedHashMap&LinkedHashSet源码解析
    LinkedHashMap概述LinkedHashSet使用适配器模式包装了LinkedHashSet一个有序的散列表,允许key为null也允许value为空,从名字上可以看出使用链表维护了有序性在元素存储时,在原来的HashMap的数组+链表的基础上,为每个元素添加了pre和next指针,构成了一个双向链表注意:内部没有使用红......
  • 直播电商源码,用异步加成打造更高性能
    直播电商源码,用异步加成打造更高性能单线程和异步js是单线程语言,同时只能做一件事浏览器和node已支持js启动进程,如WebWorkerjs和DOM渲染共用同一个线程,因为js可修改DOM结构遇到等待(网络请求,定时任务)不能卡住,所以需要异步同步会阻塞代码执行,异步不会阻塞代码......