使用GD32 MCU实现简单的GPIO控制及LED闪烁

[复制链接]
 楼主| Wordsworth 发表于 2024-10-4 09:00 | 显示全部楼层 |阅读模式
在这篇文章中,我将分享如何在GD32 MCU上编写代码,实现一个简单的GPIO控制,通过按键控制LED的开关。这是一个非常基础的入门项目,适合初学者快速上手GD32系列的MCU。

开发环境:
  • 芯片型号:GD32F103C8T6
  • 开发工具:Keil MDK
  • :GD32标准外设库

项目简介:这个项目的目标是使用GD32 MCU控制板上的GPIO引脚,使一个LED灯在按下按钮时进行开关闪烁。通过学习GPIO的配置和使用,你可以掌握基本的硬件控制方法。

步骤1:初始化GPIO首先,我们需要初始化GPIO端口。GD32的GPIO控制非常灵活,可以配置为输入、输出、复用功能等。我们将LED连接到GPIO引脚,按键连接到另一个GPIO引脚,并分别设置它们的模式。
  1. #include "gd32f10x.h"

  2. void gpio_init(void) {
  3.     // 启动 GPIO 时钟
  4.     rcu_periph_clock_enable(RCU_GPIOC);
  5.     rcu_periph_clock_enable(RCU_GPIOA);
  6.    
  7.     // 配置PC13为输出,用于控制LED
  8.     gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13);
  9.    
  10.     // 配置PA0为输入,用于读取按键状态
  11.     gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
  12.    
  13.     // 默认LED关闭
  14.     gpio_bit_set(GPIOC, GPIO_PIN_13);
  15. }
步骤2:主循环控制LED状态通过简单的循环,我们可以读取按键的状态,并根据按键的按下和松开,控制LED的开关。按键的去抖动处理可以通过简单的延时函数实现。
  1. int main(void) {
  2.     // 初始化GPIO
  3.     gpio_init();
  4.    
  5.     while (1) {
  6.         // 读取PA0的状态
  7.         if (RESET == gpio_input_bit_get(GPIOA, GPIO_PIN_0)) {
  8.             // 按下按钮,LED点亮
  9.             gpio_bit_reset(GPIOC, GPIO_PIN_13);
  10.         } else {
  11.             // 按钮松开,LED关闭
  12.             gpio_bit_set(GPIOC, GPIO_PIN_13);
  13.         }
  14.     }
  15. }
步骤3:延时函数为了在按钮按下时让LED闪烁一下,我们可以添加一个简单的延时函数,模拟按键的去抖动效果。
  1. void delay(uint32_t time) {
  2.     uint32_t i;
  3.     for (i = 0; i < time; i++) {
  4.         __asm("nop");
  5.     }
  6. }

结语:
通过这篇文章,我们学习了如何在GD32 MCU上配置GPIO,并通过按键控制LED的闪烁。这个基础项目可以作为你学习更多外设(如UART、定时器等)的起点。希望你通过这个简单的应用对GD32的开发有更深入的理解!
如果有任何问题或改进建议,欢迎在评论区留言讨论!

公羊子丹 发表于 2024-10-4 09:02 | 显示全部楼层
这个项目挺基础的,正好适合我这种刚接触GD32的,学起来不难!感谢分享!
周半梅 发表于 2024-10-4 09:02 | 显示全部楼层
GPIO配置看着挺简单的,之前一直觉得MCU开发很难,看来是我想多了。
帛灿灿 发表于 2024-10-4 09:03 | 显示全部楼层
这个LED闪烁的效果很实用,能不能再加个功能,比如按一下闪几次?
童雨竹 发表于 2024-10-4 09:03 | 显示全部楼层
楼主解释得很清楚,我照着做了一遍,成功控制了LED!开心!
万图 发表于 2024-10-4 09:03 | 显示全部楼层
GD32F103真的挺好用的,性价比也高,之前一直用STM32,现在考虑换了。
Bblythe 发表于 2024-10-4 09:04 | 显示全部楼层
延时函数写得简洁,看来还是基础扎实才能玩得转这些硬件。
Pulitzer 发表于 2024-10-4 09:04 | 显示全部楼层
第一次搞MCU项目,没想到这么简单就能控制硬件,成就感满满!
Uriah 发表于 2024-10-4 09:04 | 显示全部楼层
楼主这个按键的去抖动功能感觉可以再优化下,用定时器实现是不是更好?
Clyde011 发表于 2024-10-4 09:05 | 显示全部楼层
GD32库用起来还挺顺手的,原来以为和STM32差别会很大,结果没啥难度。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

5763

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

144

主题

5763

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部