GD32F103单片机-GPIO

news2024/11/16 6:03:33

GD32F103单片机-GPIO

  • 一、GPIO介绍
  • 二、GD32F103库函数介绍
  • 三、GPIO输入输出
    • 3.1 GPIO输出-LED闪烁
    • 3.2 GPIO输入-独立按键

  • STM32GPIO部分见STM32F1单片机-GPIO

一、GPIO介绍

  • GD32的GPIO同STM32一样,GPIO可以配置成8种输入输出模式,由软件配置成推挽输出开漏输出复用推挽输出复用开漏输出上拉输入下拉输入浮空输入模拟输入(ADC)
  • 当GPIO配置成输入模式时,可以选择弱上拉和下拉电阻,输出缓冲器禁用(不可以输出)
  • 当GPIO配置成输出模式时,弱上拉和下拉电阻禁用开漏模式输出低电平,高电平时为高阻态(无法输出高电平),允许外置上拉电阻拉高电平,从而可以准确读取外部输入信号推挽模式下,可以输出高低电平,可以进行读引脚输出电平的操作,若需要读取外部信号输入,必须重新初始化GPIO为输入模式
  • 复用输出模式由单片机外设控制引脚,模拟输入模式下接到ADC外设模拟输出模式接到DAC外设
  • 下图为GPIO结构图

在这里插入图片描述

二、GD32F103库函数介绍

  • 下面给出GD32F103库函数中GPIO部分
void gpio_init(uint32_t gpio_periph,uint32_t mode,uint32_t speed,uint32_t pin);//GPIO初始化:GPIOX,输入输出模式,速度,Pin口
void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);//GPIO置高电平
void gpio_bit_reset(uint32_t gpio_periph, uint32_t pin);//GPIO置低电平
void gpio_bit_write(uint32_t gpio_periph, uint32_t pin, bit_status bit_value);//GPIO写一位高低电平
void gpio_port_write(uint32_t gpio_periph, uint16_t data);//GPIO写16位口
FlagStatus gpio_input_bit_get(uint32_t gpio_periph, uint32_t pin);//读GPIO一位输入状态
uint16_t gpio_input_port_get(uint32_t gpio_periph);//读GPIO输入16位状态
FlagStatus gpio_output_bit_get(uint32_t gpio_periph, uint32_t pin);//读GPIO一位输出的状态
uint16_t gpio_output_port_get(uint32_t gpio_periph);//读GPIO输出16位状态
void gpio_pin_remap_config(uint32_t remap, ControlStatus newvalue);//GPIO重映射
void gpio_exti_source_select(uint8_t output_port, uint8_t output_pin);//外部中断源引脚选择

三、GPIO输入输出

3.1 GPIO输出-LED闪烁

  • 如下电路图所示,PB0给高电平,LED亮

在这里插入图片描述

  • GD32单片机同STM32一样需要在使用外设前开启时钟,具体步骤如下:开启GPIO时钟初始化GPIO口给GPIO高低电平
  • GD32官方提供Systick.c定时器延时函数,使用时需要初始化滴答定时器
int main()
{
	rcu_periph_clock_enable(RCU_GPIOB);//开启GPIOB时钟
	systick_config();初始化滴答定时器
	gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0);初始化PB0,配置成推挽输出
	while(1)
	{
		gpio_bit_set(GPIOB,GPIO_PIN_0);//PB0输出高电平
		delay_1ms(1000);//延时1000ms
		gpio_bit_reset(GPIOB,GPIO_PIN_0);//PB0输出低电平
		delay_1ms(1000);
	}
}

3.2 GPIO输入-独立按键

  • 按键部分原理图如下
  • 使用按键A点亮LED1,按键B点亮LED2

在这里插入图片描述

  • 具体步骤:开启GPIO时钟初始化GPIO口(LED和KEY) — 读取按键状态LED反转
  • 先给出LED.c
#include "gd32f10x.h"                   // Device header

/*
@brief:LED初始化
@param:无
@retval:无
*/
void LED_Init()
{
	//开启GPIOB时钟
	rcu_periph_clock_enable(RCU_GPIOB);
	//初始化PB0PB1,推挽输出
	gpio_init(GPIOB,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1);
}

/*
@brief:LED1状态反转
@param:无
@retval:无
*/
void LED1_Turn()
{
	if(gpio_output_bit_get(GPIOB,GPIO_PIN_0) == 0)//判断PB0输出低电平?
	{
		gpio_bit_set(GPIOB,GPIO_PIN_0);//PB0输出高电平
	}
	else
	{
		gpio_bit_reset(GPIOB,GPIO_PIN_0);//PB0输出低电平
	}
}

