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

【经验分享】stm32f0_GPIO

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:00
GPIO口7 s# q6 i; ]3 s2 z) {
/ F: j! U+ U; t  x& N0 m
介绍:6 f' \, j# i  G6 I5 _

6 x# S- }* w6 i# I4 个 32 位 配 置 寄 存 器. N1 E% R# \* N
3 W  C6 Z- K; {- _$ d2 ?2 D7 M: H
GPIOx_MODER:模式配置寄存器
$ ?2 r& J5 {) z+ V5 ]4 B- ]! l+ k# m( B6 m* [: \* V- V8 {
GPIOx_OTYPER:输出模式配置寄存器: H9 a. `6 u, k0 A3 i) e( q/ M- U

9 N/ k4 \7 u) K$ D0 q6 yGPIOx_OSPEEDR:输出速度寄存器5 A+ W/ n+ j* i9 |* L

$ g' B. @7 ^. ^4 DGPIOx_PUPDR:上拉下拉选择8 ]8 q( U6 _8 q

' I  s! A- ?$ E: v4 [# `2 个 32 位数据寄存器
- ~6 w" F' V/ s  O: w
9 W4 C' Y: P( w% t7 d" xGPIOx_IDR:输入寄存器6 ^" v# v& G! I. P4 ?7 r

5 Y  z9 ~- C# g5 g: v; }  }GPIOx_ODR:输出寄存器
7 e6 P* O' f% G* r. w/ z5 v, P' S. B2 o3 X7 H4 y" {" F
1 个32 位置位 / 复位寄存器9 t2 y" ^% g% v! k& I' z; F

9 ~9 o' n/ G* T4 C% vGPIOx_BSRR
8 T; n. K$ }# n1 z
4 R" N. S5 G3 hA和B还含有1个32位锁定寄存器: f6 v/ r( \- D8 _0 Z9 ]

