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

【经验分享】STM32Cube HAL GPIO输入/输出

[复制链接]
STMCU小助手 发布时间:2022-4-7 17:47
实验内容:按键KEY1控制RGB灯颜色变换。3 Y, Z+ O! }  ^- z
0 }" v3 p1 b, o+ Q, C* Y# H1 Y
一、原理图1 j8 ^: N( M$ ]+ u7 N1 m' z
9 l. O3 E5 ?4 {! J5 e. Y
KQ`QPO8MA{94KMEWF%N2LJX.png
, h: K; i8 e& O" }8 Z* |2 G. V
8 A7 v+ M9 w3 }3 k$ u$ a二、 CubeMX配置
5 r3 e% c7 H! Q% j  {" Y) R$ }5 D9 L' f
Step1. 打开 STM32CubeMX ,点击“ New Project ”,选择芯片型号, STM32F103VETx 。
* ~$ ~/ x$ s4 @5 k) C3 i R}F5@SY1FNIR_XKMRX~HMDI.png   E( q! s3 @$ A/ b# ~/ B& x4 s$ f

3 ?! `4 I9 S5 L, K% K
# f" J& e  i7 h$ X Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。
2 a, a0 L) m5 O( L% K
% b& m: }" N4 T9 p [6WXYGJE1NG27UWMRP1B)BB.png 2 N# O$ b! w1 R) d* ~+ f
B%P8TXD(KY`Y_N0GW283)8M.png
; h+ g  H% h6 h# y+ Z6 O( h% r: ?$ O% \* M- l
Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这两个引脚用于其他复用功能,如果用于其他复用功能,debug就不起作用了。)# _; p$ Q! j" @+ q4 B
; C/ i6 o( J3 F( T* k4 `. f
D[2[0Q%L76C2{@@NC4$SJEB.png
: I. M0 ^5 i3 D0 K. v7 c' [( H; m9 k' K
Step4.GPIO引脚配置,点击搜索框,选择相应的引脚。PB0/PB1/PB5  配置为GPIO_Output,PA0 配置为GPIO_Input。' N) r; x  `9 Z. ~$ Y8 R. U3 a
! X7 J2 F! o7 V
0MT8$NPA(K{0)YY)1J{05~T.png
( x8 K5 R8 P0 g6 @. ?4 k
6 n7 q# Y8 o5 ]1 R KEY引脚配置:方框3 第一行是GPIO模式,这里选择输入模式,第二行是选择上拉还是下拉,这里选择既不上拉也不下拉,第三行是用户标签(可以自己给该引脚命名)。0 h9 @- ?& f; j
$ _' f  a6 d- @: R6 ?
QS[I3P@%3IKKKJ{B8)%JJ)0.png
) M9 a7 C% r2 C1 K1 [- t9 H
: X- ~* c/ c1 a* a) V RGB灯引脚配置:方框中 第一行是初始化引脚电平,(我的开发板灯是低电平亮,所以初始化高电平),第二行是GPIO模式,这里选择推挽输出,第三行是选择上拉还是下拉,这里选择既不上拉也不下拉,第四行是IO口翻转速度,这里选择低速,第五行是用户标签(可以自己给该引脚命名)。
. a1 ~, B- M1 x) c7 x
5 s8 ^+ ]1 U8 H. U0 p O{D%1P[B{W}P1(GTZ~@)AGD.png
6 ?7 I: L& }4 ]/ g" s4 A7 {$ r) A+ [4 w8 G
Step5.Project工程设置,这个选项是配置工程重要的一个选项,其中配置的信息也比较重要,且容易理解。  p. Q) D4 I  s% N" D
2 Y+ _6 _6 Y, z9 k) d+ Q9 a
QW``0_T@~D%@`4VV_A80XSR.png / H; A, K3 J1 H0 B* {3 Z. }

! X) M5 ^& j# M$ U  Step6.Project代码生成配置界面。7 I# |1 I8 b) a# {

. b% u2 P1 v- D) O0 M1 Y  m# o G39UZ7_P[W)IN7N`691@~}4.png 7 O" e/ e# Z& P) a$ n7 `( M

