【摘要】 本文主要从GPIO的定义、工作模式、特色、工作场合、以及GD32450i-EVAL开发板的引脚、对应的寄存器以及GPIO的流水灯示例对GPIO加以介绍,希望对你有所帮助。

1定义

GPIO(Gennral-purpose input/output)通用型输入输出,即“IO”口、引脚。既然通用也就是说它是芯片上一个干什么都行的引脚。

2 GD32450i-EVAL引脚说明

如图1所示GD32450i-EVAL开发板一共有140(16 * 8 + 12)个通用I/O引脚,PA-PI共9 组,其中PA-PH8组中每组有0-15共16个引脚,外加PI0-PI11共12个引脚。

3 GPIO 工作模式

输入、输出(推挽或开漏)、外设备用功能、模拟模式。而且都可以配置为上拉、下拉、或无上拉/下拉。除了模拟模式外,都具备大电流驱动能力。

4 功能

GPIO主要功能都是依托于寄存器实现,每个通用I/O端口都可以通过控制寄存器配置为输入、输出、备用功能或模拟方式。当选择备用功能时,引脚通过AF使能来选择,当端口配置为输出时,可以通过GPIO输出模式寄存器配置为推挽或开漏模式。输出端口的最大速度可以通过GPIO输出速度寄存器配置,每个端口可以通过上下拉寄存器配置为浮空、上拉、下拉功能。

4.1 主要寄存器

(1)#define GPIO_CTL(gpiox)         REG32((gpiox) + 0x00U)      端口控制寄存器

(2)#define GPIO_OMODE(gpiox)  REG32((gpiox) + 0x04U)      端口输出模式寄存器

(3)#define GPIO_OSPD(gpiox)       REG32((gpiox) + 0x08U)      端口输出速度寄存器

(4)#define GPIO_PUD(gpiox)         REG32((gpiox) + 0x0CU)      端口上拉/下拉寄存器

(5)#define GPIO_ISTAT(gpiox)      REG32((gpiox) + 0x10U)       端口输入状态寄存器

(6)#define GPIO_OCTL(gpiox)      REG32((gpiox) + 0x14U)       端口输出状态寄存器

(7)#define GPIO_BOP(gpiox)         REG32((gpiox) + 0x18U)       端口位操作寄存器

(8)#define GPIO_LOCK(gpiox)      REG32((gpiox) + 0x1CU)      端口配置锁定寄存器:

(9)#define GPIO_AFSEL0(gpiox)   REG32((gpiox) + 0x20U)      备用功能选择寄存器0

(10)#define GPIO_AFSEL1(gpiox) REG32((gpiox) + 0x24U)      备用功能选择寄存器1

(11)#define GPIO_BC(gpiox)         REG32((gpiox) + 0x28U)       位清除寄存器

(12)#define GPIO_TG(gpiox)         REG32((gpiox) + 0x2CU)       端口位翻转寄存器

4.2 对应特性

(1)输入/输出方向控制。

(2)施密特触发器输入功能使能控制。

(3)每个引脚都具有弱上拉/下拉功能。

(4)推挽/开漏输出使能控制。

(5)置位/复位输出使能。

(6)输出驱动速度选择。

(7)模拟输入/输出配置。

(8)备用功能输入/输出配置。

(9)端口锁定配置。

(10)单周期输出翻转功能。

5 应用场景

(1)上拉、下拉输入:检测外部信号,如按键等。

(2)浮空输入模式:由于输入阻抗较大一般用作标准通信协议的I2C、USART的接收端。

(3)普通推挽输出:输出电平为0和3.3v的场合。

(4)普通开漏输出:电平不匹配的场合,如需输出5V高电平,需要外部添加上拉电阻,电源5V,GPIO设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出5V电平。

(5)复用模式:根据对应的复用功能选择。

注意:使用任意一种开漏模式都需要接上拉电阻。

6 示例

以流水灯为例,使用GPIO来控制LED灯,GD32450i-EVAL开发板上有三个LED灯,设置间隔200毫秒,循环点亮,然后一起熄灭,循环此过程。

首先初始化LED时钟,之后配置LED的GPIO引脚,配置好引脚之后对LED灯进行点亮、延时、熄灭即可。

  1. void gd_eval_led_init (led_typedef_enum lednum)
  2. {
  3. // 使能LED时钟
  4. eriph_clock_enable(GPIO_CLK[lednum]);
  5. // 设置GPIO模式
  6. gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]);
  7. // 设置GPIO输出以及速度
  8. gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);
  9. // 操作位清除寄存器
  10. GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
  11. }

实现上述对于LED灯的初始化,之后只需要对LED灯和时钟进行操作即可,灯亮使能位操作寄存器,灯灭使能位清除寄存器即可。

  1. while(1){
  2. gd_eval_led_on(LED1);
  3. delay_1ms(200);
  4. gd_eval_led_on(LED2);
  5. delay_1ms(200);
  6. gd_eval_led_on(LED3);
  7. delay_1ms(200);
  8. gd_eval_led_off(LED1);
  9. gd_eval_led_off(LED2);
  10. gd_eval_led_off(LED3);
  11. delay_1ms(200);
  12. }

