0
点赞
收藏
分享

微信扫一扫

驱动led --GPIO控制

GPIO引脚操作方法概述

  1. 硬件知识_LED原理图
  2. 不同主芯片控制GPIO引脚的方法概述
  3. 具体单板控制GPIO引脚的方法详解
  4. 具体单板LED程序的编写与实验
  5. 汇编与机器码
  6. 编程知识_进制
  7. 编程知识_字节序_位操作
  8. 编写C程序控制LED
  9. 解析C程序的内部机制
  10. 完善LED程序
  11. 编写按键控制LED的程序

GPIO: General-purpose input/output,通用的输入输出口

1.GPIO模块一般结构:

a.有多组GPIO,每组有多个GPIO
b.使能:电源/时钟
c.模式(Mode):引脚可用于GPIO或其他功能
d.方向:引脚Mode设置为GPIO时,可以继续设置它是输出引脚,还是输入引脚
e.数值:对于输出引脚,可以设置寄存器让它输出高、低电平
对于输入引脚,可以读取寄存器得到引脚的当前电平

2.控制原理

在这里插入图片描述
在这里插入图片描述

3.GPIO寄存器操作-程序配置过程:

原则不要影响其他位
过程
使能,工作模式,输入输出方向,高低电平
a.芯片手册一般有相关章节,用来介绍:power/clock
可以设置对应寄存器使能某个GPIO模块(Module)
有些芯片的GPIO是没有使能开头的,即它总是使能的
b.一个引脚可以用于GPIO、串口、USB或其他功能,
有对应的寄存器来选择引脚的功能
c.对于已经设置为GPIO功能的引脚,有方向寄存器用来设置它的方向:输出、输入
d.对于已经设置为GPIO功能的引脚,有数据寄存器用来写、读引脚电平状态

GPIO寄存器的2种常用操作方法:
原则:不能影响到其他位

a.直接读写:读出、修改对应位、写入
要设置bit n:
val = data_reg;
val = val | (1<<n);
data_reg = val;
要清除bit n:
val = data_reg;
val = val & ~(1<<n);
data_reg = val;

b.set-and-clear protocol:
set_reg, clr_reg, data_reg 三个寄存器对应的是同一个物理寄存器,
要设置bit n:set_reg = (1<<n);默认第0位置1,然后移动
要清除bit n:clr_reg = (1<<n);默认第0位置0,然后移动

读GPIO

翻译一下:
① 设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了
② 设置IOMUX来选择引脚用于GPIO
③ 设置GPIOx_GDIR中某位为0,把该引脚设置为输入功能
④ 读GPIOx_DR或GPIOx_PSR得到某位的值(读GPIOx_DR返回的是GPIOx_PSR的值)

写GPIO

翻译一下:
① 设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了
② 设置IOMUX来选择引脚用于GPIO
③ 设置GPIOx_GDIR中某位为1,把该引脚设置为输出功能
④ 写GPIOx_DR某位的值

需要注意的是,你可以设置该引脚的loopback功能,这样就可以从GPIOx_PSR中读到引脚的有实电平;你从GPIOx_DR中读回的只是上次设置的值,它并不能反应引脚的真实电平,比如可能因为硬件故障导致该引脚跟地短路了,你通过设置GPIOx_DR让它输出高电平并不会起效果。

4.GPIO的其他功能:防抖动、中断、唤醒:

后续章节再介绍

举报

相关推荐

0 条评论