GPIO实验

2023-05-16

一、GPIO简介

GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出

芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能

实验步骤

    1. 通过电路原理图分析LED的控制逻辑 

    2. 通过电路原理图查找LED与Exynos4412的连接关系

    3. 通过数据手册分析GPIO中哪些寄存器可以控制LED

    4. 通过程序去操控对应的寄存器完成对LED的控制

二、GPIO寄存器分析

高电平导通,低电平截至

 

 

 

 输出嘛,肯定就是Output模式GPX2CON【7】=0x1

 输出高电平就对应位写1,输出低电平就对应位写0

 控制上下拉,点灯暂时用不到。

 设置驱动能力,点灯暂时也用不到,本来就使用了一个三极管当开关,点灯够用了。

 

三、GPIO编程

预处理->编译->汇编->链接

gcc -E

gcc -S

gcc -c

gcc

链接使用的工具是ld, .elf是Linux可执行文件的后缀

-Ttext 0x40005000  是将程序放到内存上,保证程序可以执行。

交叉编译工具链在32位ubuntu上可以正常使用,但是在64位的需要执行这样一条命令

sudo apt-get install lib32z1 lib32ncurses

 

 先rm掉报错的文件,然后

sudo apt update

 

好家伙和我套娃呢

sudo rm /var/lib/apt/extended_states 

然后在