/*
@brief:LED2状态反转
@param:无
@retval:无
*/
void LED2_Turn()
{
	if(gpio_output_bit_get(GPIOB,GPIO_PIN_1) == 0)//判断PB1输出低电平?
	{
		gpio_bit_set(GPIOB,GPIO_PIN_1);//PB1输出高电平
	}
	else
	{
		gpio_bit_reset(GPIOB,GPIO_PIN_1);//PB1输出低电平
	}
}
  • 给出Key.c
#include "gd32f10x.h"                   // Device header
#include "systick.h"

/*
@brief:Key初始化
@param:无
@retval:无
*/
void Key_Init()
{
	//开启GPIOA时钟
	rcu_periph_clock_enable(RCU_GPIOA);
	//初始化PA0PA1,上拉输入
	gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1);
	//初始化滴答定时器
	systick_config();
}

/*
@brief:获取按键键码
@param:无
@retval:按键键码1 2
*/
uint8_t Key_GetNum()
{
	uint8_t KeyNum = 0;
	if(gpio_input_bit_get(GPIOA, GPIO_PIN_0) == 0)//按键1按下
	{
		delay_1ms(25);
		while(gpio_input_bit_get(GPIOA, GPIO_PIN_0) == 0);//检测松手
		delay_1ms(25);
		KeyNum  = 1;
	}
	if(gpio_input_bit_get(GPIOA, GPIO_PIN_1) == 0)//按键2按下
	{
		delay_1ms(25);
		while(gpio_input_bit_get(GPIOA, GPIO_PIN_1) == 0);//检测松手
		delay_1ms(25);
		KeyNum  = 2;
	}
	return KeyNum;
}
  • 下面是main.c
#include "gd32f10x.h"                   // Device header
#include "systick.h"
#include "LED.h"
#include "Key.h"


uint8_t KeyNum = 0;

int main()
{
	//初始化外设
	LED_Init();
	Key_Init();
	
	while(1)
	{
		KeyNum = Key_GetNum();
		if (KeyNum == 1)
		{
			LED1_Turn();
		}
		if (KeyNum == 2)
		{
			LED2_Turn();
		}

	}
}

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

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

相关文章

八、发票校验(2)

第三节 发票校验后台设置 1、设置发票进项税默认值(事务代码OMR2) 维护指定公司代码的进项税缺省值,在采购业务的发票校验操作中能够快速地指定税码。 ——路径:IMG:物料管理>后勤发票校验>收入发票>维护…

备战秋招60天算法挑战,Day34

题目链接: https://leetcode.cn/problems/coin-change/ 视频题解: https://www.bilibili.com/video/BV1qsvDeHEkg/ LeetCode 322.零钱兑换 题目描述 给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表…

为数据仓库构建Zero-ETL无缝集成数据分析方案(上篇)

对于从事数据分析的小伙伴们来说,最头疼的莫过于数据处理的阶段。在我们将数据源的原始数据导入数据仓储进行分析之前,我们通常需要进行ETL流程对数据格式进行统一转换,这个流程需要分配专业数据工程师基于业务情况完成,整个过程十…

力扣每日1题--2181.合并零之间的节点

问题 下面我会向大家介绍我的思考过程和解题思路 解题思路 首先,我们看问题提供给我们的提示部分。第一点给了我们节点的数目,第二点给了我们val的范围,而我们这道题是要让我们求和的问题,那么我们就应该估算一下我们数据的一个…

多目标优化算法求解UF1、UF2、UF3、UF4、UF5、UF6、UF7、UF8、UF9、UF10

设计新的多目标测试函数时,需要考虑多个因素以确保它们能够有效地评估和比较多目标优化算法。以下是一些常见的设计原则和考虑因素: 目标函数的多样性:测试函数应涵盖不同类型的目标函数,如线性、非线性、凸函数、凹函数等&#x…

智慧矿山数字化工业大数据平台建设方案(52页PPT下载)

方案介绍: 传统矿山面临生产效率低、资源消耗大、安全隐患多、环境污染严重等问题,急需通过数字化转型实现可持续发展。而智慧矿山数字化工业大数据平台建设方案则可以有效的帮助矿业企业构建一个集数据采集、存储、处理、分析及应用于一体的智慧矿山数…

使用lspci命令获取加速卡型号

文章目录 前言一、lspci -nn 获取具体厂商及设备ID二、使用步骤三、使用3080Ti再查询一下 前言 新到的实验机器和加速卡,安装好之后发现lspci命令没有显示型号,这里记录下使用 Vendor ID和Device ID 通过网页查询获取加速卡具体型号的过程。 一、lspci …

