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

news2024/9/22 5:28:58

文章目录

    • 一.概要
    • 二.GD32单片机GPIO内部结构图
    • 三.GD32单片机GPIO输入输出信号流向
    • 四.GD32单片机GPIO引脚的复用以及重映射
    • 五.从零开始创建一个GD32F103C8T6单片机GPIO输出驱动LED灯例程
    • 六.工程源代码下载
    • 七.小结

一.概要

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灯等基本控制。了解了重映射的配置,同时方便后续画板子布局。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何禁止电脑访问网站

一、修改Hosts文件 找到Hosts文件:在Windows系统中,Hosts文件通常位于C:\Windows\System32\drivers\etc\目录下。 编辑Hosts文件:以管理员身份打开记事本或任意文本编辑器,然后找到并打开Hosts文件。 添加禁止访问的域名&#…

【小趴菜前端实习日记4】

el-table数据更新视图不更新的问题、el-dialog居中展示、el-form表单验证之对象属性验证、vue2过滤器 一、el-table数据更新视图不更新的问题二、el-dialog居中展示三、el-form表单验证之对象属性验证四、vue2过滤器 一、el-table数据更新视图不更新的问题 手动触发元素更新&a…

【C#】字段

C# 类具有哪些成员? 字段 1.什么是字段 字段(field)是一种表示与对象或类型(类与结构体)关联的变量字段是类型的成员,旧称“成员变量”与对象关联的字段亦称“实例字段”与类型关联的字段称为“静态字段”,由static修饰 通过一个代码来详细了解实例字段与静态字段…

简过网:大专学历可以考教师编吗?

大专学历可以考教师编吗? 在这里可以明确的告诉大家,大专考生可以报考小学老师,只要你有教师资格证,年龄在18~35周岁之间,大专的学历就可以报考小学教师编啦。 如果没有教师资格证,在备考教师编前&#x…

python从入门到精通:数据可视化-图形开发

1、json数据格式 • Json是一种轻量级的数据交互格式,可以按照Json指定的格式去组织和封装数据 • Json本质上是一种带有特殊格式的字符串 主要功能:json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互&#xf…

惠海H6900B升压恒流调光IC芯片3.7V7.4V12V升压18V24V36V 48V 植物灯/电解水

H6900B升压型LED恒流驱动芯片是一款功升压恒流芯片,专为满足高亮度LED灯串的恒流驱动需求而设计。它结合合了多种功能电路,包括误差放大器、固定关断时间控制电路以及恒流驱动电路等,很好改良了LED灯的稳定。 一、产品特征 1.内置耐压60V功…

万字干货!手把手教你如何训练超大规模集群下的大语言模型

分布式训练的主要难点 简单介绍一下混合并行中经典的三种并行方案。首先是数据并行,简称 DP。正如其名,数据并行是将数据分割到不同的计算设备上,然后由这些设备完成各自的计算任务。第二种是张量并行,简称 TP。张量并行是将模型中…

Swift concurrency 5 — async let的理解与使用

在前面的文章中,我们介绍过async/await这两个关键字,也了解了异步方法,在一个Task中,多个加了await的异步方法是顺序执行的,一个接着一个,这个在有些情况下是很好的,比如用户登录,获…

element-ui 表单Cannot read property ‘indexOf‘ of undefined

在使用resetField 报错Cannot read property ‘indexOf’ of undefined 复现说明 报错展示 解决方案 用clearValidate()替换resetFields()

Mysql基础练习题 183.找出所有从不点任何东西的顾客 (力扣)

183.找出所有从不点任何东西的顾客 建表插入数据: #插入数据,顾客表和订单表 Create table If Not Exists Customers (id int, name varchar(255)) Create table If Not Exists Orders (id int, customerId int) Truncate table Customers insert into…

Java面试宝典-java基础09

Java面试宝典-java基础09 81、String,Stringbuffer,StringBuilder 的区别82、Comparator 与 Comparable 有什么区别83、说说反射用途及实现原理,Java 获取反射三种方法84、&和&&的区别85、Java 创建对象有几种方式86、如何将 GB2312 编码字符串转换为 ISO-8859-…

一起学Java(11)-[日志篇]教你分析SLF4J源码,掌握Logger接口实现类加载原理

最近各种事情很忙,今天继续。在第十篇(一起学Java(10)-为项目引入Log框架(Log篇二-引入SLF4J接口层框架))中,我们为项目(https://github.com/lihongzheshuai/java-all-in-one)引入了SLF4J和Logback框架,按计划通过阅读源码研究下SLF4J的实现原…

如何在忘记密码或 ID 的情况下解锁 iPhone 15

您是否曾经因为忘记了 iPhone 密码而陷入困境,或者您是否多次错误地输入了屏幕时间密码并发现自己被锁定在 iPhone 之外? 被锁定和拒绝访问您的 iPhone 可能很常见,尤其是在您尚未配置 Face ID 的情况下。或者,如果 Face ID 无法正…

【机器学习】广义线性模型和一般线性模型的联系和区别以及如何选择合适的链接函数

引言 广义线性模型(Generalized Linear Models,简称GLM)和一般线性模型(通常指的是线性回归模型)都是统计建模中常用的工具,但它们在假设、适用范围和模型结构上有所不同 文章目录 引言一、广义线性模型和一…

黑马程序员Python机器学习|1机器学习概述

一 人工智能概述 1.机器学习和人工智能,深度学习的关系 2.机器学习可以做什么 翻译,智能客服。 二 什么是机器学习 1.机器学习的定义 从数据中学习,学习后得出的结论是模型(规律),通过这个规律去解决问题&a…

网络安全教程初级简介

随着技术的发展和信息池的增加,信息系统迫切需要建立网络安全措施,以保护输入这些系统的信息。网络安全是任何组织(从小型初创公司到大型跨国组织)的必备条件。 网络安全包括一系列技术、流程和实践,用于保护网络、设…

测试面试题,自动化测试与性能测试篇(附答案)

本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的、网络搜集(完善)、工作日常讨论等,分为以下十个部分,供大家参考。如有错误的地方,欢迎指正。有更多的面试题或面试中遇到的…

直播电商如何实现精细化运营,破除流量互卷的困境?

在当今电商行业的激烈竞争中,流量的获取与维持已成为品牌和商家关注的焦点。然而,随着市场逐渐饱和,流量成本不断攀升,传统的流量获取方式已不再可持续,精细化运营才是电商企业脱颖而出的关键。 本文将深入探讨电商行…

聚类算法k-means(手撕和调用skl)

定义 K均值聚类(k-means clustering)算法是一种常用的、基于原型的聚类算法,简单、直观、高效。其步骤为: 第一步:根据事先已知的聚类数,随机选择若干样本作为聚类中心,计算每个样本与每个聚类…

大数据及人工智能产品应该如何测试?

当今社会,人工智能的发展非常快,自从2016年AlphaGo战胜了世界围棋冠军李世石之后,人工智能的发展,特别是以深度学习为代表的人工智能的发展到了一个高速发展的阶段。 现在人工智能的发展已经渗透到了我们生活的方方面面&#xff…