漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)
【摘要】 本文主要从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
作者:星辰27
漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)的更多相关文章
- 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
[摘要] 主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术 ...
- 漫谈LiteOS之开发板-LiteOS移植(基于GD32450i-EVAL)
1 为什么移植? 嵌入式设备的芯片型号和外设的差异较大,资源有限.而RTOS无法适配集成所有的驱动,因此会先适配部分开发板,然后通过移植使得适配更多的开发板. 可移植性是嵌入式操作系统与普通操作系统的 ...
- 为arm-linux开发板挂载基于nfs的根文件系统
linux4.14内核,首先设置kernel的bootargs,在make menuconfig中有三种方式来配置: 第一种方式为如果uboot中设置了bootargs环境变量,就采用uboot的bo ...
- debian下为arm开发板创建基于debian或emdebian的根文件系统
Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. emdebian 是一个非常好用的嵌入式linux操作系统,其基于debian的特点对于熟悉debian系统的 ...
- 织女星开发板使用RISC-V核驱动GPIO
前言 织女星开发板是OPEN-ISA社区为中国大陆地区定制的一款体积小.功耗超低和功能丰富的 RISC-V评估开发板,基于NXP半导体四核异构RV32M1主控芯片. 两个RISC-V核:RI5CY + ...
- 学习嵌入式Linux-选择iTOP-4412开发板
部分视频观看地址: [视频教程]iTOP-4412开发板之学习方法--致初学者 http://v.youku.com/v_show/id_XNzQ5MDA4NzM2.html [视频教程]三星Exyn ...
- 搭建S3C6410开发板的测试环境
因为ARM架构的开发板可基于X86架构的PC在CPU指令以及二进制上都有所不同,而且如果linux驱动需要访问硬件,这些硬件很难在PC上模拟,所以就需要我们在带有这些硬件的开发板上进行调试和测试. ...
- S3C6410开发板开发环境的搭建
本节主要介绍了S3C6410开发板及OK6410开发板.OK6410开发板是基于ARM11处理器的S3C6410,采用“核心版+底板”结构 主要步骤如下:. OK6410开发板自带一个串口,PC也需要 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
随机推荐
- net core WebApi——April.Util更新之权限
目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...
- day5-基本数据类型总结
一.数字int(..)二.字符串replace/find/join/strip/startswith/split/upper/lower/format tempalte = "i am {n ...
- 《计算机网络 自顶向下方法》 第2章 应用层 Part2
域名.主机名? 从范围上看: 域名的范围比主机名大 一个域名下通常有多个主机名 从组成上看: 主机名 = 服务器名(或计算机名) + 域名 举例说明: baidu.com 是百度的域名 www.b ...
- PHP 中四大经典排序算法
1.冒泡排序 在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. ...
- spark集群搭建(三台虚拟机)——kafka集群搭建(4)
!!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...
- nyoj 108-士兵杀敌(一)(数学)
108-士兵杀敌(一) 内存限制:64MB 时间限制:1000ms 特判: No 通过数:60 提交数:221 难度:3 题目描述: 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. ...
- VMware虚拟机Linux中增加磁盘空间的扩容操作
VMwareware虚拟机安装的Red Hat Enterprise Linux系统剩余空间不足,造成软件无法正常安装.如果重新装一遍系统就需要重新配置好开发环境和软件的安装配置.结合自己的实践,总结 ...
- 领扣(LeetCode)对称二叉树 个人题解
给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,nul ...
- windows版的mysql主从复制环境搭建
背景 最近在学习用Spring Aop来实现数据库读写分离的功能. 在编写代码之前,首先是要部署好mysql的环境,因为要实现读写分离,所以至少需要部署两个mysql实例,一主一从,并且主从实例之间能 ...
- svn文件被锁不能提交的解决办法
记录工作中遇到的问题,分享出来: 前端时间在提交项目到svn遇到一个问题, 提交的时候提示:文件已经锁定!如下图: 原因是我之前提交的时候不小心中途停了,导致文件被锁,然后也没在意那么多, 趁着今天有 ...