GPIO的描述和配置
来源:互联网 发布:oracle数据库工程师 编辑:程序博客网 时间:2024/05/16 12:19
一、GPIO的综合描述
stm32每一个GPIO端口拥有2个32bits的configuration寄存器(GPIOx_CRL,GPIOx_CRH),2个32bits的数据寄存器(GPIOx_IDR,GPIOx_ODR),1个32bits的set/reset寄存器(GPIOx_BSRR),1个16bits的reset寄存器(GPIOx_BRR)和1个32bits的Lock寄存器(GPIOx_LCKR)。
每一个IO引脚都可以单独编程,但是每一个IO寄存器只能32bits访问(半字或者字节访问都被禁止)。
(二)专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。
(三)每个GPIO口都可以作为外部中断的输入,便于系统灵活设计。
(四)I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这有利于噪声控制。
(五)所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。
(六)大电流驱动能力:GPIO口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD-1.3V时,可以提供或吸收20mA电流。
(七)具有独立的唤醒I/O口。
(八)很多I/O口的复用功能可以重新映射。
(九)GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。
二、GPIO的结构
三、GPIO的配置
(一)
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1。
(3)带下拉输入_IPD—— IO内部下拉电阻输入。
(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电。
(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能。
(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的。
(7)复用功能的推挽输出_AF_PP ——片内外设功能(I 2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK)
GPIO输出的速度匹配:
GPIO_Speed_10MHz 最高输出速率10MHz
GPIO_Speed_2MHz 最高输出速率2MHz
GPIO_Speed_50MHz 最高输出速率50MHz
有一点是关键,即GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如:
1)
2
3
(二)
对应到外设的输入输出功能有下述三种情况:
②外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。
③ADC对应的管脚:配置管脚为模拟输入。
如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。
(三)
1、
2
3、配置各个PIN端口(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_IPU、输入下拉_IPD、开漏输出_OUT_OD、推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)和匹配速度。
4
四、GPIO实例
#include "stm32f10x.h"
#include "stm32_eval.h"
GPIO_InitTypeDef GPIO_InitStructure;
void RCC_Configuration(void);
void Delay(__IO uint32_t nCount);
int main(void)
{
#if 0
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
#ifdef USE_STM3210E_EVAL
#endif
#endif
// Turn on LD4
}
void RCC_Configuration(void)
{
}
void Delay(__IO uint32_t nCount)
{
}
#ifdef
//
// @param
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
}
#endif
//******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****
void SystemInit (void)在system_stm32f10x.c中:
void SystemInit (void)
{
// Set HSION bit
#ifndef STM32F10X_CL
#else
#endif //STM32F10X_CL
#ifdef STM32F10X_CL
//Disable all interrupts and clear pending bits
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL)
#else
#endif // STM32F10X_CL
#if defined (STM32F10X_HD) || (defined STM32F10X_XL)
#endif
}
再次总结一下GPIO的配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//
(1)
(2)
//gpio A组中的哪些引脚,什么模式
typedefstruct
{
}GPIO_InitTypeDef;
typedef enum
{
}GPIOSpeed_TypeDef;
typedef enum
{ GPIO_Mode_AIN =0x0,
}GPIOMode_TypeDef;
库写的相当严谨 使用了枚举,也可见IO 的功能之多性能之强~!
附注1:PLL(Phase Locked Loop): 为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。
附注2:STM32的GPIO口的输出:开漏输出和推挽输出
1、推挽输出与开漏输出的区别:
>>推挽输出:可以输出高,低电平,连接数字器件
>>开漏输出:输出端相当于三极管的集电极.
推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.
要实现 线与 需要用OC(open collector)门电路.是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小,效率高。输出既可以向负载灌电流,也可以从负载抽取电流。
当端口配置为输出时:
开漏模式:输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。
简单来说,开漏是0的时候接GND ,1的时候浮空;推挽是0的时候接GND ,1的时候接VCC。
2、开漏电路特点及应用
组成开漏形式的电路有以下几个特点:
1)
2)
3)可以利用改变上拉电源的电压,改变传输电平。IC的逻辑电平由电源Vcc1决定,而输出高电平则由Vcc2决定。这样我们就可以用低电平逻辑控制输出高电平逻辑了。
4)开漏Pin不连接外部的上拉电阻,则只能输出低电平(因此对于经典的51单片机的P0口而言,要想做输入输出功能必须加外部上拉电阻,否则无法输出高电平逻辑)。
5)标准的开漏脚一般只有输出的能力。添加其它的判断电路,才能具备双向输入、输出的能力。
应用中需注意:
1)
2)上拉电阻R
3、什么是OC、OD
集电极开路门(集电极开路
open-drain是漏极开路输出的意思,相当于集电极开路(open-collector)输出,即ttl中的集电极开路(oc)输出。一般用于线或、线与,也有的用于电流驱动。
open-drain是对mos管而言,open-collector是对双极型管而言,在用法上没啥区别。
开漏形式的电路有以下几个特点:
1)利用外部电路的驱动能力,减少IC内部的驱动。
2)
3)可以利用改变上拉电源的电压,改变传输电平。例如加上上拉电阻就可以提供TTL/CMOS电平输出等。
4)开漏Pin不连接外部的上拉电阻,则只能输出低电平。一般来说,开漏是用来连接不同电平的器件,匹配电平用的。
5)正常的CMOS输出级是上、下两个管子,把上面的管子去掉就是OPEN-DRAIN了。这种输出的主要目的有两个:电平转换和线与。
6)由于漏级开路,所以后级电路必须接一上拉电阻,上拉电阻的电源电压就可以决定输出电平。这样你就可以进行任意电平的转换了。
7)线与功能主要用于有多个电路对同一信号进行拉低操作的场合,如果本电路不想拉低,就输出高电平,因为OPEN-DRAIN上面的管子被拿掉,高电平是靠外接的上拉电阻实现的。(而正常的CMOS输出级,如果出现一个输出为高另外一个为低时,等于电源短路。)
8)OPEN-DRAIN提供了灵活的输出方式,但是也有其弱点,就是带来上升沿的延时。因为上升沿是通过外接上拉无源电阻对负载充电,所以当电阻选择小时延时就小,但功耗大;反之延时大功耗小。所以如果对延时有要求,则建议用下降沿输出。
4、什么是线或逻辑与线与逻辑?
因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS),
注:个人理解:线与,接上拉电阻至电源。(~A)&(~B)=~(A+B),由公式较容易理解线与此概念的由来
如果用下拉电阻和
注:线或,接下拉电阻至地。(~A)+(~B)=~(AB);
这些晶体管常常是一些逻辑电路的集电极开路
顺便提示如果不是
5、什么是推挽结构
一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止.要实现线与需要用OC(open
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小效率高。
输出既可以向负载灌电流,也可以从负载抽取电流。
- GPIO的描述和配置
- [GPIO] 读取和修改GPIO配置参数的ADB命令
- GPIO的工作原理和配置方法
- STM32GPIO的描述和配置
- GPIO配置和管理
- gpio 的配置
- GPIO口的配置
- GPIO的配置过程
- S3C2440-GPIO和jlink配置
- 读取和修改GPIO配置参数的ADB命令
- iMX257的GPIO中断配置
- STM32F103的GPIO配置方式
- Linux 驱动---------gpio配置和基本应用
- msm8996的gpio和irq
- GPIO配置
- GPIO 配置
- cc2541 gpio通用gpio和adc的使用
- linux设备树的gpio和gpio中断应用实例
- 程序中我们所遇到的内存问题
- 机器学习算法与Python实践之(六)二分k均值聚类
- 编写和MQTT服务器通信的Android客户端程序(二)
- 看何炅快乐的100个理由
- 由浅入深探究mysql索引结构原理、性能分析与优化
- GPIO的描述和配置
- 2013
- IOS 中使用 POST请求与GET请求的区别
- 【C++基础】 继承与动态绑定
- Clojure 学习入门(11)—— 宏 macro
- 做oracle的同构的ogg实验
- 做oracle删除表空间的实验
- 用Chrome进行JavaScript的各种调试详解
- mongodb学习二