STM32f10xxx 之 GPIO口配置

发布者:bettylove最新更新时间:2017-06-04 来源: eefocus关键字:STM32f10xxx  GPIO口  配置 手机看文章 扫描二维码
随时随地手机看文章

背景

配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了此文章。

正文

先说说GPIO口speed的问题,这个一般是用来定义GPIO口上升沿或者下降沿的时间,频率越高,上升沿下降沿时间越短,但是其噪音也就越大,因此,如果没有特别的需求,该值应该不要配置太高。在技术手册里,其给了3个速度选择,库函数的相应表现形式如下:

/** 
  * @brief  Output Maximum frequency selection  
  */typedef enum{ 
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

50MHZ,意味着GPIO口理论上1s可以翻转50兆次,即1微妙翻转50次,PWM应该不需要如此高的频率,所以,本次PWM的GPIO口速度配置为10MHZ。

再来说说GPIO口其他配置,库函数GPIO口配置的函数为:

/**
  * @brief  Initializes the GPIOx peripheral according to the specified
  *         parameters in the GPIO_InitStruct.
  * @param  GPIOx: where x can be (A..G) to select the GPIO peripheral.
  * @param  GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that
  *         contains the configuration information for the specified GPIO peripheral.
  * @retval None
  */void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct){    // ... 详细内容省略}

首先传入的第一个参数,勿用多说,即是配置哪一组GPIO口。
详细说说第二个参数,其主要形式表现为:

typedef struct{  uint16_t GPIO_Pin;             
  GPIOSpeed_TypeDef GPIO_Speed;
  GPIOMode_TypeDef GPIO_Mode;  
}GPIO_InitTypeDef;

"GPIO_Pin"很好理解,配置该组IO口的具体哪一个GPIO,该值可用或的形式,例如:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;

该配置代表配置该GPIO口的pin0/1/2/3脚。
"GPIO_Speed"前文已述。
"GPIO_Mode"则是代表该GPIO口工作在哪种工作模式下,配置的值如下:

/** 
  * @brief  Configuration Mode enumeration  
  */typedef enum{ GPIO_Mode_AIN = 0x0,             // 模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,    // 输入浮空
  GPIO_Mode_IPD = 0x28,            // 输入下拉
  GPIO_Mode_IPU = 0x48,            // 输入上拉
  GPIO_Mode_Out_OD = 0x14,         // 开漏输出
  GPIO_Mode_Out_PP = 0x10,         // 推挽输出
  GPIO_Mode_AF_OD = 0x1C,          // 第二功能开漏输出
  GPIO_Mode_AF_PP = 0x18           // 第二功能推挽输出}GPIOMode_TypeDef;

首先说说数字输入,其有三种状态:输入浮空/输入下拉/输入上拉,IO口配置为输入时,port口工作原理图如下:

如上图所示,当GPIO口配置为数字输入时,输出功能被禁能了。

  • “输入上拉”:GPIO口透过内部的上拉电阻连接到VDD,此时,GPIO口的状态为高电平,当GPIO口连接到button时,button另一端接地。button闭合时,GPIO口被拉至低电平,CPU即可判别button按下。在实际使用的情况来看,内部弱上拉,信号总是没有外部上拉来的稳定,特别在上电即需要检测IO状态的情况,并且基本上内部弱上拉只适合检测button这种不严格的电平状况,所以如果有条件外接上拉电阻的话,还是不要配置为弱上拉。

  • “输入下拉”:很好解释了,GPIO口透过下拉电阻直接接地,此时GPIO口状态为低电平,若用来检测button,button的另一端不再接地,而是接到VCC,此处得十分注意灌电流,以免烧坏MCU。

  • “输入浮空”:则是即不配置为输入上拉,也不配置为输入下拉。即IO口处于电平不稳定状态,若是GPIO口闲置未使用,推荐将其配置为输入上拉或者输入下拉,以免干扰正常程序的进行。输入浮空状态通常配合外接上拉或者外接下拉使用。

接着说数字输出,其也有两种状态:开漏输出/推挽输出,IO口配置为输出时,port口工作原理图如下:

  • “开漏输出”:P-MOS管是被禁止的,当向OUTPut寄存器写入“0”的时候,N-MOS管直接导通,将IO口接地,当写入“1”的时候,IO口处于高阻态状态。这种情况一般用于外部自带驱动的情况。

  • “推挽输出”:当向OUTPut寄存器写入“0”时,N-MOS管直接导通,将IO口接地,当写入“1”时,P-MOS管,导通,GPIO口直接接入VDD,此时向外输出高电平,但驱动能力一般都很弱,还得考虑灌电流的大小,若是需要驱动大功率器件,外部一般还会增加外放驱动电路。

第二功能输出状态:什么是第二功能,即有些IO口存在复用的情况,复用的功能即被称作第二功能,输出配置如上所示,当IO口被配置为输出时,其输入被默认配置为输入浮空状态,以I2C为例,I2C从机,不仅仅要检测SDA的状态收取数据,还要可以输出状态发送数据,所以第二功能基本上配置为输出,使其即可输入检测,也可输出,输出方式如何配置视具体情况而言,勿用多言。

最后,模拟输入,其port口工作原理图如下:

被配置为模拟输入后,输入检测的施密特触发器和输出部分全部关闭了。输入的值直接接入对应的模拟检测外设,譬如ADC。

说了这么多,接下来以配置TIM2输出PWM的GPIO口配置为例:
TIM2_CH1在“PA0”口,首先使能GPIO A的时钟,

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );

接着配置IO为复用推挽输出,输出速率选择10MHZ,

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;        // PA0:A口的第0个引脚GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   // 复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; // 翻转频率10MHzGPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO如此配置,然后配置定时器(不再详述),最后在PA0即可输出PWM波形了。

至此,记录完毕。

参考链接

Electrical ENGINEERING 论坛的一篇文章 "STM32 Understanding GPIO Settings"。


关键字:STM32f10xxx  GPIO口  配置 引用地址:STM32f10xxx 之 GPIO口配置

上一篇:STM32f103 定时器之编码器接口模式
下一篇:STM32F10xxx 之 System tick Timer(SYSTICK Timer)

推荐阅读最新更新时间:2024-03-16 15:35

STM32的IO如何配置
1.0 STM32的输入输出管脚有下面8种可能的配置:(4输入+2输出+2复用输出) 1)浮空输入_IN_FLOATING 2)带上拉输入_IPU 3)带下拉输入_IPD 4)模拟输入_AIN 5)开漏输出_OUT_OD 6)推挽输出_OUT_PP 7)复用功能的推挽输出_AF_PP 8)复用功能的开漏输出_AF_OD 1.1I/O口的输出模式下,有3种输出速度可选(2M,10M,50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。 1.1.1对于串口,假如最大波特率只需115.2K,那么用2M的
[单片机]
汽车4大新配置 你造吗?
 如今各行各业的产品都在不断的更新之中,而汽车也有短期一改款,长期一换代的情况。但最近,消费者的关心重点似乎不在车的使用性能上,更多的则是在汽车里的配置变化。今天,我们就一起看一下2016年汽车在配置上都有哪些新变化。 奔驰几何多光束大灯     “几何多光束”大灯是在2016年刚上市的奔驰E级身上;2016年上市的新一代奔驰E级除了对轴距进行加长外,还有不少新科技的配置,而这个“几何多光束”大灯便是其中值得一提的新科技。 按照奔驰的说法,这个“几何多光束”大灯的配置是有84颗可独立调节的LED组成,在驾驶时时,测量会以每秒100次的频率扫描前方的路况。如果前方有车辆出现时,LED大灯会部分关闭工作,以免影响其他车辆的行车安全。
[嵌入式]
小米高管科普Redmi K30 Pro硬件配置情况
昨天卢伟冰正式爆料了Redmi K30 Pro的发布时间,就在本月24日,此外,他还放出了该机的硬件配置情况:骁龙865+LPDDR5+UFS 3.1+液冷VC立体散热。 考虑到普通消费者看不懂Redmi K30 Pro的硬件配置情况,于是小米中国区市场部总经理姚亮用通俗易懂的语言进行了科普,具体如下: 「骁龙865」:这块说的就是CPU(处理器,严格讲叫SoC,这里做简化)。相当于手机的mt引擎,一方面它决定手机的速度流畅度,一方面很多新的体验依靠它实现。高通,相当于手机界的英特尔,骁龙是它的移动处理器系列,865就是型号。“8系处理器”,就是它的最高系列。865,就是目前全球最快最先进的移动处理器之一。 「LPDDR5」:
[手机便携]
STM32F4 开发笔记1: 时钟配置
    本文讲解STMF407时钟的使用及其配置方法。          1、STM32F407的分类         a、LSI是低速内部时钟,RC震荡器,频率为32KHz左右。供独立看门狗和自动唤醒单元使用。         b、LSE是低速外部时钟,接频率为32.768KHz的石英晶体。这个主要是RTC的时钟源。         c、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz-26MHz。         d、HSI是高速内部时钟,RC振荡器,频率为16MHz。可以直接作为系统时钟或者用作PLL输入。         e、PLL为锁相环倍频输出,STM32F4有两个PLL:     主P
[嵌入式]
STM32的几种输入模式以及外部中断的配置
  要求:将连接按键的IO口配置为上拉输入,按键一端接IO口,一端接地,即当按键按下后,该IO口会产生一个下降沿,触发下降沿中断。   问题:将相应的IO口配置好后,测了引脚的的电压,并不是3.3V左右,而是0.1V左右。于是猜想:   1. 外围电路对IO口产生了影响。   2. STM32内部上拉能力较弱,一次只能上拉一个IO口。   于是开始从这两个想法着手解决。首先第一个,很容易就排除了。将外围电路撤掉,我用的是杜邦线,直接拔掉测量引脚上的电压,依然是0.1V左右,于是第1个猜想排除。   第二个,查看万能的参考手册,发现每一个IO口都是有独立的驱动电路,这样第2个也排除了。   最后各种纠结,然后发现:在主函数的开头部分
[单片机]
stm8s gpio端口配置
  简介   STM8的通用输入/输出口用于芯片和外部进行数据传输。一个IO端口可以包括多达8个引脚,每个引脚可以被独立编程作为数字输入或者数字输出口。另外部分口还可能会有如模拟输入,外部中断,片上外设的输入/输出等复用功能。但是在同一时刻仅有一个复用功能可以映射到引脚上。   复用功能的映射是通过选项字节控制的。请参考数据手册关于选项字节的描述。每个端口都分配有一个输出数据寄存器,一个输入引脚寄存器,一个数据方向寄存器,一个选择寄存器,和一个配置寄存器。一个I/O口工作在输入还是输出是取决于该口的数据方向寄存器的状态。  STM8S的GPIO主要功能   ● 端口的各个位可以被单独配置   ● 可选择的输入模式:浮动输
[单片机]
stm8s <font color='red'>gpio</font>端口<font color='red'>配置</font>
三星将提前发布Galaxy S5 搭载惊人硬件配置
    最新一波有关三星旗舰Galaxy S4的升级版,Galaxy S5的传闻包括了无比强大的硬件配置,柔性材料的使用,此外三星最为疯狂的举动:在上代旗舰Galaxy S4发布后仅10个月后便将发布其继任者. 据韩国本土的业界消息显示,三星或将于1月份便将开始大规模生产Galaxy S5,它将搭载最新的安卓4.4 KitKat操作系统.与此同时,三星还将在3月份之前更新其Galaxy Gear产品线,推出Galaxy Gear 2.若三星将按该计划更新Galaxy S产品线,这意味着Galaxy S4的产品周期仅为10个月,第一批入手Galaxy S4的用户将在入手一周年的2个月前就将发觉自己的手机又落伍了. 有报道表示它将拥
[手机便携]
用PowerPC860实现FPGA配置
    摘要: 介绍如何用PowerPC860(MPC860)进行FPGA(Xilinx的Virtex-II系列)的配置;给出进行FPGA配置所需的详细时序图和原理图。本配置基本原理对其它FPGA的配置也适用。     关键词: PowerPC860 FPGA Xilinx 1 概述 MPC860是基于PowerPC结构的通信控制器。它不仅是集成的微处理器,而且将很多外设的功能也集成在一起。MPC860具有存储控制器,其存储控制器的功能很强,可以支持各种存储器,包括各种新型的DRAM和Flash,并可以实现与存储器的无缝接口;而且使用嵌入式操作系统VxWorks和开发环境Tornado开发非常方便。
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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