STM32F103的GPIO 模式区分

发布者:闪耀的星空最新更新时间:2019-07-08 来源: eefocus关键字:STM32F103  GPIO  模式区分 手机看文章 扫描二维码
随时随地手机看文章

四种输入模式:

  • 上拉输入模式(GPIO_Mode_IPU):默认模式下(GPIO没有输入)读取的GPIO引脚数据为1,高电平。

  • 下拉输入模式(GPIO_Mode_IPD):默认模式下(GPIO没有输入)读取的GPIO引脚数据为0,低电平。

  • 浮空输入模式(GPIO_Mode_IN_FLOATING):既没有上拉也没有下拉,引脚电压为不确定值。(主要用于来做 I2C,USART的接收端)

  • 模拟输入模式(GPIO_Mode_AIN):关闭了斯密特触发器,不接上拉下拉电阻,经由另一个线路把电压信号传送到片上外设模块。(主要用于ADC外设的时候)


四种输出模式:

  • 推挽输出模式(GPIO_Mode_Out_PP):输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。适用于输出电平为0或3.3V的场合。(可以输出高,低电平,连接数字器件)

  • 开漏输出模式(GPIO_Mode_Out_OD):输出 0 时,N-MOS 导通,P-MOS 高阻 ,输出0。输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。适用于电平不匹配的场合,输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。(具有线与功能)

  • 复用推挽输出模式(GPIO_Mode_AF_PP):复用模式,

  • 复用开漏输出模式(GPIO_Mode_AF_OD):复用模式,


GPIO口时钟:

GPIO_Speed_10MHz 最高输出速率10MHz 
GPIO_Speed_2MHz 最高输出速率2MHz 
GPIO_Speed_50MHz 最高输出速率50MHz


注释:

       I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声 控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。

关键是GPIO的引脚速度跟应用匹配(推荐10倍以上?)。比如:
1. 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。
2. 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。
3. 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。
4.GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。
1.3

注释:

1. 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。
2. 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。
3. GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。

 

总结:在STM32中选用IO模式
(1) 浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1
(2)带上拉输入_IPU——IO内部上拉电阻输入
(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 ——片内外设功能(I2C的SCL,SDA)
(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)

实例总结:

(1)模拟I2C使用开漏输出_OUT_OD,接上拉电阻,能够正确输出0和1;读值时先
GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以读IO的值;使用
GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);

(2)如果是无上拉电阻,IO默认是高电平;需要读取IO的值,可以使用
带上拉输入_IPU和浮空输入_IN_FLOATING和 开漏输出_OUT_OD;

4、IO低功耗:

关于模拟输入&低功耗,根据STM32的低功耗AN(AN2629)及其源文件,在STOP模式下,为了得到尽量低的功耗,确实把所有的IO(包括非A/D输入的GPIO)都设置为模拟输入

5、程序

(1)时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC, ENABLE);

(2)IO配置:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // IR 输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_15; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

(3)输出输入:

输出0:GPIO_ResetBits(GPIOB, GPIO_Pin_0)
输出1:GPIO_SetBits(GPIOB, GPIO_Pin_0)
输入: GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)


关键字:STM32F103  GPIO  模式区分 引用地址:STM32F103的GPIO 模式区分

上一篇:STM32使用标准库,有时候在SLEEP模式下无法唤醒问题
下一篇:stm32f103 低功耗调试笔记 低功耗模式下一直有个800多uA的电流

推荐阅读最新更新时间:2024-11-07 13:55

