Arduino补充篇(一)-- 怎么区分I/O与GPIO

1、I/O

        IO即 Input Output,是计算机中的输入输出系统,用于 CPU 与外界进行信息交互。例如CPU 读内存数据需要 I/O 系统,CPU 输出数据到屏幕显示出来也需要 I/O 系统,信息在 I/O 系统上传输有并行或并行,所谓串行就是数据在一条线上传输,并行就是数据在多条线上传输,即并行一次传输多个bit,串行每次传输一个bit。

2、GPIO

        GPIO,英文全称为General-Purpose IO ports,也就是通用I/O口。在微控制器芯片上一般都会提供一个“通用可编程I/O接口”。接口至少有两个寄存器,即“控制方向寄存器”与“数据寄存器”。数据寄存器的各位都直接引到芯片外部,而对数据寄存器中每一位的作用,即每一位的信号流通方向是输入还是输出,则能够通过控制寄存器中相应位独立的加以设置。这样,有无 IO 接口也就成为微控制器差别于微处理器的一个特征。(不同MCU,寄存器配置不一样)

在实际的MCU中,I/O 是有多种形式的。比如,有的数据寄存器能够依照位寻址,有的却不能依照位寻址,这在编程时就要区分了。比如,传统的8051系列,就区分成可位寻址和不可位寻址两种寄存器。另外,为了使用的方便,非常多的 MCU 把 Glue Logic 等集成到芯片内部,增强了系统的稳定性能,比方GPIO接口除去两个标准寄存器必须具备外,还提供上拉寄存器,能够设置I/O的输出模式是高阻,还是带上拉的电平输出,或者不带上拉的电平输出。这在电路设计中,外围电路就能够简化不少。

3、区别

        GPIO 的意思是通用输入输出端口,可由编程决定其状态,MCU 的 I/O 就是 GPIO,也称双向输入输出端口,而 I/O 则泛指所有类型的输入输出端口,包括单向的端口如逻辑门电路的输入输出管脚和双向的 GPIO 端口,而 GPIO 则必然是双向的,这是为了避免不同语境下易造成混淆而采取的特称。

4、IO端口和IO内存

        每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC 等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没有专门用于设备I/O的指令。这就是所谓的“I/O内存”方式。另一类CPU(典型的如X86),将外设的寄存器看成一个独立的地址空间,所以访问内存的指令不能用来访问这些寄存器,而要为对外设寄存器的读/写设置专用指令,如IN和OUT指令。这就是所谓的“I/O端口”方式。但是,用于I/O指令的“地址空间”相对来说是很小的,如x86 CPU的I/O空间就只有64KB(0-0xffff)。
        参考:IO端口和IO内存的区别及分别使用的函数接口。

5、小结

        GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态——是高电平或是低电平。GPIO是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的控制,都是通过 I/O 口进行的。掌握了 I/O 口,差不多相当于掌握了操作硬件的能力。

补充:

        在使用 Arduino 时,需要注意数字 I/O和模拟 I/O。Arduino 上每一个带有数字编号的引脚都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚可以完成输入/输出数字信号的功能。在 Arduino 控制器中,编号前带有“A”的引脚是模拟输入引脚。Arduino 可以读取这些引脚上输人的模拟值,即读取引脚上输入的电压大小。

        当定义为模块管脚时,PIN 起模块中定义的功能。比如定义成 SPI 模块的管脚,那就按照具体芯片的规定,或者定义成 MOSI,或者定义成MISO,或者定义成 SCLK,这些不是任意的。SPI是模块,MISO等是功能管脚。

        当定义成GPIO时,可以定义成高阻,输入,或者输出。这时候,就可以用作操作控制位,点亮LED灯等功能了。

你可能感兴趣的:(Arduino,arduino,gpio,mcu,IO内存,IO端口)