Flutter动画—涟漪效果

功能分析 涟漪是由几个圆重叠在一起的 外层圆环比内层圆环的背景色要淡,可以改变外层圆的透明度 想要达到涟漪效果只要将每个圆的半径慢慢变大并且循环动画即可 ​实现方法 在画板上创建三个圆环,再实现外层的圆环要比内层圆环的颜色要淡。 class …

第二十四篇——地形篇:知己知彼知地形

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 战略层面的东西宏观了解了之后,越到最后,这些战术…

OpenAI gym: How to get complete list of ATARI environments

题意:OpenAI Gym:如何获取完整的 ATARI 环境列表 问题背景: I have installed OpenAI gym and the ATARI environments. I know that I can find all the ATARI games in the documentation but is there a way to do this in Python, witho…

神经网络—参数初始化、激活函数、损失函数及反向传播算法

基础知识点 神经网络NN(Neural Netwarks) 深度学习(Deep Learning) 神经元(Neuron) 深层神经网络(Deep Neural Networks,DNNs) 神经网络有下面三个基础层(Layer)构建而成: 输入层(Input&am…

在线翻译百度,以及这三款实用便捷的翻译工具

嘿,朋友们,今天咱们来聊聊那些在日常生活和工作中不可或缺的在线翻译工具。说到这个,那绝对不能不提百度翻译了。那么,接下来就让我用口语化的方式给大家介绍一下它以及另外几款我推荐的翻译工具吧: 百度翻译推荐&…

CCF编程能力等级认证GESP—C++8级—20240907

CCF编程能力等级认证GESP—C1级真题 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)手套配对美丽路径 单选题(每题 2 分,共 30 分&…

猿大师办公助手在线编辑Office/wps网页组件COM加载项启用说明

猿大师办公助手作为国内一款优秀的在线编辑Office插件,越来越受到更多客户的认可并实施了采购,猿大师办公助手与其他的厂商采用弹窗模式实现网页内嵌不同,猿大师办公助手是目前国内唯一真正实现网页内嵌本机Office的方案,效果如下…

怎样将vue项目 部署在ngixn的子目录下

如果同一服务器的80端口下,需要部署两个或以上数量的vue项目,那么就需要将其中一个vue项目部署在根目录下,其他的项目部署在子目录下. 像这样的配置 访问根目录 / 访问灭火器后台管理,访问 /mall/ 访问商城的后台管理 那么商场的vue项目,这样配置,才能在/mall/下正常访问? 1…

华为 HCIP-Datacom H12-821 题库 (10)

有需要题库的可以看主页置顶 V群进行学习交流 1.缺省情况下,BGP 对等体邻接关系的保持时间是多少秒? A、120 秒 B、60 秒 C、10 秒 D、180 秒 答案:D 解析: BGP 存活消息每隔 60 秒发一次,保持时间“180 秒” 2.缺省…

【Unity】简易而又实用的抽卡算法

1.两个数中任选一个&#xff08;抛硬币&#xff09; 基础版本&#xff1a; public int RandomBetweenTwoNumber(int a,int b) {float random Random.Range(0,1f);return radom<0.5f ? a : b ; } 升级版本&#xff08;支持概率调整&#xff09;&#xff1a; /*pa表示“…

MATLAB精美绘图详解

目录 一、常见二维图形绘制 二、常见三维图形绘制 三、图形修饰与处理 四、动画制作 五、常见绘图种类与特点总结 总结 MATLAB提供了非常丰富的绘图功能&#xff0c;不仅可以用于二维、三维的基本图形绘制&#xff0c;还包括特殊图形、动画制作等多种功能。在本文中&#…

Flutter框架——2.状态-路由-包-资源

文章参考了Flutter中国开源项目发起人杜文&#xff08;网名wendux&#xff09;创作的一本系统介绍Flutter技术的中文书籍《Flutter实战第二版》&#xff0c;网址&#xff1a;第二版序 | 《Flutter实战第二版》 https://book.flutterchina.club/#第二版变化 文章目录 一、状态管…

使用MATLAB进行动力学分析与可视化

目录 一、动力学与MATLAB概述 二、动力学系统的建模 1. 简谐振子 2. 单摆 三、动力学系统的仿真 1. 使用ode45求解简谐振子 2. 使用ode45求解单摆 四、动力学结果的可视化 1. 二维曲线图 2. 相空间图 3. 三维曲面图 4. 动画制作 五、复杂动力学系统的建模与仿真 1…