STM32的GPIO口的8种配置模式

发布者:达文西happy最新更新时间:2015-10-28 来源: eefocus关键字:STM32  GPIO口  配置模式 手机看文章 扫描二维码
随时随地手机看文章
一、 STM32的输入输出管脚有下面8种(4输入+2输出+2复用输出)可能的配置:

 

    ① 浮空输入_IN_FLOATING

 

    ② 带上拉输入_IPU 

 

    ③ 带下拉输入_IPD          

 

    ④ 模拟输入_AIN

 

    ⑤ 开漏输出_OUT_OD    

 

    ⑥ 推挽输出_OUT_PP

 

    ⑦ 复用功能的推挽输出_AF_PP

 

    ⑧ 复用功能的开漏输出_AF_OD

 

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

 

    输出速度又称输出驱动电路的响应速度,可理解为:输出驱动电路的带宽,即一个驱动电路可以不失真地通过信号的最大频率。

 

    如果一个信号的频率超过了驱动电路的响应速度,就有可能信号失真。如果信号频率为10MHz,而你配置了2MHz的带宽,则10MHz的方波很可能就变成了正弦波。就好比是公路的设计时速,汽车速度低于设计时速时,可以平稳地运行,如果超过设计时速就会颠簸,甚至翻车。

 

    关键是: GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。

 

    带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。使用合适的驱动器可以降低功耗和噪声。

 

 

    GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如:

 

    1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

 

    1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。

 

    1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。

 

  1.2 GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。

 

  1.3 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。

 

  1.4 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。

 

  1.5 GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。

 

二、GPIO的翻转速度指:输入/输出寄存器的0 ,1 值反映到外部引脚(APB2上)高低电平的速度.手册上指出GPIO最大翻转速度可达18MHz。通过简单的程序测试,用示波器观察到的翻转时间是综合的时间,包括取指令的时间、指令执行的时间、指令执行后信号传递到寄存器的时间(这其中可能经过很多环节,比如AHB、APB、总线仲裁等),最后才是信号从寄存器传输到引脚所经历的时间。如有上拉电阻,其阻值越大,RC延时越大,即逻辑电平转换的速度越慢,功耗越大。

 

三、在STM32中如何配置片内外设使用的IO端口

 

    首先,一个外设经过 ①配置输入的时钟和 ②初始化后即被激活(开启);③如果使用该外设的输入输出管脚,则需要配置相应的GPIO端口(否则该外设对应的输入输出管脚可以做普通GPIO管脚使用);④再对外设进行详细配置。

 

    对应到外设的输入输出功能有下述三种情况:

 

    ① 外设对应的管脚为输出:需要根据外围电路的配置选择对应的管脚为复用功能的推挽输出或复用功能的开漏输出。

    ② 外设对应的管脚为输入:则根据外围电路的配置可以选择浮空输入、带上拉输入或带下拉输入。

    ③ ADC对应的管脚:配置管脚为模拟输入。

 

    如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。将管脚配置成复用输出功能后,如果外设没有被激活,那么它的输出将不确定。

 

 [page]

四、 通用IO端口(GPIO)初始化

 

 4.1 GPIO初始化

 

    41.1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | B | C, ENABLE):使能APB2总线外设时钟;

 

    41.2 RCC_ APB2PeriphResetCmd (RCC_APB2Periph_GPIOA | B | C, DISABLE):释放GPIO复位。

 

  4.2 置各个PIN端口(模拟输入_AIN、输入浮空_IN_FLOATING、输入上拉_IPU、输入下拉_IPD、开漏输出_OUT_OD、推挽式输出_OUT_PP、推挽式复用输出_AF_PP、开漏复用输出_AF_OD)。

 

  4.3GPIO初始化完成。

 

五、 的GPIO操作函数

 

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输入

 

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//读GPIO的输入

 

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输出

 

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//读GPIO的输出

 

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位置位

 

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位复位

 

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//写GPIO的某个位

 

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//写GPIO

 

 六、管脚的复用功能重映射

 

1、复用功能:内置外设是与I/O口共用引出管脚(不同的功能对应同一管脚)

 

STM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。

 

2、重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功   能的引出脚位是可通过程序改变到其他的引脚上!

 

直接好处:PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。

 

如:USART1: 0: 没有重映像(TX/PA9,RX/PA10); 1: 重映像(TX/PB6,RX/PB7)。

 

(参考AFIO_MAPR寄存器介绍)[0,1为一寄存器的bit值]

 

【注】 下述复用功能的引出脚具有重映射功能:

 

- 晶体振荡器的引脚在不接晶体时,可以作为普通I/O口

 

- CAN模块; - JTAG调试接口;- 大部分定时器的引出接口; - 大部分USART引出接口

 

- I2C1的引出接口;  - SPI1的引出接口;

 

举例:对于STM32F103VBT6,47引脚为PB10,它的复用功能是I2C2_SCL和 USART3_TX,表示在上电之后它的默认功能为PB10,而I2C2的SCL和USART3的TX为它的复用功能;另外在TIM2的引脚重映射后,TIM2_CH3也成为这个引脚的复用功能。

 

(1)要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。

 

(2)使用STM32F103VBT6的47脚作为TIM2_CH3,则需要对TIM2进行重映射,然后再按复用功能的方式配置对应引脚。
关键字:STM32  GPIO口  配置模式 引用地址:STM32的GPIO口的8种配置模式

上一篇:在Keil MDK环境下使用STM32固件库
下一篇:STM32 GPIO BRR和BSRR寄存器

推荐阅读最新更新时间:2024-03-16 14:37

STM32系列MCU开发环境的搭建
导读: 选择某款MCU的学习一般从其开发环境的搭建开始,即安装支持该处理器的编译、调试软件。其中最为关键的就是编译器的选择与安装,编译器的具体工作原理和作用可以参见本公众号“嵌入式ARM篇”合集文章《01_编译过程简介及为什么需要交叉编译器》。支持STM32系列MCU的编译软件有很多种,开发编译环境也各不相同,其中Keil uVision5(以下简称Keil5)编译软件以其简单易用的特点,应用最为广泛。 为了便于MCU的快速推广,开发商积极推出了各自的底层应用函数库,便于工程师的快速开发与应用。STM32系列MCU目前主要有两种函数库,一种是标准库,一种是HAL库(以下简称硬件库)。在使用标准库开发不同系列的MCU时,其中的功
[单片机]
<font color='red'>STM32</font>系列MCU开发环境的搭建
stm32驱动SST25VF程序
main.c: #include stm32f10x_lib.h #include hw_conf.h #include SST25V.h void delay(int d); u8 Tx_Buffer = {0x72,0x62,0x02,0x78,0x60,0x96,0x86,0x79,0x85,0x24,0x36,0x48,0x56,0x68,0x70,0x75,0x88,0x24}; u8 Rx_Buffer ; u8 DataByte=0; int main(void) { #ifdef DEBUG debug(); #endif Setup_System(); //系统启动 SST25V_Init(); //
[单片机]
学习笔记----stm32的usb外设概述
一、stm32的usb简介: 1。usb外设实现了usb2.0全速总线和APB1总线间的接口。 2。usb外设支持usb挂起/恢复操作,可以停止设备时钟实现低功耗。 二、usb主要特征 1。符合usb2.0全速设备的技术规范 2。可配置1到8个usb端口 3。CRC(循环荣誉校验)生成/检验,反向不归零(NRZI)编码/解码和位填充 4。支持同步传输 5。支持批量/同步端点的双缓冲区机制 6。支持usb挂起/恢复操作 7。诊所定时钟脉冲生成 注意:usb和can公用一个专用的512字节的SRAM存储器用于数据的发送和接收,因此不能同时使用usb和can(共享的SRAM被usb和can模块互斥的访问)usb和can可以同时用于一
[单片机]
学习笔记----<font color='red'>stm32</font>的usb外设概述
stm32定时器PWM模式和输出比较模式
pwm模式是输出比较模式的一种特例,包含于输出比较模式中 /** @defgroup TIM_Output_Compare_and_PWM_modes * @{ */ #define TIM_OCMode_Timing ((uint16_t)0x0000) #define TIM_OCMode_Active ((uint16_t)0x0010) #define TIM_OCMode_Inactive ((uint16_t)0x0020) #define TIM_OCMode_Toggle ((uint16_t)0x0030) #define TIM_OCMode_
[单片机]
<font color='red'>stm32</font>定时器PWM<font color='red'>模式</font>和输出比较<font color='red'>模式</font>
STM32上使用UCOSII--任务
一、UCOSII简介 UCOSII 是一个可以基于 ROM 运行的、可裁减的、抢占式、实时多任务内核,具有高度可 移植性,特别适合于微处理器和控制器,是和很多商业操作系统性能相当的实时操作系统 (RTOS)。为了提供最好的移植性能, UCOSII 最大程度上使用 ANSI C 语言进行开发,并且已经移植到近 40 多种处理器体系上,涵盖了从 8 位到 64 位各种 CPU(包括 DSP)。 UCOSII 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用 C 语言编写的。 CPU 硬件相关部分是用汇编语言编写的、总量约 200 行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的 CPU 上。用户只要有标准的 A
[单片机]
<font color='red'>STM32</font>上使用UCOSII--任务
STM32 基础系列教程 14 - IIC
前言 学习stm32 IIC接口的使用,用IIC 接口实现与IIC设备的通信功能。 示例详解 基于硬件平台: STM32F103C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 IIC 接口配置 引脚配置(如上图右侧所示,保持默认即可) 中断配置(保持默认即可) 工程代码 在main.c 中加入如下图所示代码: 代码的功能是
[单片机]
<font color='red'>STM32</font> 基础系列教程 14 - IIC
STM32移植lwip之官方工程修改
本篇目标:在之前的硬件基础上,修改ST官方移植lwip的工程,使PC机能ping通stm32 材料准备: 硬件基础:stm32f407+lan9303 官方资料:包含代码和移植手册(stm32官方移植lwip资料) 修改代码:包含移植后的代码(STM32官方移植lwip修改代码) 跟着文件路径打开其中一个工程,先选择不带操作系统的练习测试 文件路径:STM32F4x7_ETH_LwIP_V1.1.1 - Project - Standalone - tcp_echo_server - MDK-ARM - Project.uvproj 先编译一下,出现3个Warning,其中两个是变量定义未使用,不影响暂且不管,还有一
[单片机]
<font color='red'>STM32</font>移植lwip之官方工程修改
STM32开源开发环境的搭建
STM32开源开发环境的搭建 Eclipse+ GNU ARM Eclipse Plug-in+Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环境。 这个教程是去年刚开始做STM32的时候写的,当时还没开始用STM32,先琢磨了免费的开发环境搭建,因此写的这个教程可能有很多错误,最近在网上看到很多人在论坛里转载了这个教程,由于当初我在ourdev论坛上只是贴出了文字,并上传了一个pdf版本,因此这次在博客里更新一下。帖子中的内容暂时不更新了,后面会重新写一个教程,欢迎大家关注我的博客。 1.环境搭建 1.1 Eclipse的下载与安装 Eclipse 是一个开放源代码
[单片机]
<font color='red'>STM32</font>开源开发环境的搭建
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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