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

【经验分享】STM32G0学习手册——点亮LED(GPIO用法HAL库)

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
新建CubeMX工程
# v2 F- }/ j6 I这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。
* o, p$ c* p  W! _& ]: M$ |/ Q- F) g+ H% y+ A
打开SWD调试接口
1 s5 c% F) }5 k+ k在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)/ s: F! v" @- m: R$ R7 w
6 M7 N7 _& i0 x! U) u4 Y
20200419170920422.png

2 l. b2 }7 V( X5 ]) a/ i' |1 S$ r9 `; L- D: V0 U; R) J0 ^
20200419170759937.png
  }$ R: @. K) s! ?
$ u' |4 m8 [: @8 `* }- \
配置引脚属性
/ l3 b! H% i/ N& VGPIO output level:默认输出电平。Hight和Low
; @$ z) a+ I2 ^
# m1 h  n9 M0 `* X9 Q4 TGPIO mode :设置引脚输出模式。有推挽和开漏
1 A$ \1 Z: t2 X3 I; h- C. [% k" s% E9 {" v
GPIO Pull-up/Pull-down:设置上下拉。
# t9 |9 |+ O5 j7 ^' w5 ~& H2 M3 ~5 p7 ?- d3 E. f5 H5 r2 S
Maximum output speed:设置引脚速度。有四个等级。5 t1 i; ^/ F" q+ v* J$ w

0 B" V, S% E7 o/ uUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。; d  z! ~2 ?0 Z: ], E
7 X7 q$ k0 a" U( k% A& @" I9 M
20200419172351532.jpg

% W& j* Q9 Y. @2 H8 I$ j6 w' ^- A6 y( L+ P8 K
生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。+ c1 a6 r3 D: y# \( v7 }0 f$ S
在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。) k7 a5 i6 G: A$ s* Q9 s
  1.   while (1)0 K2 n. }' R$ H' b9 d
  2.   {% y+ p" b! h" j4 e$ u. D: R
  3.     /* USER CODE END WHILE */
    0 E/ M  b" c) f' Z, r/ U  _9 s
  4. / q" Q( |0 D9 u" p/ ~1 ~$ C8 i' d0 V& ?
  5.     /* USER CODE BEGIN 3*/            //在BEGIN与END之间添加代码。重新生成工程就不会删掉
    5 T9 o9 i- j4 M8 D; \
  6.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);   //翻转IO引脚
    . j  ?) Q# D  @; S; X3 G
  7.                 HAL_Delay(2000);                        //延时2秒
    - _  r5 m5 Z; ^% [
  8.   }' W3 ]3 t8 j% }: \% \8 m, `
  9.   /* USER CODE END 3 */
复制代码
$ X, g$ e1 M4 I: C1 }& S/ ^
编译后,下载烧录到板子中。
, P3 C1 k) t( {, t( d. i4 t有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。  {( |" y- o% l* j- P
4 h$ W, J7 G% R% H. `8 ?
GPIO HAL库函数
1 O" y! ]* H& b0 ?( U: g! k# n
  1. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);   //设置引脚函数
复制代码

+ B" ?& I7 N/ \+ n3 w% V( t GPIO_TypeDef *GPIOx:GPIOA,B,C...
1 H3 [2 @; ]/ c+ v9 y. Quint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15
$ [& C' b8 d4 K1 N% UGPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)
' _0 ]: T, k- t1 G
  1.   while (1)) D5 q( M. y& J; t
  2.   {
    5 c$ n: j0 U( F  \- Y7 ^
  3.     /* USER CODE END WHILE */1 o' f) x. o3 F7 O# H" c* j
  4. $ p: o1 q. @# y# f3 _! a
  5.     /* USER CODE BEGIN 3 */) Z" h1 T4 D* E, L, A" Z
  6.                 HAL_Delay(1000);+ \: i, W/ `4 t2 p$ X. @" c
  7.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);    //LED灯会亮两秒钟
    3 p6 B; X1 s. ~; n3 G) Z
  8.                 HAL_Delay(2000);
    ! l( J8 \, z( ^, N$ K" n/ s
  9.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);      //LED灯会灭一秒钟2 c+ d3 s1 l7 O
  10.   }
      Q* \$ g& {9 o) U% T0 W
  11.   /* USER CODE END 3 */
    0 w  m7 G1 I7 I
  12. }
复制代码
; q; ~. b: L; Z
GPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);               //读取引脚电平
+ J# T2 F0 O) G8 Z& u  a
& `8 i' \0 b. r4 ^ GPIO_TypeDef *GPIOx:GPIOA,B,C...
1 O- {" i( R8 X: O" l1 S' d/ fuint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15
+ H# k% `; z9 ^7 F  O: J: R: VGPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
. R# A/ a4 O) \; H+ i: @9 r还有其他函数,大家在实际中运用吧。/ @& R4 m9 X: p4 H! A7 n0 ?9 m
                     
  1. void     HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);         //翻转IO引脚电平
    : S! y8 e; A1 |0 t9 z
  2. HAL_StatusTypeDef    HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);            //锁定IO引脚电平) h1 N: N8 ?- d1 Q
复制代码

& s# b. w; D% G0 q4 j. H7 V/ Y2 Z7 ]$ K$ W/ _
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

相似分享

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