你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

低功耗应用~STM32F4低功耗的GPIO配置释义

[复制链接]
ataudio 发布时间:2015-1-31 21:11
本帖最后由 ataudio 于 2015-1-31 21:14 编辑 - O# i; N  k7 L' M' p5 d

* U6 q$ D0 R9 u+ `   本人使用STM32是半路出家,并没有经历过F1xx系列,因此依靠网络结合手册来学习。
) u$ \/ C, g) j. r4 |* z  f( Z0 _) X9 |' ]3 p: E
    由于F1具有广泛的群众基础,网络上搜寻的配置和应用,几乎都是F103等F1的配置,但是F4却引入了大量不一样的设置值,对我造成了非常大的困扰。经过和很多STM32的开发者交流,也没有得到F4的GPIO配置的完善信息。令人苦恼。3 _  C7 M- q* B* [% E9 {
4 d! V, w. ], [
    下面,我在低功耗配置时,深入GPIO的理解,也彻底理清了GPIO配置中F4和F1的差异。
0 ^0 J/ B; c$ }( T
" p: D' \  R, k0 X    手册RM0090与RM0008对GPIO的描述,几乎完全一样,但是,实际情况怎样呢?我们打开库的头文件stm32f4xx_gpio.h和stm32f1xx_gpio.h,就会发现差异巨大。
  g. f/ k. i9 c2 \) _) e0 B除非特别说明,否则本部分适用于整个 STM32F4xx 系列。GPIO 主要特性
● 受控I/O 多达 16 个
● 输出状态:推挽或开漏 + 上拉/下拉
● 从输出数据寄存器 (GPIOx_ODR) 或外设(复用功能输出)输出数据
● 可为每个 I/O 选择不同的速度
● 输入状态:浮空、上拉/下拉、模拟
● 将数据输入到输入数据寄存器 (GPIOx_IDR) 或外设(复用功能输入)
● 置位和复位寄存器 (GPIOx_BSRR),对 GPIOx_ODR 具有按位写权限
● 锁定机制 (GPIOx_LCKR),可冻结 I/O 配置
● 模拟功能 ● 复用功能输入/输出选择寄存器(一个 I/O 最多可具有 16 个复用功能)
● 快速翻转,每次翻转最快只需要两个时钟周期
● 引脚复用非常灵活,允许将 I/O 引脚用作 GPIO 或多种外设功能中的一种
GPIO 功能描述
根据数据手册中列出的每个 I/O 端口的特性,可通过软件将通用 I/O (GPIO) 端口的各个端口位分别配置为多种模式:
每个 I/O 端口位均可自由编程,但 I/O 端口寄存器必须按 32 位字、半字或字节进行访问。 GPIOx_BSRR 寄存器旨在实现对 GPIO ODR 寄存器进行原子读取/修改访问。这样便可确保 在读取和修改访问之间发生中断请求也不会有问题。
● 输入浮空
● 输入上拉
● 输入下拉
● 模拟功能
● 具有上拉或下拉功能的开漏输出
● 具有上拉或下拉功能的推挽输出
● 具有上拉或下拉功能的复用功能推挽
● 具有上拉或下拉功能的复用功能开漏

9 b& k7 H$ W2 L: P: J; E) n) L1 O# [
实际上,stm32f4xx_gpio.h中定义的IO模式,是相邻设置,没保留空间:
typedef enum
{
  GPIO_Mode_IN  = 0x00, /*!< GPIO Input Mode */
  GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
  GPIO_Mode_AF  = 0x02, /*!< GPIO Alternate function Mode */
  GPIO_Mode_AN  = 0x03  /*!< GPIO Analog Mode*/
}GPIOMode_TypeDef;
stm32f10x_gpio.hGPIO模式,是间隔4设置:
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;

5 g. k# P7 i: ~; R
四种配置怎么可能和8中配置一样??手册还是代码出现错误了吗?
) \' g( _1 A4 |* Q* l0 t, Y
还是查看 手册,关于GPIO配置的寄存器说明。结合函数库的头文件,终于发现:不一致的地方,其实是因为STM32F4xx的配置寄存器的组合变复杂了。F4仍然是可配置成8种状态的,但是其配置,需要三个寄存器选择性的组合在一起。
再来看看stm32f4xx_gpio.h中定义的另外两个enum,在stm32f1xx_gpio.h中是没有的。
typedef enum
{
GPIO_PuPd_NOPULL = 0x00,
GPIO_PuPd_UP     = 0x01,
GPIO_PuPd_DOWN   = 0x02
}GPIOPuPd_TypeDef;
typedef enum
{
GPIO_OType_PP = 0x00,
GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;
而GPIOMode包含了AF(GPIO Alternate function Mode,可复用)和AN(GPIO Analog Mode),GPIOPuPd和GPIOMode中的GPIO_Mode_IN组合,配置输入的模式中的输入上拉和输入下拉,以及Floating Input(GPIOPuPd为00-GPIO_PuPd_NOPULL);
而GPIOMode包含了AF(GPIO Alternate function Mode)和AN(GPIO Analog Mode),GPIOPuPd和GPIOMode中的GPIO_Mode_OUT组合,配置输入的模式中的推挽输出和开漏输出。甚至上述三个寄存器组合,变成推挽输出上拉等。
详细的配置组合在RM0090-En的Page 267表格Table 35中。

; S$ G$ H  n/ a3 @4 T" w& t
" h9 f( E- Q! h8 R, h, d" o& X5 _
         未尽部分,请参看附件。附件是经过多次才完成的笔记,衔接比较生硬,请包涵。
) x4 @' o3 P; B# {$ \7 o. W
        低功耗测试单芯片的F4(带接地处理),实测STOP模式功耗410uA,在手册上的380~500+之间。可认为测试有效。

  ^/ w. v: O% [' k  P# l4 L5 X) q1 Z* Y
. a. t) e: e; p7 O
! a0 y6 E- R( {: H: |  t

低功耗应用~STM32F4低功耗的GPIO配置.rar

下载

233.1 KB, 下载次数: 308

低功耗应用~STM32F4低功耗的GPIO配置

收藏 1 评论4 发布时间:2015-1-31 21:11

举报

4个回答
lkl0305 回答时间:2015-1-31 23:23:56
多谢分享
北斗光寒 回答时间:2015-2-1 09:25:14
有意思  还没有详细研究F4
xiang90721 回答时间:2017-6-23 15:47:05
楼主你这说完还是没说低功耗时,IO口怎么配置呢,仅仅模拟输入?
epochal 回答时间:2017-6-23 21:04:44
谢谢分享!!!
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版