名称:IO口总结
说明:最近横向学习了51单片机、STM32和S3C2440的IO口,做了几个相关的实验。
我们数据结构老师曾经说过 ”差异就是知识“。在此,比较了这几个芯片IO口的使用后,有些感悟,总结如下:
1.IO口是芯片内部CPU和外设之间沟通的桥梁,也是其他模块(如I2C通讯、SPI通讯)的基础。不同的芯片对IO的操作不太相同,但很类似。高级一点的芯片(如STM32,S3C2440)用寄存器控制IO口,输出相应电平;低级一点的芯片(如51),直接控制IO。
2.对于51这样的单片机来说,其IO口的控制使用很简单,就是直接往相应的IO口写入或读出。51单片机的IO口一般比较少,其可以直接控制到位操作。对于STM32和2440来说,对其IO口的控制则必须通过对应的寄存器进行控制。而且一般高级一点的芯片,其会提供更多的IO口,有的IO口还可以进行功能复用,所以在使用时也需要通过配置相应的控制寄存器选择相应的功能。具体来说,对于STM32,一般其每个GPIO口会有8种输入输出模式可供选择,所以对其配置也要复杂的多(不仅要配置功能模式,还要配置端口引脚的最大速度,还要开启相应的时钟模块)。而对于2440来说,对其GPIO的操作要稍微简单些,只需控制三个寄存器即可(分别是控制寄存器、数据寄存器、还有控制上拉寄存器)。其次,控制2440也不需要像STM2那样配置相应的时钟树,只需要对相应的IO口配置相应的功能,然后从数据寄存器中写入或读出数据即可。
3.再说一点关于对于STM32和2440开发过程中遇到的一些想法:对于STM32来说,其在开发过程中可以使用提供的固件库(当然也可以直接操纵寄存器),而对于2440来说,一般还是直接操纵其寄存器。大概是因为STM32的寄存器的操纵比较复杂,2440的寄存器操作要相对简单些吧。
补充:
1、关于芯片IO的再理解:
如果非要做比较的话,CPU就像是人的大脑,IO就像是CPU的触手,用来感触外部世界,从外界获取信息,经过处理之后,产生回馈。这里的IO触手往往和片外外设相联系,如控制LED灯,获取外部传感器信息,通过IO口进行串口通信息等。(同时CPU获取信息还可以通过片内外设的方式,如定时器中断等。)这就决定了有些IO既可以作为普通的IO进行输入输出,也可以有复用功能,也就是作为其他外设模块(如I2C,串口,外部中断等)的基础,通过这些外设模块中的控制器进行操作(本质上还是通过IO口进行输入输出,不同的是这些IO信息在到达CPU之时已经被外设控制器处理一番了)。
2、关于IO口输入输出方式:
对于IO口的工作方式来说,大的方面分为输入和输出两种。但是为了满足各种各样的需要,有些单片机的IO口细化了输入输出的功能。如:C51的IO口除了有普通的输入输出功能外还有功能复用口(并不是全部,有些有);STM32有多达8中的IO口模式选择。所以在操纵IO口的时候一般都需要对IO口进行配置以选择合适的工作方式。(51单片机不用配置IO,选择复用功能是直接开启对应的功能设置位)。
3、关于C51、S3C2440和STM32的IO需要注意的几点:
a. 对于C51来说,其主要的功能复用是在P3口,(52单片机P1口也有几个复用IO口)
b. S3C2440A来说,其有8个端口,每个端口的IO引脚一般数目不一样。
c. 对于STM32来说,其端口不仅有复用功能还有端口重映射功能(把一些复用功能重新映射到其他一些脚上),当用到端口重映射功能的时候需要开启AFIO时钟。