8 l( M" U* a# x& s  Step7.Project高级配置界面。(一般情况下,采用默认配置即可)
5 c- A$ j& L1 n5 p2 {2 ?: Y5 \5 l: E. C3 q8 D
C[67]M3IR[Z}R0XI`AI7D.png
; J  s, ]4 i! \" e$ P) J! _2 g& ^3 u' j$ G
   Step8.点击“GENRATE CODE”生成代码。
0 l  D6 O% I) w% A2 j. V0 ]( g# `
+ K7 U$ N  M1 T& L9 o" h( X
8 X$ d" m# B! q/ `- a; l. W9 e( `, }4 L6 L  t
三、添加功能代码3 o5 J, p) {: b3 r( {2 F
6 K* ~8 J) Q+ y! U
按键扫描程序:
, L6 n8 k; i" d2 t. ]
% U& V0 [3 \/ ?, d' j
  1. uint8_t KEY_SCAN(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
    : k, t- Z! U8 I6 `7 g! X
  2. {- I* R5 M: f+ h; J5 R( d. o
  3.         if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1)1 Q% P* F  }' A, U5 L
  4.         {% q) r6 P/ K1 Y# n- ~/ Q
  5.                 while(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)==1);//松手检测
      `) D+ Z. H/ ?* x5 j7 }
  6.                 return 1;# R8 J; i0 m5 T. F
  7.         }& d' Z: G7 D& ]
  8.                 return 0;
    . p5 {; t5 e" ^# u- x, C2 o
  9. }
复制代码

  e; t, T1 p" P; s' c, S; C0 hRGB灯控制程序:
  1.         uint8_t cnt=0;
    6 q- p% f, f$ A9 e8 z; l
  2.         uint8_t value=0;
复制代码

: }! Z5 w5 A$ {4 e; |, \
  1. while (1)
    2 |+ ^2 S5 j: q1 p, B: ]
  2.   {6 I5 d$ ^" z2 M% f" [% P2 L0 r) k
  3.                 value=KEY_SCAN(KEY_CTRL_GPIO_Port, KEY_CTRL_Pin);
    ( H8 T" B% g, L- Z+ V
  4.                 if(value==1)! }* M1 x! U5 Q6 n0 G9 r- |
  5.                 {+ T8 g( ]+ N$ G' w- g+ h
  6.                         switch(cnt)0 a! b" W: d5 d6 D9 y7 }4 F
  7.                         {
      T) b% T/ X+ ?9 P3 V6 T
  8.                                 case 0:
    . f! o+ p& Z, K3 S( B' _9 W
  9.                                 {' A3 m" O( [% `, g% S
  10.                                     HAL_GPIO_WritePin(GPIOB, LED_R_Pin,0);
    8 `$ E+ I- {3 u* y4 a  O7 S
  11.                                     HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
    - M- T& h! ?& z8 F- X$ E% I
  12.                                     HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
    # A# d+ p% t8 b& U$ v
  13.                                     cnt++;
    ; p- j; y+ H& M0 C0 G2 X9 ]% p
  14.                                     break;4 E) z& _  ?! H3 I
  15.                                 }: F+ q$ A( v& Z6 D1 i/ U( P) e
  16.                                 case 1:* a1 \6 U& U3 {, C8 U/ M& h# l
  17.                                 {
    5 D6 a8 F% x9 _4 N/ {3 A
  18.                                         HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);
    " m2 t3 C6 ?: H& G! C0 Y
  19.                                         HAL_GPIO_WritePin(GPIOB, LED_G_Pin,0);5 q; _% q# ^! E2 ~) N7 ^5 e
  20.                                     HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);* V4 v1 I) ^* q) Z/ Z
  21.                                         cnt++;
    7 m6 S& M+ C3 k4 Y
  22.                                     break;4 y- k: V, T+ H1 Y. n( Q: R
  23.                                 }; t+ {( e8 M- e% {- |8 M2 r. b+ t
  24.                                 case 2:
    + J. B) L$ q* @3 p/ x5 L) ]; T
  25.                                 {
    7 m. ^. H1 S5 Y5 W% o5 b4 m
  26.                                         HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);9 W( c% u7 n- D
  27.                                         HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);
    ' f7 u( {9 V1 e$ Y8 q$ c  d5 }
  28.                                     HAL_GPIO_WritePin(GPIOB, LED_B_Pin,0);
    . U6 e2 O, {# S2 n5 W9 n& `. i. L
  29.                                         cnt++;+ m" T+ d/ D8 l; \
  30.                                     break;+ J$ l$ k; K9 ^+ o3 r
  31.                                 }
    & p' F" v) W' s' R: T
  32.                                 case 3:
    7 \* K* q6 O5 S8 L
  33.                                 {% A0 ]$ H. \, }* v2 n) p0 n
  34.                                         HAL_GPIO_WritePin(GPIOB, LED_R_Pin,1);7 z) |9 `3 p$ }6 J& y* @
  35.                                         HAL_GPIO_WritePin(GPIOB, LED_G_Pin,1);; l6 V/ L( C8 k# \; c
  36.                                     HAL_GPIO_WritePin(GPIOB, LED_B_Pin,1);
    3 M- ^1 B0 `5 r( X, C3 O) ?
  37.                                         cnt=0;- G. B/ A" Y4 {8 z& _8 x5 a
  38.                                     break;
    : @$ F8 Y" b5 w% Z; ~4 y
  39.                                 }$ Z* A/ _, K0 m5 ]/ b; C/ n6 }
  40.                         }
    - p7 F& B) l% a, g& H1 z2 B
  41.                                        
    2 l# J" m) p- ]; u& m/ a: n( I
  42.                 }
    + A4 I1 `( P* o
  43. . _% F7 V; ^$ j# ^5 s! r/ g. j
  44.   }
复制代码

2 @, b3 R% |- `& g* C
/ E, W; W1 y" @; x$ \, J6 h
0 u+ o" C9 v0 }8 L0 n% m" t
$ N6 p4 J. F; \) o1 L6 Z) q$ H+ @5 g  J4 i6 J; y7 Z8 z
赞 收藏 评论0 发布时间:2022-4-7 17:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

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