STM32的GPIO中断例子
前言:目前开发一个测距仪数据汇总显示仪表,从17年2月开始学习硬件,本家是软件,1个月画原理图,半个月画PCB板,中间花了2个月时间用JAVA开发中级版蓝牙APP,板子焊好后开始学习STM32各个功能,点亮LED灯,花了半个月显示LCD彩屏,模拟SPI,USART通讯,按键,这次是中断NVIC。 说明:我写的不是为了教大家学会中断,我是从 http://www.stmcu.org/module/forum/thread-603652-1-1.html 例子中学会的,大家可以去那里学,以下只是我把我的DEMO贴出来,防忘,本人菜鸟,只会实现不会理解,有什么错误也可以指出。实现两个按钮,按一个蜂鸣器一直响,按另一个关闭 正文: ---
[单片机]
STM32 GPIO寄存器ODR BSRR BRR
使用BRR和BSRR寄存器可以方便地快速地实现对端口某些特定位的操作,而不影响其它位的状态。 比如希望快速地对GPIOE的位7进行翻转,则可以: GPIOE- BSRR = 0x80; // 置'1' GPIOE- BRR = 0x80; // 置'0' 如果使用常规'读-改-写'的方法: GPIOE- ODR = GPIOE- ODR | 0x80; // 置'1' GPIOE- ODR = GPIOE- ODR & 0xFF7F; // 置'0' 有人问是否BSRR的高16位是多余的,请看下面这个例子: 假如你想在一个操作中对GPIOE的位
[单片机]
STM32之GPIO学习
每个通用 I/O 端口包括 **4 个 32 位配置寄存器**( GPIOx_MODER、 GPIOx_OTYPER、 GPIOx_OSPEEDR 和 GPIOx_PUPDR)、 **2 个 32 位数据寄存器**(GPIOx_IDR 和 GPIOx_ODR)、 **1 个 32 位置位/复位寄存器** (GPIOx_BSRR)、 1 个 32 位**锁定寄存器** (GPIOx_LCKR) 和 2 个 32 位**复用功能选择寄存器**( GPIOx_AFRH 和 GPIOx_AFRL)。 GPIO初始化 GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClock
[单片机]
STM32之<font color='red'>GPIO</font>学习
STM32F103,HAL实现软件I2C,与硬件I2C
1,硬件I2C HAL_I2C_Mem_Write(&hi2c1,0x88,0,I2C_MEMADD_SIZE_8BIT,0,0,0X10);//写 HAL_I2C_Master_Receive(&hi2c1,0x89,(uint8_t*)datatemp,4,0x10);//读 2 软件I2C #ifndef __MYI2C_H__ #define __MYI2C_H__ #include stm32f1xx_hal.h #include main.h #include stdint.h #define CPU_FREQUENCY_MHZ 72 #define MYI2C_SCL_PIN I2C_S
[单片机]
<font color='red'>STM32F103</font>,HAL实现软件I2C,与硬件I2C
STM32F103的PC13、PB3和PB4定义为普通IO口使用
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// PC13初始化: PC13的.c文件初始化: void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AP
[单片机]
用AT91 RM9200构建高可靠嵌入式系统
   摘要 提出一种基于AT91RM9200处理器的高可靠双机温备解决方案。利用EPlC6、MAX6374设计两个冗余的外部Watchdog监控处理器系统的工作状态,利用AT91RM9200自带的Watchdog作为内部监测机制监控处理器本身的故障;设计并给出了以AT91RM9200为核心的监控机制的具体实现,包括心跳信号的发送和中断服务程序的设计。   本文设计了一种以AT91RM9200处理器为核心的高可靠嵌入式系统。系统具有两台机组,当一台机组发生故障后,另一台机组接管工作并继续运行。系统提供外部和内部Watchdog(看门狗)监控机制构成一级冗余、两级监控的可靠性设计方案。其中外部Watchdog分别采用MAX6374和
[嵌入式]
[单片机框架][bsp层][nrf51822][nrf51422][nrf51802][bsp_gpio] GPIO配置和使用
GPIO The general purpose I/O is organized as one port with up to 32 I/Os (dependent on package) enabling access and control of up to 32 pins through one port. Each GPIO can be accessed individually with the following user configurable features: Input/output direction Output drive strength Internal pull-up and pull-d
[单片机]
STM32中GPIO的8种工作模式
最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 对于刚入门的新手,我想这几个概念是必须得搞清楚的,平时接触的最多的也就是推挽输出、开漏输出、上拉输入这三种,但一直未曾对这些做过归纳。因此,在这里做一个总
[单片机]
STM32中<font color='red'>GPIO</font>的8种工作<font color='red'>模式</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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