GD32F407ZGT6/GD32F450ZGT6(2)GPIO实验

 本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发

向上代码兼容GD32F450ZGT6中使用

后续项目主要在下面该专栏中发布:

https://blog.youkuaiyun.com/qq_62316532/category_12608431.html?spm=1001.2014.3001.5482

感兴趣的点个关注收藏一下吧!

电机驱动开发可以跳转:

GD32F103RCT6/GD32F303RCT6-实战项目-无刷电机驱动(1)_gd32f103rct6例程-优快云博客

BMS电源系统开发可以跳转:

暂未放链接

DCDC-双向BUCK-BOOST实战链接:

GD32实战篇-双向数控BUCK-BOOST-BUCK降压理论基础-优快云博客

GD32实战篇-双向数控BUCK-BOOST-BOOST升压理论基础-优快云博客

本教程使用开发板:

因为先前F4的开发板用于BMS储能开发,涉及隐私无法在此基础上继续公布,所以就手忙脚乱的自制了一块专门用于教程的开发板,部分还未焊接完毕,焊油也未洗掉,后续会慢慢美化的。 

 群号:621154399

有问题欢迎大家加入我们一起交流,这个群是开源性技术交流群。

介绍

GD32F407ZGT6作为我们本教材选用的芯片,本节我们将展开讲如何实现GPIO的输入输出的操作。

GPIO(General Purpose Input Output)是通用输入输出引脚,它是STM32芯片上的数字接口,可配置为8种输入输出模式,。可以使用寄存器级操作进行配置和控制,因此具有灵活性和可编程性。

引脚电平:0V~3.3V,部分引脚可容忍5V(在GD32F103RCT6引脚定义中,带FT的,可以容忍5V)

每个GPIO引脚可以由软件配置为输出(推挽或开漏)、输入、外设的备用功能或者模拟模式。每个GPIO引脚都可以配置为上拉、下拉或无上拉/下拉。

输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。

输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。

具体更加详细的关于GPIO的讲解,大家可以参考F1系列编写的教程:

D32F103RCT6/GD32F303RCT6(3.1)GPIO外设使用-寄存器+库函数介绍

GD32F103RCT6/GD32F303RCT6(3.2)GPIO外设使用-实验编程

手册说明:

对应的四种不同功能:

输出模式配置

输入配置

模拟输入配置

复用功能配置

库函数更新:

关于gpio的初始化,我们本次主要是列举在GD32F1系列与GD32F4系列之间的对比。

GD32F103/GD32F303

其中,在GD32F1/GD32F303系列中,将GPIO初始化为输出模式的代码如下:

      // GPIO时钟使能
	  rcu_periph_clock_enable(LED_1_GPIO_CLK);
	  rcu_periph_clock_enable(LED_2_GPIO_CLK);
	  rcu_periph_clock_enable(LED_3_GPIO_CLK);
	  rcu_periph_clock_enable(LED_4_GPIO_CLK);
      // 配置为推挽输出模式
	  gpio_init(LED_1_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_1_GPIO_PIN);
      gpio_init(LED_2_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_2_GPIO_PIN);
	  gpio_init(LED_3_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_3_GPIO_PIN);
	  gpio_init(LED_4_GPIO_PORT, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, LED_4_GPIO_PIN);

在初始化GPIO所使用的时钟后,涉及到的主要库函数为:

GD32F407/GD32F450

在GD32F407/GD32F450中,库函数对GPIO的初始化做更一步细分,具体的实现的代码如下:

//GPIOB时钟使能
rcu_periph_clock_enable(RCU_GPIOD);
			
		  gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);

gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
					 
 
gpio_output_options_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);	
		
 gpio_output_options_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);	

在初始化GPIO所使用的时钟后,涉及到的主要库函数为:

对于GPIO的输出部分,改动主要是如上,其余关于GPIO的电平操作和读取等函数,均一样。

GPIO实验

GPIO流水灯实验

实验现象演示:

GD32F407ZGT6流水灯演示视频

通过延时顺序开启LED以完成实验效果。

LED对应引脚在原理图中为:PD0-PD5

编程要点:

1.初始化GPIO时钟

2.设置GPIO工作模式

3.编写GPIO用户函数

/**
 @brief LED灯驱动初始化
 @param 无
 @return 无
*/
void LED_GPIO_Init(void)
{
			//GPIOB时钟使能
		rcu_periph_clock_enable(RCU_GPIOD);
			
		gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);
		gpio_mode_set(GPIOD,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);
			
		gpio_output_options_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);	
		gpio_output_options_set(GPIOD,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5);	
	  
	//默认输出高电平
       gpio_port_write(GPIOD, 0xFFFF);
	
}

主函数中调用:

			for(int x = 0;x<6;x++)
			{
		  gpio_bit_write(GPIOD,BIT(x),RESET);
				delay_ms(150);
				if(x==5)
				{
					for(int x = 5;x>0;x--)
					{
				    gpio_bit_write(GPIOD,BIT(x),SET);
						delay_ms(150);
				  }
				}
				
			}

这里的LED操作函数,和F1系列一样被封装成bsp_led.c以及bsp_led.h

原型可以参考F1系列教程中有详细讲解

GPIO按键输入实验

实验现象演示:

GD32F407ZGT6按键控制LED演示视频

通过按下按键达到翻转LED电平状态

按键在原理图中对应的引脚为:

PG2-PG6

编程要点

1.使能GPIO时钟

2.GPIO输入模式初始化

3.编写用户函数

详细模块化编程以及按键注意事项可以参考F1文章:

GD32F103RCT6/GD32F303RCT6(3.2)GPIO外设使用-实验编程

在按键函数中,我们也采样封装的形式,文件保存在:

分别对应LED以及KEY的初始化

主函数中调用:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不及你的温柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值