【摘要】 本文主要从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灯进行点亮、延时、熄灭即可。

    void  gd_eval_led_init (led_typedef_enum lednum)

    {

          // 使能LED时钟

    eriph_clock_enable(GPIO_CLK[lednum]);

    // 设置GPIO模式

    gpio_mode_set(GPIO_PORT[lednum], GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN[lednum]);

    // 设置GPIO输出以及速度

        gpio_output_options_set(GPIO_PORT[lednum], GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN[lednum]);

         //  操作位清除寄存器

        GPIO_BC(GPIO_PORT[lednum]) = GPIO_PIN[lednum];

    }

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

    while(1){

            gd_eval_led_on(LED1);

            delay_1ms(200);

            gd_eval_led_on(LED2);

            delay_1ms(200);

            gd_eval_led_on(LED3);

            delay_1ms(200);       

            gd_eval_led_off(LED1);

            gd_eval_led_off(LED2);

            gd_eval_led_off(LED3);

            delay_1ms(200);

        }

实验效果如图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. [考试反思]1018csp-s模拟测试78(lrd day2) :规律

    zkt没素质果然考炸了! 但是他考炸了和我一个分 这场的状态是真的不好,T3比较简单但没有做,一直干T2结果还是跪了 T1的哈希写挂了,模数比int大了结果一乘就炸long long了. 调了一个小时 ...

  2. 「刷题」JZPKIL

    这道反演题,真牛逼. 以下用$B$代表伯努利数,$l*g=f$代表狄利克雷卷积,先推式子. 对于给出的$n,x,y$求一百组数据的$ans$ $\begin{array}{rcl} ans & ...

  3. map和set的使用及top K问题

    1.map和set的应用和比较 map和set都是关联式容器,底层容器都是红黑树. map以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插 ...

  4. My Android 学习之旅--开始

    其实,很早就想写写博客了,一直懒到现在. 学习android也不是今天才开始的,大概在2月份过完年之后就开始了,买了我认为还可以的书<Android从入门到精通>,花了不到一个月的时间,把 ...

  5. 【北京/上海/南京】【部门直推】【可查询】【实习&社招】字节跳动数据平台前端内推

    [北京/上海/南京][部门直推][可查询][实习&社招]字节跳动数据平台前端内推 重要信息,写在前面  [投递邮箱]chengxinsong@bytedance.com [微信扫码] 2019 ...

  6. Windows终端利器Cmder

    在IT这一行,大部分情况下都是推荐大家使用Linux或者类Unix操作系统去编程,Linux作为一代优秀的操作系统,已经人尽皆知,在IT行业已经成为核心.有条件的大佬都选择了使用mac编程,最优秀的莫 ...

  7. 关于github 新工程上传代码 git 命令

    1.git init // 初始化git文件 2.git add . //添加上传全部文件 "."代表全部 3.git remote add origin  git····//gi ...

  8. 忘记Linux登录密码的破解方法

    注意:1.破解方式只限于7.0以后的Linux系统. 2.要注意自己linux系统中有没有开启selinux,如果开启则在后面要建一个名为:autorelabel的隐藏文件.     1.启动Linu ...

  9. paper sharing :学习特征演化的数据流

    特征演化的数据流 数据流学习是近年来机器学习与数据挖掘领域的一个热门的研究方向,数据流的场景和静态数据集的场景最大的一个特点就是数据会发生演化,关于演化数据流的研究大多集中于概念漂移检测(有监督学习) ...

  10. django 中 css文件的调用

    Django: 配置css文件 晚上搞了好久的css文件的调用,发现,我根本文件位置都放错了. 接下来要更改settings.py 和 urls.py 的设定. Settings.py 中应该: ur ...