博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gpio (一) 硬件
阅读量:4283 次
发布时间:2019-05-27

本文共 3485 字,大约阅读时间需要 11 分钟。

  • gpio 与 管脚 的关系
General-purpose input/outputs一般除了 vcc gnd 这些管脚 ,其他所有管脚都支持gpio.vcc/vdd 和 gnd/vss 属于 supply pin其他管脚属于 I/O pin,其中极少数只能 Input大部分管脚能被作为 gpio 使用,还可以被复用为其他功能(例如,串口)管脚 功能 可能是普通的gpio ,也可能是 串口, pwm 功能,中断,中的一个或者复用.
  • gpio 是什么
是功能,由什么支撑的	IO口基本结构	请查询 
其中包括 (输入数据,输出数据,位设置,位清除)寄存器 ttl肖特基触发器 上下拉电阻 pmos nmos 保护二级管 .

51 的 gpio

// 比较简单,直接控制输出,没有时钟,#include 
//P0口输出0xFEP0 = 0xFE;

stm32f4 的 gpio

STM32F4 最多有 9 组 IO,分别用大写字母表示,即 x=A/B/C/D/E/F/G/H/I,每组16个IO口STM32F4 每组通用 I/O 端口包括 	4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)	2 个 32 位数据寄存器(IDR 和 ODR)	1 个 32 位置位/复位寄存器 (BSRR)	1 个 32 位锁定寄存器 (LCKR) 	2 个 32 位复用功能选择寄存器(AFRH 和 AFRL)	STM32F4 每组 IO 有 10 个 32 位寄存器控制	其中常用的有 4 个配置寄存器+2 个数据寄存器+2 个复用功能选择寄存器,共 8 个
  • 常见配置代码
// stm32f4xx_gpio.h// stm32f4xx_gpio.cvoid LED_Init(void){
GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOF时钟 //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;//LED0和LED1对应IO口 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 // 配置 MODER、OTYPER、OSPEEDR 和 PUPDR GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化GPIO // 操作 BSRRL 寄存器 GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10设置高,灯灭 // 操作 BSRRH 寄存器 GPIO_ResetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10设置低,灯亮 // GPIO_Write 操作 ODR寄存器}// 读输出 GPIO_ODR// 读输入 GPIO_IDR// GPIO_PinLockConfig 操作 LCKR// AFRH 和 AFRL 在 stm32f4xx_gpio.c 中没有
推挽输出和 开漏输出 有什么区别?为什么一般控制灯的时候用 推挽输出?stm32F4 的 gpio 为什么需要设置时钟	一般使用外设都去使能时钟	在 stm32f4xx_rcc.h 中 RCC_AHB1Periph_GPIOA - RCC_AHB1Periph_GPIOK 都属于 IS_RCC_AHB1_CLOCK_PERIPH如果使用的不是 引脚的 gpio 功能,需要配置 gpio 吗? 	需要这几个参数的确定  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出  // 如果你要模拟 100M 速率的 总线,那么 需要设置 为 GPIO_Speed_100MHz;  // 如果是 复用 uart ,则 需要设置 GPIO_Speed_2MHz 就可以了  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz // 也就是说你可以 10^8hz 操作gpio,一个周期 为 10^(-8)s , 就是 10^(-8) * 10^(9) nm = 10nm;???   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 // 一般是让当前的 线 失效, 空闲推挽输出:可以输出高,低电平,连接数字器件。 输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。 输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);可以读IO输入电平变化,此模式可以把端口作为双向IO使用。 I2C控制器的两根引脚就应该是开漏输出,上拉电阻2.2K应该可以,如果小于1K的话,控I2C的时候引脚会一直为高或其他情况.
  • 上下拉

s3c2440 的 gpio

在这里插入图片描述

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

图1图2 中 阐述了 管脚 与功能的关系图3 阐述了 功能与寄存器的关系所以一般设置寄存器来控制 设置管脚的功能例如我们可以配置 0x1140 0000开始的四个字节中 的 31-28bit 为 0b0000 ,会直接配置为 0b1111,为EXT_INT1[7](注意,中断不是输入,虽然看起来是输入管脚,但是功能是中断,中断和输入是两个功能)例如我们可以配置 0x1140 0000开始的四个字节中 的 37-24bit 为 0b0001 ,来配置 XuCTSn[1]引脚的功能为 Output

在这里插入图片描述

gpa0[7] 设置为了 终端 ,gpa0[6] 设置为了 输出中断时可以 读 GPA0DAT[7] (此时要考虑是哪一方将 GPA0DAT[7] 还原)那么 就可以 设置 GPA0DAT[6] 为1,来讲gpa0[6]的引脚拉高且输出.

在这里插入图片描述

gpa0[7] 设置为中断,此时如果是上升沿触发,电平触发,则需要设置下拉, 15:14 设置为 0b01gpa0[6] 设置为输出,可以不设置,为 disable.默认为 下拉其实只要设置过一次,就不再是

在这里插入图片描述

上面是驱动能力,根据需要设置
  • 三星寄存器概述
一组寄存器如下,控制8个脚,一个寄存器控制8个脚的一个方面.所以设置一个脚,一般会设置6个寄存器,如果不设置,就使用默认值.GPD0CON:	(模式寄存器)引脚功能	GPD0DAT:	(数据寄存器)引脚输入或输出的数据	GPD0PUD:	(上下拉寄存器)	GPD0DRV:	(驱动能力寄存器)	GPD0CONPDN:	(功耗相关寄存器)	GPD0PUDPDN:	(功耗相关寄存器)
  • 代码
#define GPFCON      (*(volatile unsigned long *)0x56000050)#define GPFDAT      (*(volatile unsigned long *)0x56000054)int main(){
GPFCON = 0x00000100; // 设置GPF4为输出口, 位[8:7]=0b01 GPFDAT = 0x00000000; // GPF4输出0,LED1点亮 return 0;}

转载地址:http://lengi.baihongyu.com/

你可能感兴趣的文章
Matplotlib模块
查看>>
StanFord ML 笔记 第一部分
查看>>
StanFord ML 笔记 第二部分
查看>>
StanFord ML 笔记 第三部分
查看>>
《图像处理实例》 之 局部极值提取
查看>>
硬盘读取不了-->>完美解决
查看>>
《图像处理实例》 之 拓扑重建
查看>>
《图像处理实例》 之 寻找图纸标注
查看>>
《图像处理实例》 之 拟合求交点
查看>>
《图像处理实例》 之 填充封闭区域
查看>>
《图像处理实例》 之 疏密程度统计
查看>>
支持向量机(理论+opencv实现)
查看>>
K-means算法(理论+opencv实现)
查看>>
高斯混合模型(理论+opencv实现)
查看>>
VS2015+Python3.5的配置
查看>>
分水岭算法(理论+opencv实现)
查看>>
《图像处理实例》 之 精确寻找一个圆
查看>>
opencv3.1+contrib的配置大总结(配置了两天,遇到问题无数)
查看>>
opencv小问题大智慧
查看>>
《图像处理实例》 之 车牌定位
查看>>