【GD32F470紫藤派开发板使用手册】第一讲 GPIO-流水灯实验

发布者:自由思考最新更新时间:2024-12-12 来源: elecfans关键字:GPIO  流水灯实验 手机看文章 扫描二维码
随时随地手机看文章

1.1实验内容

通过本实验主要学习以下内容:

  • GPIO结构及原理;

  • GPIO输出功能实现;

  • LED驱动原理。

1.2实验原理

1.2.1GPIO外设原理

GD32F4xx系列MCU最多可支持140个通用I/O引脚(GPIO),分别为PA0 ~ PA15,PB0 ~ PB15,PC0 ~ PC15,PD0 ~ PD15,PE0 ~ PE15,PF0 ~ PF15,PG0 ~ PG15,PH0 ~ PH15和PI0 ~ PI11,各片上设备用其来实现逻辑输入/输出功能。每个GPIO端口有相关的控制和配置寄存器以满足特定应用的需求。GPIO引脚上的外部中断在中断/事件控制器(EXTI)中有相关的控制和配置寄存器。


GPIO 端口和其他的备用功能(AFs)共用引脚,在特定的封装下获得最大的灵活性。GPIO引脚通过配置相关的寄存器可以用作备用功能引脚,备用功能输入/输出都可以。每个GPIO引脚可以由软件配置为输出(推挽或开漏)、输入、外设备用功能或者模拟模式。每个GPIO引脚都可以配置为上拉、下拉或无上拉/下拉。除模拟模式外,所有的GPIO引脚都具备大电流驱动能力。


GD32F4xx系列的GPIO端口结构如下图所示,由该图可知,GPIO结构可大致分为三个部分:1、输出控制,可配置为推挽输出以及备用功能输出,在推挽输出情况下,输出驱动由输出控制寄存器进行控制,在备用功能输出情况下,输出驱动由外设备用功能驱动,具体输出会通过对电源以及对地的mos管进行实现,上下拉电阻对输出也有作用;2、输入控制,输入可配置内部上拉或者下拉,内部上下拉电阻均为40K左右,然后通过内部施密特触发器输入到内部,之后可以外设通过备用功能输入或者通过输入状态寄存器读取,施密特触发器的实现功能为输入电压由低到高变化时,低于VIL为低,高于VIH为高,在VIL和VIH之间为低,输入电压由高到低变化时,高于VIH为高,低于VIH为低,在VIL和VIH之间为高,因而为了可靠读取输入电平状态,输入电压高电平需要高于VIH,低电平需要低于VIL才可靠,一般VIL为0.3 VDD,VIH为0.7 VDD;3、ESD保护,在标准IO接口上,ESD保护为对电源和对地的两个反向二极管,因而若引脚电压高于VDD电压,可能存在漏电现象(通过反向二极管漏电到VDD),故使用标准IO接口需注意引脚输入电压不可高于VDD电压,另外有一类IO接口为5VT引脚,该引脚可耐5V电压输入,不存在引脚漏电现象,如果设计中存在引脚先于电源上电的情况,该引脚需要使用5VT引脚,避免引脚漏电,5VT引脚可通过数据手册查看确认。

wKgZomYwSsiAfs_bAADkN8zcaYo834.png?imageView2/2/w/1000

GD32F4xx系列MCU引脚的复用功能通过AF表进行查阅,具体如下图所示。

wKgaomYwSt-ATyATAAPUzK6Nrr8921.png?imageView2/2/w/1000

1.2.2LED驱动原理

LED是一种半导体发光元件,可以将电能转换为光能,可通过外部电路进行驱动,有单色的也有多色的,可通过电压或电流来进行驱动,驱动亮度可调。LED驱动比较简单,后续会在硬件设计中介绍本例程所用LED驱动的原理。


1.3硬件设计

本节主要介绍GPIO驱动LED电路。该电路如下图所示,该电路中具有四个LED,一端接地,另外一端通过4.7k欧姆限流电阻连接至GPIO,当GPIO输出高电平时,LED电亮,反之熄灭。对应的GPIO引脚分别为PE3/PC13/PG3/PA5。

wKgZomYwSu2AGlWVAADFPuoxShk888.png?imageView2/2/w/1000


1.4代码解析

1.4.1驱动初始化函数

驱动初始化函数如下所示,主要功能为延迟初始化、LCD初始化等,其中延迟使用systick定时器进行实现。

C
void driver_init(void)
{
delay_init();
// rcu_periph_clock_enable(RCU_AF);
// gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);
#if (LCD_DEBUG == 1)
// #include 'bsp_lcd.h'
bsp_lcd_init(); /* 初始化LCD */
bsp_lcd_clear(WHITE);
//显示log图片
bsp_show_log();
//设置打印窗口
bsp_lcd_printf_init(10,109,bsp_lcd_parameter.width-1,bsp_lcd_parameter.height-1,FONT_ASCII_16_8,WHITE,BLUE);
#endif
}

延迟配置函数如下所示,通过该函数开启sysitck。

