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

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

[复制链接]
ataudio 发布时间:2015-1-31 21:11
本帖最后由 ataudio 于 2015-1-31 21:14 编辑 7 U( s# Z2 x+ c5 B

9 D2 B5 y$ I2 ~" L$ g/ ^9 B- d2 {   本人使用STM32是半路出家,并没有经历过F1xx系列,因此依靠网络结合手册来学习。
/ }! X; r. O$ r/ |; g0 p7 Y/ F, }9 X0 ~- R! H
    由于F1具有广泛的群众基础,网络上搜寻的配置和应用,几乎都是F103等F1的配置,但是F4却引入了大量不一样的设置值,对我造成了非常大的困扰。经过和很多STM32的开发者交流,也没有得到F4的GPIO配置的完善信息。令人苦恼。
6 l- k8 _; n0 x' M; r) g; q) T/ ]. u3 K+ U2 K% i" T
    下面,我在低功耗配置时,深入GPIO的理解,也彻底理清了GPIO配置中F4和F1的差异。
6 O& }: [3 q. _9 j: l* I
* x2 Z8 u3 f4 c) i- a7 b! Z0 A+ t6 |    手册RM0090与RM0008对GPIO的描述,几乎完全一样,但是,实际情况怎样呢?我们打开库的头文件stm32f4xx_gpio.h和stm32f1xx_gpio.h,就会发现差异巨大。
0 r. O* R' b( C4 T8 H9 W! s& ^除非特别说明,否则本部分适用于整个 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 F' Q' q/ U% @; E4 o" \  n  T- H2 u1 G
实际上,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;
* N8 @1 L: z, x' k4 e
四种配置怎么可能和8中配置一样??手册还是代码出现错误了吗?

1 S1 A; ]- z5 ~9 |, o
还是查看 手册,关于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中。
9 @3 [8 h$ n- j/ D) }- f! q

) S5 ~0 N$ ^( h+ n' o8 I
' ]; Y# D% v' R! z9 c9 @! c
         未尽部分,请参看附件。附件是经过多次才完成的笔记,衔接比较生硬,请包涵。

6 z) ~4 B; ?1 o. q
        低功耗测试单芯片的F4(带接地处理),实测STOP模式功耗410uA,在手册上的380~500+之间。可认为测试有效。

, ~) r# J8 D* G; P- c

6 M/ Y" w) h7 ]8 e" k' L

3 j5 l8 {  x) `! b

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

下载

233.1 KB, 下载次数: 307

低功耗应用~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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版