sudo apt update

 E: Unable to locate package lib32ncurses5

  TARGET = LED-ASM
  CROSS_COMPILE = arm-none-linux-gnueabi-
  CC = $(CROSS_COMPILE)gcc
  LD = $(CROSS_COMPILE)ld
  OBJCOPY = $(CROSS_COMPILE)objcopy
  
  all:
          $(CC) -c $(TARGET).s -o $(TARGET).o
          $(LD) $(TARGET).o -Ttext 0x40005000 -o $(TARGET).elf
         $(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin
 
  clean:
         rm $(TARGET).o $(TARGET).elf $(TARGET).bin

   1 
  2 .text
  3 _start:
  4 
  5 LED_CONFIG:
  6         LDR R2, =0x11000c40
  7         LDR R1, =0x10000000
  8         STR R1, [R2]
  9 
 10 LED_ON:
 11         LDR R2, =0x11000c44
 12         LDR R1, =0x00000080
 13         STR R1, [R2]
 14         B STOP
 15 
 16 LED_OFF:
 17         LDR R2, =0x11000c44
 18         LDR R1, =0x00000000
 19         STR R1, [R2]
 20 
 21 STOP:
 22         B STOP
 23 .end

然后把编译好滴.bin文件传给我们的开发板

 

 

 

go 0x40008000 

成功点亮LED2

四、LED实验

现在写个程序让LED2闪烁

.text
_start:

MAIN:
    BL LED_CONFIG
LOOP:
    BL LED_ON
    BL DELAY
    BL LED_OFF
    BL DELAY
    B LOOP 

LED_CONFIG:
    LDR R2, =0x11000c40
    LDR R1, =0x10000000
    STR R1, [R2]
    MOV PC, LR

LED_ON:
    LDR R2, =0x11000c44
    LDR R1, =0x00000080
    STR R1, [R2]
    MOV PC, LR

LED_OFF:
    LDR R2, =0x11000c44
    LDR R1, =0x00000000
    STR R1, [R2]
    MOV PC, LR
DELAY:
    LDR R1, =100000000
L:
    SUB R1, R1, #1
    CMP R1, #0
    BNE L
    MOV PC, LR    

STOP:
    B STOP
.end

运行一下没啥毛病。

本来想写个流水灯来着,太麻烦了,再写个LED3闪烁吧,等以后用C写

 

 

 

 

 

 

 

.text
_start:

MAIN:
    BL LED_CONFIG
LOOP:
    BL LED_ON
    BL DELAY
    BL LED_OFF
    BL DELAY
    B LOOP 

LED_CONFIG:
    LDR R2, =0x11000c20
    LDR R1, =0x00000001
    STR R1, [R2]
    MOV PC, LR

LED_ON:
    LDR R2, =0x11000c24
    LDR R1, =0x00000001
    STR R1, [R2]
    MOV PC, LR

LED_OFF:
    LDR R2, =0x11000c24
    LDR R1, =0x00000000
    STR R1, [R2]
    MOV PC, LR
DELAY:
    LDR R1, =100000000
L:
    SUB R1, R1, #1
    CMP R1, #0
    BNE L
    MOV PC, LR    

STOP:
    B STOP
.end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GPIO实验 的相关文章

随机推荐

  • STM32使用中断及串口通信

    1 中断模式编程控制LED 采用中断模式编程 xff0c 当开关接高电平时 xff0c LED亮灯 xff1b 接低电平时 xff0c LED灭灯 单片机除了基本的连线外 xff0c 我们另外只接一只LED灯 使用外部中断的基本步骤如下 x
  • 用opencv打开图片及视频

    用opencv打开图片及视频 1 opencv的安装 参考文章http t csdn cn QO7dr 2 用opencv打开图片 建立code文件夹存放代码 xff0c 然后打开文件夹创建test1 cpp文件 在test1 cpp文件里
  • 【Keil】 Keil的搭建并配置,并编写简单的汇编程序

    Keil的搭建并配置 一 配置环境1 MDK的安装1 1 MDK5下载1 2安装 2 安装stm32 pack 二 Mdk使用配置技巧1 设置tab键为2个空格2 代码自动补齐3 语法动态错误检测4 右边距指示 三 编写 一个简单的汇编程序
  • 【stm32CubeMX】STM32F103c8t6串口通信

    stm32CubeMX STM32F103c8t6串口通信发送 39 hello windows 39 一 串口通信协议1 UART协议2 RS 2323 RS 485 二 USB转TTL三 配置CubeMX并建立工程四 串口通信实现五 k
  • 【STM32】基于SPI的OLED显示屏与DHT20温湿度采集显示数据

    STM32 基于SPI总线的OLED显示屏与DHT20温湿度采集显示数据 一 SPI通讯协议二 关于0 96英寸OLED模块三 硬件连接四 示例代码五 代码修改与撰写六 屏幕歌词滚动1 滚屏设置2 代码撰写 七 展示八 DHT20温湿度采集
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • 【STM32】基于HAL库使用最小系统板移植uCOS

    STM32 基于HAL库使用最小系统板移植uCOS 一 CubeMX建立工程模板二 下载uC OS III源码三 移植准备四 开始移植1 将uCOS文件添加到项目2 为bsp c和bsp h添加代码3 修改main c文件代码4 修改其余文
  • Ubuntu20.04打不开终端

    Ubuntu20 04打不开终端 下载xterm输入gnome terminal显示 xff1a Error constructing proxy for org gnome Terminal org gnome Terminal Fact
  • 串口DMA发送接收

    目录 一 DMA的基本介绍 1 DMA定义 2 原理 1 请求 2 响应 3 传输 4 结束 3 传送方式 1 停止CPU访问内存 2 周期挪用 3 DMA与CPU交替访问内存 4 DMA中断 二 新建cubemx项目 1 选择STM32F
  • Time Limit Exceeded的原因

    Time Limit Exceeded的原因及避免方法 荷叶田田 CSDN博客
  • GStreamer学习三(延迟)

    1 延迟 延迟 xff08 即latency xff09 是在时间戳0处捕获的样本到达接收器所花费的时间 此时间是根据流水线的时钟测量的 对于只有包含与时钟同步的 接收器 元素的流水线 xff0c latency 始终为0 xff0c 因为
  • 第一届ACC全国高校联赛

    y 竞赛 AcWing 面向全国高校同学的高校联赛 https www acwing com activity content 1173 一 1 暴力 include lt bits stdc 43 43 h gt using namesp
  • JDBC连接数据库

    个人简介 x1f496 作者简介 xff1a 大家好 xff01 我是yukki 个人主页 xff1a yukki x1f4c2 喜欢 xff1a x1f308 点赞 x1f308 收藏 xff01 更新Java x1f308 python
  • idea 文件夹右键新建没有Class

    个人简介 作者简介 xff1a 大家好 xff01 我是yukki 个人主页 xff1a yukki 喜欢 xff1a x1f308 点赞 x1f308 收藏 x1f308 一键三连 xff01 共勉 一 问题发现 xff1a 没法创建ja
  • 《关于我找了好久的bug,却没找出来的,又不小心解决了的事》

    个人简介 作者简介 xff1a 大家好 xff01 我是yukki 个人主页 xff1a yukki 喜欢 xff1a x1f308 点赞 x1f308 收藏 x1f308 一键三连 xff01 共勉 问题 xff1a 这是一个Spring
  • 某某科技实习日志

    个人简介 作者简介 xff1a 大家好 xff01 我是yukki 个人主页 xff1a yukki 喜欢 xff1a x1f308 点赞 x1f308 收藏 x1f308 一键三连 xff01 共勉 时间 2023年 4月 11日 今日任
  • XXXX实习日志

    个人简介 作者简介 xff1a 大家好 xff01 我是yukki 个人主页 xff1a yukki 喜欢 xff1a x1f308 点赞 x1f308 收藏 x1f308 一键三连 xff01 共勉 时间 2023年 4月 12日 今日任
  • STM32——中断优先级分组

    一 SCB AIRCR寄存器 首先 xff0c 对STM32中断进行分组 xff0c 0 4 同时 xff0c 每个中断设置一个抢占优先级和一个响应优先级 1 高抢占可以打断正在执行的低抢占 2 抢占相等 xff0c 高响应不能打断低响应
  • Keil报错总结(1)

    一 newline expected extra characters found c323 头文件定义有问题 ifndef define endif 他们后面的文件名与文件名不一致 xff0c 或者大小写不一致 xff0c 文件名尽量避免
  • GPIO实验

    一 GPIO简介 GPIO xff08 General purpose input output xff09 即通用型输入输出 xff0c GPIO可以控制连接在其之上的引脚实现信号的输入和输出 芯片的引脚与外部设备相连 xff0c 从而实