C
void delay_init(void)
{
SystemCoreClockUpdate();
systick_config();
delay_us_mul=SystemCoreClock/1000000;
}

如果需要进行LCD显示,需要打开LCD_DEBUG宏定义。


1.4.2LED配置函数

LED相关配置函数实现在bsp_led.c文件中,首先将LED进行注册,注册语句如下,注册之后即可通过别名的方式对相关LED进行相关配置。

C
LED_DEF(LED1,E,3,RESET); /* PE3定义为LED1,LED OFF的IO初始态低 */
LED_DEF(LED2,C,13,RESET); /* PC13定义为LED2 */
LED_DEF(LED3,G,3,RESET); /* PG3定义为LED3 */
LED_DEF(LED4,A,5,RESET); /* PA5定义为LED4 */

LED初始化函数如下,可以通过别名数组的方式对LED GPIO进行成组初始化。

C
const void* LED_INIT_GROUP[]={&LED1,&LED2,&LED3,&LED4};
void bsp_led_init(typdef_gpio_general *LEDx)
{
driver_gpio_general_init(LEDx);
}
void bsp_led_group_init(void)
{
uint8_t i;
for(i=0;i
{
bsp_led_init(((typdef_gpio_general *)LED_INIT_GROUP[i]));
}
}

LED初始化之后即可对相关LED进行输出相关操作,开发板历程中提供了输出高、低以及翻转的配置函数,可供使用者方便调用。

C
void bsp_led_on(typdef_gpio_general *LEDx)
{
driver_gpio_pin_write(LEDx,(bit_status)!(LEDx->default_state));
}
void bsp_led_off(typdef_gpio_general *LEDx)
{
driver_gpio_pin_write(LEDx,LEDx->default_state);
}
void bsp_led_toggle(typdef_gpio_general *LEDx)
{
driver_gpio_pin_toggle(LEDx);
}


1.4.3主函数

本例程主函数如下所示,首先进行驱动初始化,之后进行LED初始化,然后初始化串口并打印”Stream LED demo.“的log,在while(1)主循环中延迟100ms进行顺序循环翻转LED,以实现流水灯现象。

C
int main(void)
{
uint8_t i=0;
driver_init();
bsp_led_group_init();
bsp_uart_init(&BOARD_UART); /* 板载UART初始化 */
printf_log('Stream LED demo.rn');
while(1)
{
delay_ms(100);
bsp_led_toggle(((typdef_gpio_general *)LED_INIT_GROUP[i++%LED_SIZE]));
}
}


1.5实验结果

将本例程编译通过后,烧录到紫藤派开发板中,运行后可观察到LED1-LED4顺序点亮,实现流水灯的功能。


关键字:GPIO  流水灯实验 引用地址:【GD32F470紫藤派开发板使用手册】第一讲 GPIO-流水灯实验

上一篇:【GD32F303红枫派开发板使用手册】第四讲 GEXTI-按键中断检测实验
下一篇:【GD32F303红枫派开发板使用手册】第十二讲 ADC-双轴按键摇杆多通道循环采样实验

推荐阅读最新更新时间:2026-03-25 10:41

GD32F470紫藤开发板使用手册】第二讲 GPIO-按键查询实验
2.1实验内容 通过本实验主要学习以下内容: GPIO输入功能原理; 按键查询输入检测原理; 2.2实验原理 2.2.1GPIO输入功能原理 GD32F4xx系列MCU GPIO输入配置结构如下图所示,输入可配置上下拉电阻,通过施密特触发器后可通过备用功能输入或者通过输入状态寄存器进行读取。 输入状态寄存器为GPIOx_ISTAT,其状态位定义如下图所示,每个控制位对应相应引脚的输入电平状态。 GPIO引脚输入电平判断阈值如下图所示,当输入电平小于0.3VDD时,可被内部有效识别为低电平;当输入电平大于0.7VDD时,可被内部有效识别为高电平。 2.3硬件设计 GD32F4xx紫藤派开发板具有两个按键,对应电路图
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第二讲 <font color='red'>GPIO</font>-按键查询<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第十讲 USART-中断串口收发实验
10.1实验内容 通过本实验主要学习以下内容: 使用中断进行串口收发 10.2实验原理 10.2.1串口寄存器介绍 串口有几个非常重要的寄存器需要读者理解。 数据寄存器(USART_DATA) 该寄存器虽然只有一个,但内部是映射为发送和接受两个寄存器。 发送时,除了发送数据寄存器,还有一个移位寄存器,当数据写入数据寄存器中,移位寄存器空闲的情况下,数据从数据寄存器中转移到移位寄存器,移位寄存器按照低bit——高bit的顺序将数据移位到IO口上。 接收时,接收到的数据保存在数据寄存器中,CPU或DMA可以从该寄存器中读接收到的数据。 状态寄存器0(USART_STAT0 ) 我们需要特别理解TBE、TC、RBNE、IDL
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第十讲 USART-中断串口收发<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第三讲 EXTI-按键中断检测实验
3.1实验内容 通过本实验主要学习以下内容: EXTI中断原理; 按键中断检测原理; 3.2实验原理 3.2.1NVIC中断向量控制器 介绍EXTI之前,首先为各位读者介绍NVIC中断向量控制器,NVIC为M4内核组件,用于实现高效的异常和中断处理。NVIC可以支持抢占以及咬尾中断,具有多达68种外设中断以及4位中断优先等级配置(最多支持16个中断有限等级),当中断或异常产生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序(ISR) 后自动将其出栈。 有关NVIC中断相关配置函数可参考gd32f4xx_misc.c,其中主要有以下几个函数,其功能简介如下表所示。 3.2.2EXTI中断原理 EXTI为外部中断
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第三讲 EXTI-按键中断检测<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第八讲 ADC-规则组多通道采样实验
8.1实验内容 通过本实验主要学习以下内容: ADC的简介 GD32F470 ADC工作原理 DMA原理 规则组多通道循环采样 8.2实验原理 8.2.1ADC原理 我们知道,自然界中有非常多的模拟信号,比如光照强度,还有其他的例如温度、声音等等,那么人们是怎么来衡量一个模拟信号的呢? 我们通常会说今天光照度达到了3万Lux(照度单位),现在测量到的体温是36.5℃,我们所处的环境是40分贝,没错,人们就是通过将这些模拟信号数字化,从而达到衡量这些模拟信号的目的。那对于MCU来说,如果要测量一个模拟量,可以通过自带的ADC(Analog-to-Digital converters)模块,即模-数转换器将模拟量转化为可以被
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第八讲 ADC-规则组多通道采样<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第十三讲 USB_虚拟键盘实验
13.1实验内容 通过本实验主要学习以下内容: USB协议基本原理 GD32F4xx USBFS的使用 虚拟键盘的协议原理及使用 13.2实验原理 13.2.1USB通信基础知识 USB的全称是Universal Serial Bus,通用串行总线。它的出现主要是为了简化个人计算机与外围设备的连接,增加易用性。USB支持热插拔,并且是即插即用的,另外,它还具有很强的可扩展性,传输速度也很快,这些特性使支持USB接口的电子设备更易用、更大众化。GD32F4xx系列MCU集成了USB2.0全速OTG模块以及高速OTG模块。首先为大家介绍USB通信的一些基础知识,包括USB协议、枚举流程等,建议读者可以多多阅读USB协议,以更深
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第十三讲 USB_虚拟键盘<font color='red'>实验</font>
(一)s3c2440——GPIO流水灯实验
一、GPIO流水灯实验 1、实验目的   a:掌握GPIO的使用方法   b:熟悉Linux下编程的方法 2、实验内容   通过控制GPIO引脚来使LED显示 3、主要程序:   a:start.S文件是启动文件。第一个开始的程序。它实现的功能是关闭看门狗(不关闭会一直重启),并且设置堆栈(调用c函数之前必须设置堆栈)。   b:Makefile文件。它是进行编译链接生成可执行文件。   c:blink.c文件。实现主要功能,使led灯实现流水的效果 4、GPIO主要操作两个寄存器GPXCON和GPXDAT。前者设置引脚的模式(输出、输入、中断等),后者设置引脚的电平。   但是在操作过程中,出现了
[单片机]
(一)s3c2440——<font color='red'>GPIO</font>(<font color='red'>流水灯</font><font color='red'>实验</font>)
STM32实验一:GPIO流水灯
前面写过一篇关于STM32单片机的GPIO的文章,本来是打着从实用角度来做的实验,但是发现不积跬步无以至千里啊,咱们从头开始,先做一个最简单的,入门级的,单片机系统中的hello world,流水灯实验! 我手中有一个神舟3的开发板,我就用这个板子来做实验,板子中的实验一共用到4个LED灯来做流水灯的实验,这里我们也用这4个灯,他们分别是GPIOF中的6、7、8、9这4个。 1、首先我们复制我们之前做过的模板工程到一个新建文件夹中,(如,你可以取个名字叫流水灯实验的文件夹)神舟开发板的例程中在项目中添加了两个文件,分别是led.c和led.h,这是一种习惯,每做一个项目的时候都在其中添加一个.c和对应的.h文件,这样可以是
[单片机]
STM32<font color='red'>实验</font>一:<font color='red'>GPIO</font>之<font color='red'>流水灯</font>
51单片机实验——用定时器0实现流水灯,要求每个led轮流显示1s
1.实验题目: 用定时器0实现流水灯,要求每个led轮流显示1s。 2.KEIL代码 #include reg51.h void main() { TMOD &=0X0F; TMOD |=0x01; TH0 = (65536 - 50000)/256;//高四位初值 TL0 = (65536 - 50000)%256;//低四位初值,每隔50ms溢出 EA = 1; //开总中断 ET0 = 1; //T1开时定时器溢出 TR0 = 1; //开启定时器 P1=0xff; while(1); } void Time0(void) interrupt 1 //定时中断 {
[单片机]
51单片机<font color='red'>实验</font>——用定时器0实现<font color='red'>流水灯</font>,要求每个led轮流显示1s
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved