GPIO接口及点亮第一个LED灯

发布者:CelestialMagic最新更新时间:2024-12-03 来源: cnblogs关键字:GPIO接口  点亮  LED灯 手机看文章 扫描二维码
随时随地手机看文章

一、GIPIO介绍

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

1.GPIO的优点
  • 低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。

  • 集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。

  • 小封装:GPIO器件提供最小的封装尺寸 ― 3mm x 3mm QFN!

  • 低成本:您不用为没有使用的功能买单。

  • 快速上市:不需要编写额外的代码、文档,不需要任何维护工作。

  • 可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。

2.GPIO的寄存器
    • GPxCON 寄存器
      用于配置引脚功能。 PORT A 与 PORT B~PORT H/J 在功能选择上有所不同,GPACON 中每一位对应一根引脚,共 23 个引脚。当某位被设为 0 时候,相应引脚为 输出引脚。此时我们可以在GPADAT 中相应的写入 1或者 0 来让此引脚输出高电平或者低电平;当某位被设为1时,相应引脚为地址线或用于地址控制,此时GPADATA无用。
      一般而言 GPACON 通常被设为 1 ,以便访问外部器件。
      PORT B~PORT H/J在寄存器操作方面完全相同,GPxCON 中每两位控制一根引脚,

      • 00 输入

      • 01 输出

      • 10 特殊功能

      • 11 保留不用

    • GPxDAT 寄存器
      GPxDAT用于读写引脚,当引脚被设为输入时候,读此寄存器可知道相应引脚的电平状态高还是低,当引脚被设为输出时候,写此寄存器的位,可令引脚输出高电平还是低电平。

    • GPxUP寄存器
      GPxUP寄存器某位为1时,相应管脚没有内部上拉电阻;为 0 时候 相应管脚有内部上拉电阻。
      上拉电阻作用在于,当GPIO 引脚处于第三种状态时候,既不是输出高电平,也不是输出低电平。而是呈现高阻态,相当于没有接芯片。它的电平状态由上下拉电阻决定。

二、控制LED实例

1.查看硬件原理图

2.查看数据手册
  • 在三星公司提供的DataSheet手册中找到介绍GPIO的章节

3.确定关键定义
    • GPJ0CON寄存器
      寄存器地址:0xE0200240
      要控制的位数:[15:12]
      要设置的二进制数据:0b0001

    • GPJ0PUD寄存器
      寄存器地址:0xE0200248
      要控制的位数:[7:6]
      要设置的二进制数据:0b00

    • GPJ0DAT寄存器
      寄存器地址:0xE0200244
      要控制的位数:[3]
      要设置的二进制数据:0b1


3.确定关键定义

GPJ0CON寄存器

寄存器地址:0xE0200240

要控制的位数:[15:12]

要设置的二进制数据:0b0001

GPJ0PUD寄存器

寄存器地址:0xE0200248

要控制的位数:[7:6]

要设置的二进制数据:0b00

GPJ0DAT寄存器

寄存器地址:0xE0200244

要控制的位数:[3]

要设置的二进制数据:0b1

4.编写程序


start:

    @;配置GPJ0CON寄存器 Address=0xE0200240 [15:12]=0b0001

    ldr r0,=0xE0200240

    ldr r1,=0x1000

    str r1,[r0]


    @;配置GPJ0PUD寄存器 Address=0xE0200248 [7:6]=0b00

    ldr r0,=0xE0200248

    ldr r1,=0x0

    str r1,[r0]


    @;配置GPJ0DAT寄存器 Address=0xE0200244 [3]=1

    ldr r0,=0xE0200244

    ldr r1,=0x4

    str r1,[r0]


5.实例测试

生成目标文件

arm-linux-gcc -c led.S


生成可执行文件

arm-linux-gcc -Ttext 0x34000000 -nostartfiles -nostdlib led.o -o led


生成独立执行的二进制

arm-linux-objcopy -O binary led led.bin


使用tftp命令下载

tftp 0x34000000 led.bin


使用go命令执行

go 0x34000000


6.简单的流水灯实现


.global _start

_start:

    ldr r0, =0x11111111

    ldr r1, =0xE0200240

    str r0, [r1]

    

    ldr r0, =0x11111111

    ldr r1, =0xE02000A0

    str r0, [r1]

 

flash:    

    ldr r0, =(1<<1)

    ldr r1, =0xE02000A4

    str r0, [r1]


    ldr r0, =~(1<<3)

    ldr r1, =0xE0200244

    str r0, [r1]

    bl delay

    

    ldr r0, =~(1<<4)

    ldr r1, =0xE0200244

    str r0, [r1]    

    bl delay

    

    ldr r0, =~(1<<5)

    ldr r1, =0xE0200244

    str r0, [r1]

    bl delay

    

    ldr r0, =~(1<<1)

    ldr r1, =0xE02000A4

    str r0, [r1]

    bl delay

    

    b flash

    

    

delay:

    ldr r2, =100000000

    ldr r3, =0x0

delay_loop:

    sub r2, r2, #1

    cmp r2, r3

    bne delay_loop

                    

    mov pc, lr    


关键字:GPIO接口  点亮  LED灯 引用地址:GPIO接口及点亮第一个LED灯

上一篇:ARM处理器寻址方式
下一篇:S5PV210启动过程详解

推荐阅读最新更新时间:2026-03-20 16:55

STM32单片机开发入门[二]——点亮板载LED灯
本文将为你介绍如何使用CubeMX配置并创建一个项目并将写一个亮灯程序,使用Keil烧录进开发板中运行 一、使用CubeMX创建一个新工程 1.找到自己开发型号对应的选项并选中 2.设置Pinout的RCC中的High Speed Clock为Crystal/Ceramic Resonator 这一步的目的是选中我们所需的时钟源,一般都选为Crystal, 3.设置SYS中的Debug为Serial Wire 此处的选择为的是使用SWD调试,相比于使用JTAG,SWD所需的接口资源更少且效果一样 4.在屏幕右侧的接口图找到自己的LED灯对应的芯片引脚,并设置为GPIO_output模式输出 如果不知
[单片机]
STM32单片机开发入门[二]——<font color='red'>点亮</font>板载<font color='red'>LED灯</font>
Visual Studio 2022 开发 STM32 单片机 - 环境搭建点亮LED灯
安装 VS2022社区版 软件 选择基础的功能就好 安装 VisualGDB 软件(CSDN资源) 按照提示一步一步安装就好 VisualGDB激活软件(CSDN资源) 将如下软件放在VisualGDB的安装目录下直接运行就好 打开VisualStudio软件 创建新项目 选择Embedded ProjectWizard项目 设置工程参数 按照默认的参数不修改 以上参数不修改 如果在filter中没有搜到芯片,在Download more devices下载对应设备 查看开发板的LED灯的硬件链接引脚 设置对应的参数
[单片机]
Visual Studio 2022 开发 STM32 单片机 - 环境搭建<font color='red'>点亮</font><font color='red'>LED灯</font>
STM32点亮闪烁LED灯
1/*本程序实现STM开发板上LED灯红绿蓝闪烁*/ 2 3 4 5 #include stm32f10x.h // 相当于51单片机中的 #include reg51.h 6 #include stm32f10x_gpio.h 7 /* 8 9 *由于STM32的GPIO工作模式有8种(输入4种+输出4种) 10 *在GPIO输出之前要先对要操作的GPIO进行配置 11 知识点: 12 一个结构体 13 typedef struct//结构体 14 { 15 uint16_t GPIO_Pin; 16 GPIOS
[单片机]
STM32<font color='red'>点亮</font>闪烁<font color='red'>LED灯</font>
基于STM32单片机点亮LED灯
1-编写第一个程序点亮LED灯 下面是原理图,连接的是PC0-PC7引脚: 1static void Led_Cofig(void) 2{ 3 /*定义一个GPIO_InitTypeDef类型的结构体*/ 4 GPIO_InitTypeDef GPIO_InitStructure; 5 /*开启LED相关的GPIO外设时钟*/ 6 RCC_APB2PeriphClockCmd(LED_GPIO_CLCK, ENABLE); 7 /*选择要控制的GPIO引脚*/ 8 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; 9 /*设置引脚模式为通用推挽输出*/
[单片机]
基于STM32单片机<font color='red'>点亮</font><font color='red'>LED灯</font>
1、换种思路学Proteus之新建工程并点亮一颗LED灯
软件版本:Proteus 8.9 SP0 说明:其他版本的Proteus软件在操作上会略有差异,请大家参考“Help”帮助文档 1、从零开始新建一个工程 双击 打开软件,进入到整个软件的主界面 点击“File- New Project” 弹出的对话框中“Name”栏改好工程的名字,我这里写的是“LED”;“Path”栏中点击“Browse”选择好要保存的路径(或者直接将路径复制过来粘贴都可以);然后点击“Next”。 这里要你选择原理图模板,我这里保持默认的“Landscape A3”即可,点击“Next” 这里保持默认“Do not create a PCB layout(不创建PCB板)”,点击“Next
[单片机]
1、换种思路学Proteus之新建工程并<font color='red'>点亮</font>一颗<font color='red'>LED灯</font>
单片机AT89C51--3.点亮LED灯
1. 什么是LED灯 LED:半导体发光二极管。直接将电能,转化为光能 2. LED的工作参数 普通发光二极管工作压降为:1.6-2.1 工作电流为:1-20mA 电流大概为3mA,I=(5-2)/1K 3. 原理图分析 J9表示跳线 控制LED的亮暗,通过P1的高低电平控制。 编程是给P1口赋值0 4. C语言知识 #include reg52.h //引用89c51的头文件 sbit LED1 = P1^0; //定义一个位。把P1.0用LED1代替 void main() { LED1 = 0; //让LED1输出0,LED1就会量,具体看电路图 } sbit 位
[单片机]
单片机AT89C51--3.<font color='red'>点亮</font><font color='red'>LED灯</font>
【51单片机】STC89C52点亮LED灯,含C代码(2)
1.参考教程:清翔51单片机教程 2.基本原理 : 通过控制通过控制右边输出端高低电频,来控制灯的亮和熄灭。灯左边5V电压,右边若是赋予逻辑0(0V),有电压差,则灯有电流通过,被点亮。 3.具体软件操作步骤在第一篇: 4.程序和结果 在.c文件里写入程序 以点亮1号灯为例, 编译后烧录结果 同理多盏灯同时点亮 结果
[单片机]
【51单片机】STC89C52<font color='red'>点亮</font><font color='red'>LED灯</font>,含C代码(2)
51单片机点亮LED灯、流水灯
2-1点亮一个LED灯 1.首先在keil中新建一个工程,这里需要注意,将所写的工程可以统一一个地方进行存储,这样方便查找。之后再右击添加新文件 2.首先右击代码行,引用文件 3.之后再编写主函数 4.以其中亮一个LED灯为例,编写程序如下: P2=0xFE;//1111 1110 转换成十六进制0x表示前缀代表的是十六进制数 P2=0xFE;//1111 1110 下载程序后到STC-ISP中选择单片机的型号,串口号,打开相应的程序文件,进行下载编程 5.实现效果 6.当然,也可以加上循环语句表示让其一直循环下去,实现效果是一样的 通过点亮第一个LED灯,可以知道以八个一组为例改变010
[单片机]
51单片机<font color='red'>点亮</font><font color='red'>LED灯</font>、流水灯
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved