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

如何区别stm32F1和F4对GPIO的操作

[复制链接]
攻城狮Melo 发布时间:2023-3-14 16:48
以下是stm32f4xx.h中对GPIO的定义。+ z, H# b" i' y' n/ y: r* Q5 U. ?6 }
  1. typedef struct
    * L0 F$ d& H6 C' B3 j9 {
  2. {5 K- P; N, K4 m' c$ J
  3.   __IO uint32_t MODER;    /*!< GPIO port mode register,               Address offset: 0x00      */
    $ t& S) `/ v9 {+ w, O: B
  4.   __IO uint32_t OTYPER;   /*!< GPIO port output type register,        Address offset: 0x04      */
    # b, C" X6 s$ m! w4 w
  5.   __IO uint32_t OSPEEDR;  /*!< GPIO port output speed register,       Address offset: 0x08      */' O6 R2 W2 D. b
  6.   __IO uint32_t PUPDR;    /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */2 ^1 K* I' c* Y8 Y- X& y0 i. e
  7.   __IO uint32_t IDR;      /*!< GPIO port input data register,         Address offset: 0x10      */$ M5 ~( c5 g8 @
  8.   __IO uint32_t ODR;      /*!< GPIO port output data register,        Address offset: 0x14      */, r5 E# v4 T/ r2 |
  9.   __IO uint16_t BSRRL;    /*!< GPIO port bit set/reset low register,  Address offset: 0x18      */- E/ K' q2 V6 C% O' s* X. a
  10.   __IO uint16_t BSRRH;    /*!< GPIO port bit set/reset high register, Address offset: 0x1A      */! f' w- }6 f# y/ s/ a& |( G! K$ h7 C
  11.   __IO uint32_t LCKR;     /*!< GPIO port configuration lock register, Address offset: 0x1C      */9 ]9 Q$ B  F/ k6 |% H7 z* `! G
  12.   __IO uint32_t AFR[2];   /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
    . o' L6 D. C6 a) `0 \% T
  13. } GPIO_TypeDef;! W9 U- w' l) j; E# f5 I( p
复制代码

0 M" [4 D& P5 Q- d1 r' N6 i+ E& m以下是stm32f10x.h中对GPIO的定义。
' E9 Q  b: v" E" J
  1. typedef struct! T- [* h2 U) `& O
  2. {
    # @6 S! U% o  ?- K
  3.   __IO uint32_t CRL;& C) N) _: _3 S& X
  4.   __IO uint32_t CRH;
    * j3 Y- `9 r7 [7 t" J
  5.   __IO uint32_t IDR;. d6 `& i6 ~: C$ |
  6.   __IO uint32_t ODR;
    % `& v4 _  c; g3 c; ~; y' [) M
  7.   __IO uint32_t BSRR;& r& }* [1 H- E. d+ ?, o
  8.   __IO uint32_t BRR;) z4 z; W  d0 y
  9.   __IO uint32_t LCKR;3 x+ M5 \* m+ f5 q  V
  10. } GPIO_TypeDef;
    " _1 S, V. E( A! z4 e& M
复制代码
/ [% G  r; z! i9 i
F1的CRL、CRH用于配置输入输出、推完开漏模式、速度、上下拉输入、复用输出,和F4的MODER、OTYPER、OSPEEDR、PUPDR、AFR[2]等效。
6 g7 B. g3 d. S: H. Q; P9 X% j$ {( z/ j" S- K  Q/ t
IDR和ODR都是一样的,输入输出寄存器。, q# e3 i1 g  l" t) B9 N$ J4 H) S1 V

2 b: U9 _4 }. |! k- w0 D+ }F1的BSRR的低16位是置位,F4的BSRRL是置位。(F1的BSRR高16位和BRR等效,都是复位)
8 ^# H6 o% `. `. y5 V

  e9 y' ]6 j4 A2 d" RF1的BRR是复位,F4的BSRRH是复位。8 [5 s! w- Q% t- ?
5 w8 b7 T9 J; h& T) \; f2 B1 f& L
LCKR是锁存配置,一般不用。
2 N2 W$ c; _9 z( T; d2 z
, {# @/ e) [6 Z1 v然后F1的AFIO是独立的,不在GPIO的结构体里。  }# a9 `' S+ Q2 |' Q+ O5 {/ Z

* J8 B. n0 u1 T8 ~" X下面举个F4设置IO电平的例子:
4 _& a1 ?5 I7 L. y
  1. #define CONVST_1()        GPIOC->BSRRL = GPIO_Pin_6
    / ^% ]( N4 _, [! Q# Z% U* S9 c
  2. #define CONVST_0()        GPIOC->BSRRH = GPIO_Pin_68 Y' t6 K9 c/ h. w) f$ ]( I/ y
复制代码

' `( Q" _) R/ M2 @" wF1设置IO电平的例子:
. b7 }, M+ G" A- g
  1. #define CONVST_1()        GPIOC->BSRR = GPIO_Pin_6
    ) s) w) c1 d3 n" b, y/ }7 L
  2. #define CONVST_0()        GPIOC->BRR = GPIO_Pin_69 _2 |0 V: Q  Q! T. x$ R
复制代码
1 d6 w% l$ g% Y! Z! f  Y+ v
操作之前记得初始化!
: J5 v4 d7 y' c9 M————————————————# [- l: K5 p& G4 a  w
版权声明:小盼你最萌哒" z% v. h7 ]4 a0 s# ]" f
如有侵权请联系删除" y$ n% d% ~$ g3 _2 u
收藏 评论0 发布时间:2023-3-14 16:48

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版