实验效果如图2所示,具体见附件。

目录主文链接:https://bbs.huaweicloud.com/blogs/124244

流水灯视频.rar

作者:星辰27

漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)的更多相关文章

  1. 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)

    [摘要] ​主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术 ...

  2. 漫谈LiteOS之开发板-LiteOS移植(基于GD32450i-EVAL)

    1 为什么移植? 嵌入式设备的芯片型号和外设的差异较大,资源有限.而RTOS无法适配集成所有的驱动,因此会先适配部分开发板,然后通过移植使得适配更多的开发板. 可移植性是嵌入式操作系统与普通操作系统的 ...

  3. 为arm-linux开发板挂载基于nfs的根文件系统

    linux4.14内核,首先设置kernel的bootargs,在make menuconfig中有三种方式来配置: 第一种方式为如果uboot中设置了bootargs环境变量,就采用uboot的bo ...

  4. debian下为arm开发板创建基于debian或emdebian的根文件系统

    Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. emdebian 是一个非常好用的嵌入式linux操作系统,其基于debian的特点对于熟悉debian系统的 ...

  5. 织女星开发板使用RISC-V核驱动GPIO

    前言 织女星开发板是OPEN-ISA社区为中国大陆地区定制的一款体积小.功耗超低和功能丰富的 RISC-V评估开发板,基于NXP半导体四核异构RV32M1主控芯片. 两个RISC-V核:RI5CY + ...

  6. 学习嵌入式Linux-选择iTOP-4412开发板

    部分视频观看地址: [视频教程]iTOP-4412开发板之学习方法--致初学者 http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html [视频教程]三星Exyn ...

  7. 搭建S3C6410开发板的测试环境

      因为ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制上都有所不同,而且如果linux驱动需要访问硬件,这些硬件很难在PC上模拟,所以就需要我们在带有这些硬件的开发板上进行调试和测试. ...

  8. S3C6410开发板开发环境的搭建

    本节主要介绍了S3C6410开发板及OK6410开发板.OK6410开发板是基于ARM11处理器的S3C6410,采用“核心版+底板”结构 主要步骤如下:. OK6410开发板自带一个串口,PC也需要 ...

  9. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统

    qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...

随机推荐

  1. nginx篇中级用法之反向代理(七层调度)

    环境: 两台后端web,一台代理服务器 web1:eth0:192.168.2.100/24   httpd做一个web web2:eth0:192.168.2.200/24   httpd做一个we ...

  2. 【java基础】程序员你真的理解反射机制吗?

    目录 前言 1.反射的概述 2.正式使用反射之前很有必要了解的Class类 3.反射的使用 前言 很多讲解反射的博客文章并没有详细讲解Class类,~当然包括之前的我也一样~,这样的文章只会让反射徒有 ...

  3. Linux初体验--配置网络(CentOS7)

    在安装好虚拟机和操作系统后,一台合格的网络设备当然是要冲浪啊. 一.记下自己的网络配置 二.打开终端,输入命令 三.修改文件 保存后退出(wq). 四.重启网络服务 systemctl restart ...

  4. linux shell中使用sed命令

    例1:批量的将变量的值代替指定文件中的指定内容. #!/bin/bash for i in {1..100} mgr_port=`expr $i + 5345` data_port=`expr $i ...

  5. Linux基础命令(二)

    6.cp copy 作用:复制文件 选项: -a 复制目录时使用并且可以保持属性不变,属性:属主,属组,权限 -r 复制目录时使用但是不可以保持属性不变 -p 保持属性不变 注意:其实只需要记一个-a ...

  6. vue使用一些外部插件及样式的配置

    一.配置全局css及js样式 1.首先将事先写好的css文件及js文件放在src文件目录下的assets文件下 2.在main.js文件输上图右边两个红色框的代码 二.配置全局jQuery及boots ...

  7. PHP 当Swoole 遇上 ThinkPHP5

    本文假设你已经有了 Linux 操作系统的 PHP 环境,强烈推荐使用 Vagrant 来搭建开发环境 安装 Swoole PECL 拓展可以通过 pecl 命令或者通过源码包编译安装,本文采用 pe ...

  8. lqb 基础练习 查找整数 (遍历)

    基础练习 查找整数 时间限制:1.0s   内存限制:256.0MB     问题描述 给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个. 输入格式 第一行包含一个整数n. 第二行包含 ...

  9. nyoj 268-荷兰国旗问题 (count)

    268-荷兰国旗问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:15 提交数:20 难度:1 题目描述: 荷兰国旗有三横条块构成,自上到下的三条块颜色依次为红.白.蓝.现有若干 ...

  10. raid10配置流程(5块磁盘)

    1.添加5块磁盘 (1)先添加一块磁盘 (2)在此基础上,再添加4块磁盘 2.使用mdadm命令创建RAID10,名称为“/dev/md0” -C 代表创建操作      -v 显示创建过程      ...