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

【经验分享】stm32f0_GPIO

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:00
GPIO口
( o1 U5 S' `5 Z" F% p3 G' \+ \& z5 b" o/ U- F5 Y  a2 v% u: {) J
介绍:$ Y  T' K- }5 b- N  y, r

" @8 N6 k% ~3 R$ u4 个 32 位 配 置 寄 存 器
1 r4 G6 s. R* \4 c& g9 K1 p  W" P) ^% Y
GPIOx_MODER:模式配置寄存器" j5 T$ c( ]9 \& D/ e  Y
+ i# a4 ^0 c  G* D; t) x
GPIOx_OTYPER:输出模式配置寄存器
' x& R$ Y) |4 L. w" K7 [( C" D3 C! B( W9 T4 G# L/ {
GPIOx_OSPEEDR:输出速度寄存器6 D3 D) G5 l: _$ \

0 t& O# s7 D# mGPIOx_PUPDR:上拉下拉选择, e8 b- S+ S% e. w% D  W
* c0 k9 J4 Y& ]$ E2 {# U7 `# o
2 个 32 位数据寄存器4 B7 I2 v, R+ {2 Y9 Y9 b

! p+ E/ }; J( ~GPIOx_IDR:输入寄存器6 M) ^# K, Y( Z& `- ~! c2 ^/ i4 G

! f- @4 k4 T; R- u* ]5 X  eGPIOx_ODR:输出寄存器$ K' k' A* |& e9 {2 o% Q  C

4 T- q9 Y5 g' e3 s! y1 个32 位置位 / 复位寄存器
' M/ q6 l0 O8 ^8 V/ T2 R7 X
' g5 J' ?9 c# y* b9 e  pGPIOx_BSRR
- u. T) n9 N9 y8 r* T* o( N& [3 x0 e' Q; Y
A和B还含有1个32位锁定寄存器3 a. r+ U* {2 [" m
5 `. W  S" V0 F  N: h) F( c- N+ B
GPIOx_LCKR
2 ?7 u: D" V; \5 C. H4 K5 @
! \* G! h: d( b2 p  l  g( WA和B还含有2个32位替代功能寄存器. w8 V% Z: l: B2 s

2 a. x: H" [; h: b' {5 mGPIOx_AFRH :复用功能寄存器  a& M  p/ N6 ]

$ I- J# ~7 M; @, e# z, N  sGPIOx_AFRL :复用功能寄存器( v5 x5 l9 q( t
% ]9 i, D  R0 q7 C5 P" P7 |7 y
GPIO口可以配置成如下模式:! J% p2 n6 |: u+ Q6 }
0 ]2 E; ~( y9 d! h
● 浮空输入
2 o$ a3 p8 L* k9 L% B8 L0 q4 N# D
● 上拉输入
; h2 F+ v- Z4 m+ u" H1 i  V- R8 V1 C7 O* q
● 下拉输入' L: d; k' `( ]& N$ _$ h
9 q- y$ c# p; G+ `
● 模拟输入
+ b* D4 x; Z8 i; U
! s: o: R5 v$ H7 e2 A● 具有上拉或下拉能力的开漏输出
- C- Y- |1 U* n" f( X0 J4 L& p$ ]
$ R+ A0 u+ w' S$ L& l5 Q+ M● 具有上拉或下拉能力的推挽输出
, q4 W" o% v5 t0 q* f8 I/ l8 V; g
● 复用功能且具有上拉或下拉能力的推挽输出7 d; M4 F9 A/ f$ m

% s+ _# U  R9 E& B● 复用功能且具有上拉或下拉能力的开漏输出6 C2 @- J. K6 h' ^

8 i! h2 T* S/ U5 k) t" A7 t9 f$ ~注意事项:% g/ ]2 r- ^  ~# k3 W6 f  U- l
  D! ^, r) q% n. R: X
1:所有端口都有外部中断能力。 为了用做外部中断口线, 端口线必须配置为输入模式5 r, c2 E2 k8 k6 R, R7 N& G+ f
  c/ i& G  C1 t( O
2:对于 GPIOx_ODR 中的每位, 在GPIOx_BSRR 中有两位与之对应: BS(i) 和 BR(i)。 当对位+ W0 S9 z. S4 D! {2 ^) W( X' T

2 S  }1 z- X$ ~+ A, I/ K8 FBS(i) 写1时则设置相应的 ODR(i) 位。 当对 BR(i) 写1时, 则复位相应的 ODR(i) 位。
3 r6 G+ F1 A: @$ r
& Y; g; S: p3 Q3:为了写 GPIOx_LCKR 寄存器, 须发出一个特定的写 / 读序列。 当正确的锁定序列作用于这个
, c) U) z3 Y6 K1 p5 C' A# {+ a
" n2 G% B! Q* }! t3 h1 |! @! u寄存器的位 16 时, LCKR[15:0] 的值用来锁定 I/O 口的配置. W) o$ }* k, s& s5 w

7 p, c! `. f9 n. g' t' |配置过程:- j1 y) `. k/ X8 u4 n7 Z* q3 w

& \0 O; K: ]  Z* X/ q6 [
  1. void GPIOConfigure( void )
    * _7 V+ F0 q% L$ i
  2. 6 H- ~6 D. k+ K0 _6 y0 v% y" v
  3. {
    , i0 `0 Y. \+ J. G$ Z
  4. GPIO_InitTypeDef gpio_init_structure;
    * K4 u0 K3 c8 B5 F. A9 ?' Y
  5. % D3 ^# W$ w4 j
  6. gpio_init_structure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
    2 z2 m$ r% o) `3 j6 y
  7. $ u/ g7 z+ l: }# o1 g% t9 Y
  8. gpio_init_structure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度
    9 e( F7 j5 B/ |( Q1 G$ g" _
  9. & K% f9 N8 \% K, N9 l& R  y
  10. gpio_init_structure.GPIO_Pin = GPIO_Pin_0; //引脚
    - L% W' y( V) H" X% a, G9 A( [
  11. ; r; F& {% T3 n& E" H0 I4 h. k
  12. gpio_init_structure.GPIO_PuPd = GPIO_PuPd_UP; //上拉模式输出
    # u% t+ T7 V# U; k/ B/ V

  13. 7 M0 O1 ~- z* V  b6 Q! g
  14. gpio_init_structure.GPIO_OType = GPIO_OType_PP; //推挽模式输出" ?( m! j- x9 h$ G, a
  15. & x* O( L3 m' M: N& M1 e6 u  q

  16. $ |5 r' {- w8 ~6 B* L* Z# }: Y
  17. ; |3 g$ A1 N+ w' A6 K: P$ P
  18. GPIO_Init(GPIOA,&gpio_init_structure);
    % Y( L) a7 ]! h, u6 u0 f
  19. ! X2 H. z6 u' m7 K
  20. }
复制代码
  1. #define GPIOA_SET_BIT0 GPIO_SetBits(GPIOA,GPIO_Pin_0)//置位
    # c1 u6 P' I. @; z4 J5 R
  2. 2 @% x, j# M% \) N; Y* z
  3. #define GPIOA_RSET_BIT0 GPIO_ResetBits(GPIOA ,GPIO_Pin_0)//复位
    . v$ M/ B6 H" C4 T/ _' u. G
  4. 2 d2 m2 l& G0 e8 X; j, q
  5. #define GPIOA_RDIN_ALL GPIO_ReadInputData(GPIOA)
    ( M& A2 n3 b4 i" U  h; M7 b0 e
  6. 8 R% \3 E3 v0 I8 B; ]8 P9 X
  7. #define GPIOA_RDIN_BIT0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)5 B' X7 {- W: ?" }( |# g

  8. 1 x' b8 [7 @4 J' B
  9. #define GPIOA_RDOUT_ALL GPIO_ReadOutputData(GPIOA)
    ' H4 \4 K$ X: X" u$ T
  10. 4 _7 M, i6 a* k* e4 |+ l
  11. #define GPIOA_RDOUT_BIT0 GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)
    & o4 w1 ^5 B0 D1 g& s7 _
复制代码

# Y9 |, d2 Z/ v8 c2 x8 e上面是相应的读取和写入函数,看函数名就可以理解此函数的功能
, q8 H" Y) u' O- [0 |
7 o5 [$ Q) f- `8 l) |3 f4 T' x  Q2 h4 q$ V0 o

, Y: f6 Z7 ~3 i/ o% l
7 g. e% k, s, E0 `: j1 I$ @- B" B
赞 收藏 评论0 发布时间:2021-11-24 15:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版