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

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

[复制链接]
STMCU小助手 发布时间:2021-11-9 17:00
新建CubeMX工程- W- i$ ]& V) f/ h% h" J7 ^
这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。7 s  s, m5 c, X; O* d: x

1 ~/ X6 F2 K, h. _打开SWD调试接口& G! K5 ]% X3 c8 v
在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)
  Z7 [; `8 w- _1 J9 E: c1 s6 a
2 R* [1 k0 I' b' r
20200419170920422.png

' M) a- j6 k& a# b+ Z) N, W1 A/ Y8 H5 X1 I: a3 C" w
20200419170759937.png

( }! ^& b8 y3 B3 q" t" \
7 k) a$ Q2 i( g; X* d配置引脚属性
8 `/ E, a2 e. w/ Y6 E9 y1 EGPIO output level:默认输出电平。Hight和Low9 Z0 C1 c+ R. ]8 x! |
' j, Y2 J, N7 b( @
GPIO mode :设置引脚输出模式。有推挽和开漏
" R# Y9 i! P, a2 U& H8 f% t3 m, @/ }8 ~
GPIO Pull-up/Pull-down:设置上下拉。% @4 l) y9 ^* r( I/ ~2 ^0 y# i! c
- g6 ~" b4 {9 ]% i3 W5 F
Maximum output speed:设置引脚速度。有四个等级。5 C6 L& K. E( R, y

: |+ h* z* f# D+ I% L6 oUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。+ o7 D2 ~8 Q8 T" k4 Y
: P8 \+ D# d" v
20200419172351532.jpg

7 T3 c( U* b# |. x) V; h; @' r5 j2 H7 Z( A7 C5 I% P
生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。
8 {" Y8 l- N. U7 d在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。
3 A. I3 o7 V4 U2 y! `" U0 o0 w% x
  1.   while (1)4 |5 j( ~$ I. q7 I- H( g6 u7 M3 G
  2.   {( w" T9 D' g  h6 v* v* }2 Y7 I7 r4 q- e
  3.     /* USER CODE END WHILE */, X5 e. g( B& {: U) q, x9 z

  4. ) s$ A0 k6 q! }; N2 ^
  5.     /* USER CODE BEGIN 3*/            //在BEGIN与END之间添加代码。重新生成工程就不会删掉/ z- l) D. _2 H/ ^$ W3 k- g
  6.                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6);   //翻转IO引脚
    3 a4 n0 Q0 ~8 L; D% K2 C8 u
  7.                 HAL_Delay(2000);                        //延时2秒+ Z+ l: H  }' J( R" J; t( r% ?
  8.   }
    + ]9 ^3 h, \& i9 V0 w
  9.   /* USER CODE END 3 */
复制代码

) w, d1 X$ B) q$ A0 K* O编译后,下载烧录到板子中。5 p4 {. Z- v# W6 T
有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。
& q3 I6 p' v3 d: J2 y: \+ T* Q  {  k0 c. `1 d/ Q
GPIO HAL库函数% k# |/ y4 g  P" S
  1. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);   //设置引脚函数
复制代码
0 D- w0 R0 H7 ~/ Q2 M0 n' }+ K
GPIO_TypeDef *GPIOx:GPIOA,B,C...
/ }8 y* Z% x% r1 ?/ vuint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15
3 f4 I! g7 n6 QGPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)
7 g9 B0 Y  e( x2 @8 l: A7 T
  1.   while (1)* Z! J' ?- T1 `5 o& ]
  2.   {2 J, j7 A0 R- y5 g9 Q; u
  3.     /* USER CODE END WHILE */
    ' w$ p, K& W+ H' ~+ Q+ o

  4. 0 u0 _) L1 M6 m  z, `% Y
  5.     /* USER CODE BEGIN 3 */1 \3 |+ O. |& f+ r7 Q7 d
  6.                 HAL_Delay(1000);
    1 p& }2 o8 d) B  V3 U0 d
  7.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET);    //LED灯会亮两秒钟
    # E7 S- U9 H$ _5 e! ~1 m
  8.                 HAL_Delay(2000);
    . Z3 D; j7 Q. u% S, B% \
  9.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET);      //LED灯会灭一秒钟
    ; I% l2 E4 a3 w0 |% i+ n( C
  10.   }/ ^3 U. }3 O, _
  11.   /* USER CODE END 3 */
    - [8 j2 X0 A6 X% T( ?  c+ T9 ^
  12. }
复制代码
+ i8 P& B( ?( M( o6 F. b
GPIO_PinState     HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);               //读取引脚电平
& U% P; k& W& B+ D- g2 H; R; ?. J, G, e% w9 l7 ~: `9 P! V( ]
GPIO_TypeDef *GPIOx:GPIOA,B,C...# @6 U, L0 ?: q7 Q
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15$ o, Y3 @. y* j  Z/ H1 A" {; M4 `
GPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
, v- x. Q% C5 v- R: V5 K6 u! V还有其他函数,大家在实际中运用吧。2 K* N6 V  x; \0 D
                     
  1. void     HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);         //翻转IO引脚电平
    & U& v$ d3 N: [, m
  2. HAL_StatusTypeDef    HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);            //锁定IO引脚电平( |$ F1 U- ~- ~! c
复制代码

' m) K  z- G6 l1 m/ ~; h+ R6 _- N4 r/ Q
收藏 评论0 发布时间:2021-11-9 17:00

举报

0个回答

所属标签

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