4 P4 T( D: o- Z' S& b; D5 }2 VGPIOx_LCKR
7 z9 ~: y+ b0 y2 C( {! b
4 {5 S! x! m: E- G) BA和B还含有2个32位替代功能寄存器& W, C8 k+ A+ ?+ r8 H; x/ S

! N) F& i4 \5 B1 J" ]7 [: a$ w5 l" gGPIOx_AFRH :复用功能寄存器: J( |. G8 q2 I( `1 V
# ~7 e- Q0 {$ s
GPIOx_AFRL :复用功能寄存器8 j! W0 G% r6 h: M" W" N

  K1 N' C, M; S4 aGPIO口可以配置成如下模式:. e7 B$ G6 A( I+ D

8 E7 s: @3 {9 ^  V) V' B6 J# j* f● 浮空输入$ _& Z6 E3 Q5 K; G7 y4 o; G

( M0 j3 ~1 W; b! f) T● 上拉输入
' i4 d! A  B# r# a
: B, U4 \% ^9 \' L% I● 下拉输入
9 d- }) o+ N( S! ]1 G% p# o9 J, N6 d% |; @
● 模拟输入4 N6 R' ^& }6 ~# y, F
5 G, ^, B( Z4 ], T9 F+ |) T, g
● 具有上拉或下拉能力的开漏输出" F0 h7 l  H9 N7 Z- B& E6 M6 k  a1 l

: z# ]( l% \$ d, j8 b9 t+ @● 具有上拉或下拉能力的推挽输出
; A7 O+ G' c9 @5 u% s- a; n0 \' ?) T( I7 R9 W
● 复用功能且具有上拉或下拉能力的推挽输出
: g2 A+ Q3 Y, I" E
1 o& t* `/ `( R( O' S● 复用功能且具有上拉或下拉能力的开漏输出8 x! o5 I( `/ k! q

; C& s; ?9 ~! L+ @  `0 O+ c7 l1 ^$ _注意事项:$ f" n& Z( d6 ^$ v. |) f9 ]
2 T' S3 ]  q; h7 F) q! [
1:所有端口都有外部中断能力。 为了用做外部中断口线, 端口线必须配置为输入模式
: y7 j8 l/ `0 X( _+ N& Y
, w$ v, G& [9 i. H+ h# p% |/ _2:对于 GPIOx_ODR 中的每位, 在GPIOx_BSRR 中有两位与之对应: BS(i) 和 BR(i)。 当对位! B* q/ u; B, \& c, p9 `

+ L+ `$ J2 U' ABS(i) 写1时则设置相应的 ODR(i) 位。 当对 BR(i) 写1时, 则复位相应的 ODR(i) 位。2 V1 h4 g  y) `/ X9 m& e; r& h2 N

5 g( R$ I+ E+ U6 M% y: `+ |3 U2 a3:为了写 GPIOx_LCKR 寄存器, 须发出一个特定的写 / 读序列。 当正确的锁定序列作用于这个' I' F7 R* k/ v; j( ?' E/ r. [
- d2 U* Q+ x; `6 h- @5 @7 X6 R; W! E" B
寄存器的位 16 时, LCKR[15:0] 的值用来锁定 I/O 口的配置
$ o7 X% N6 z- m" N7 Q* a4 |/ E% T( o& s/ x1 M" p- a
配置过程:
: u! e# R/ n% h! ]" s. I
2 o  l4 G4 j$ W) M/ I8 ^' ?- i
  1. void GPIOConfigure( void ); [+ F# k, t5 J3 c  S8 h, E7 h7 H/ M

  2. 3 u4 v0 y5 j- T# u0 f
  3. {) B; J6 B' n6 Z! L) {7 b
  4. GPIO_InitTypeDef gpio_init_structure;4 ^4 f" ?' s  B5 T& V

  5. 4 I- O9 n( a+ E7 h+ Z' a& f2 w
  6. gpio_init_structure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
    3 V3 g: Z1 p- U$ E

  7. 8 {+ ~" |- V' f2 c4 t) e
  8. gpio_init_structure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度
    / Y( ], Z( i' |6 |' Y7 Q9 K  ]. [
  9. 8 x# ?9 _  _! [( I
  10. gpio_init_structure.GPIO_Pin = GPIO_Pin_0; //引脚0 [- s, q: J7 N: k7 F# _

  11. 5 W& S  z, \  _
  12. gpio_init_structure.GPIO_PuPd = GPIO_PuPd_UP; //上拉模式输出: l/ W8 ?; `: a* l4 \

  13. , v. n, n! R1 d$ v
  14. gpio_init_structure.GPIO_OType = GPIO_OType_PP; //推挽模式输出/ o* q! @1 F2 m, T" F

  15. + E1 U" Y2 A* J) i, M
  16. - Q3 r. ^+ x" f# ~' M

  17. % M5 K/ f+ B( n3 b+ A- |, s* H
  18. GPIO_Init(GPIOA,&gpio_init_structure);: b" _7 P5 Y; w7 o* `0 |

  19. / ^$ j+ N* F9 P8 f/ |8 @$ x! F  L
  20. }
复制代码
  1. #define GPIOA_SET_BIT0 GPIO_SetBits(GPIOA,GPIO_Pin_0)//置位5 g/ o1 L. t( G9 A; \% ~- G
  2. + ^2 \% s; d1 M$ q) J" Q
  3. #define GPIOA_RSET_BIT0 GPIO_ResetBits(GPIOA ,GPIO_Pin_0)//复位
    6 Q& T( p* f' w% P6 e5 |& P

  4. 1 q. y) ^3 y& v9 u0 H
  5. #define GPIOA_RDIN_ALL GPIO_ReadInputData(GPIOA)/ m" t$ `9 ~$ }) }  U" ]
  6. ) k; A0 {7 j7 Q3 @' l$ I/ c
  7. #define GPIOA_RDIN_BIT0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
    " W+ d5 m( _' t3 _  r

  8. ( `7 B6 m4 Y) K
  9. #define GPIOA_RDOUT_ALL GPIO_ReadOutputData(GPIOA)0 R0 u! ^7 Y! G- y# v% y6 o+ R3 o

  10. + d! F8 z% w8 i
  11. #define GPIOA_RDOUT_BIT0 GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0)
    & f+ Z, W: M% E6 W
复制代码
! M" s( z8 b5 j  e
上面是相应的读取和写入函数,看函数名就可以理解此函数的功能
  n4 Y3 ]0 V! W* ?- |. X8 C4 Q$ R) f4 K! C+ i7 E( Z9 ~# j# t6 P0 v: f

' z: w+ a  f* ?
( {2 c: e8 ]0 f- V6 j, ]  w3 g4 s6 p+ W6 y, B: ?; ]. `
收藏 评论0 发布时间:2021-11-24 15:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版