理论教育 ARM嵌入式系统基础与应用:GPIO应用举例

ARM嵌入式系统基础与应用:GPIO应用举例

时间:2023-11-03 理论教育 版权反馈
【摘要】:GPIO应用时,有无需上拉电阻和需要上拉电阻两种情况。写入IOPIN寄存器的二进制数据将影响所有被配置为输出的引脚状态:写入0使引脚输出低电平,写入1使引脚输出高电平。图4-1 GPIO的Proteus仿真电路例4-1 GPIO输出实现流水灯。通过检测按键KEY1~KEY8的状态,控制对应的LED亮灭。主程序文件main.c如下:例4-3 IOPIN的特殊应用。本例通过IOPIN寄存器控制,使8个LED灯交替闪烁。

ARM嵌入式系统基础与应用:GPIO应用举例

GPIO应用时,有无需上拉电阻和需要上拉电阻两种情况。利用GPIO采用灌电流方式驱动LED时,无需上拉电阻,只要加一定阻值的限流电阻即可。这种应用中要将相应端口设置为输出,为了保护IO引脚,限流电阻的阻值稍大些为好,通常取470Ω~1kΩ。

GPIO用于输入时(例如检测按键),由于I/O端口内部没有上拉电阻,需要加10kΩ左右的上拉电阻,把I/O口拉到高电平。另外,具有I2C总线功能的I/O端口为开漏输出,在用作I2C总线以及其他功能时,需要加1~10kΩ的上拉电阻。

1.设置P0.0口为输出模式

下列语句设置P0.0为GPIO输出。

978-7-111-44508-1-Chapter04-6.jpg

2.GPIO读写操作

下列语句将读取P0.7~P0.4引脚值,然后从P0.0~P0.3输出。

978-7-111-44508-1-Chapter04-7.jpg

GPIO引脚的输出状态由写入IOSET或IOCLR寄存器的值决定,两者中后写入的寄存器值将决定引脚的最终输出状态。

通过写入IOSET和IOCLR寄存器可以使选定的输出引脚变为高/低电平状态,只有写入1的位对应的引脚才能设置为高/低电平,写入0的位对应的引脚状态不发生改变。仅通过写IOSET或IOCLR寄存器,不能使一个GPIO端口同时输出包含0和1的二进制数,即不能同时将某些引脚设为高电平而将某些引脚设为低电平。

写IOPIN寄存器可以在并行GPIO端口同时输出所需的二进制值。写入IOPIN寄存器的二进制数据将影响所有被配置为输出的引脚状态:写入0使引脚输出低电平,写入1使引脚输出高电平。如果只希望改变端口中几根引脚的状态,必须将IOPIN内容读出并与一个屏蔽值相与(该值使要改变的引脚对应位为0,其他引脚对应位为1),然后将相与的结果和期望得到的引脚输出对应的二进制数相或,最后将相或的结果写回到IOPIN寄存器中。

GPIO的Proteus仿真电路如图4-1所示。

978-7-111-44508-1-Chapter04-8.jpg

图4-1 GPIO的Proteus仿真电路

例4-1 GPIO输出实现流水灯。(www.daowen.com)

将P0端口引脚连接至GPIO,并设置为输出模式,然后通过IO00CLR和IO0SET控制接到P0端口引脚LED的亮灭,形成流水灯,显示花样可以通过数组人为定义,也可通过一定算法计算实现。

主程序文件main.c如下:

978-7-111-44508-1-Chapter04-9.jpg

978-7-111-44508-1-Chapter04-10.jpg

例4-2 GPIO输入实现按键扫描输入。

用GPIO作为输入时,需要外接上拉电阻。程序中设置IODIR使口线成为输入方式,然后读取IOPIN的值即可。通过检测按键KEY1~KEY8的状态,控制对应的LED亮灭。

主程序文件main.c如下:

978-7-111-44508-1-Chapter04-11.jpg

978-7-111-44508-1-Chapter04-12.jpg

例4-3 IOPIN的特殊应用。

通过写IOPIN寄存器,可以让某些端口引脚同时输出包含1和0的二进制数,达到通过端口引脚同时输出高、低电平的目的。本例通过IOPIN寄存器控制,使8个LED灯交替闪烁。

主程序文件main.c如下:

978-7-111-44508-1-Chapter04-13.jpg

978-7-111-44508-1-Chapter04-14.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