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

第二章:STM32CubeMx GPIO基本使用方法

[复制链接]
STMCU小助手 发布时间:2021-1-14 15:52
第二章:STM32CubeMxGPIO基本使用方法
第一点:生成一个工程后,需要注意事项:
在STM32CubeMx软件本身生成的源文件中;用户的代码只可以写在以下区域,自己建立的源码文件不受影响:
  1. //写在前面或后面在下次从STM32CubeMx 生成工程时会被清空掉!/ h% t4 P$ e# B! G
  2. //包含库文件,所以尽量不要试图尝试修改库文件来达到功能需求!8 R: b1 z# ~3 Y$ M" V
  3. USER CODE BEGIN; A# I! b& w) U' r" |0 u) V

  4. 6 \$ E" `' x# K( d9 V
  5. //只有这写在有编辑权限的代码区域中编写代码,才不会被清空掉,这里要注意一下!
    % z. C7 D3 [' h# B5 I3 D
  6. 用户可编写的代码区
    ' A. v1 C: _% E2 U0 c: R' X, p

  7. ( F0 F+ l4 r' d9 x2 V
  8. USER CODE END
复制代码
  1. /* Private includes ----------------------------------------------------------*/
    1 Q; {3 j3 _, U& {$ F3 Z& h
  2. /* USER CODE BEGIN Includes */
    8 M& i: Q5 C1 x) {! L5 [
  3. 用户可编写的代码区
    4 j, I) p+ B$ Y& o6 @+ i7 l
  4. /* USER CODE END Includes */9 c6 L; N* u% H, k4 U' j
  5. . q+ M- V! O2 A
  6. /* Private typedef -----------------------------------------------------------*/
    8 ~# ?+ P9 ~* ~8 j& h( l3 M" n, c
  7. /* USER CODE BEGIN PTD */
    " N2 ]3 w3 y$ ?3 p
  8. 用户可编写的代码区
      [! u6 O# L5 z
  9. /* USER CODE END PTD */
    ' E8 R* y" P8 f) Q! P2 j
  10. /* Private define ------------------------------------------------------------*/% H/ ], |' n4 E- N& [1 D" n, W
  11. /* USER CODE BEGIN PD */
    - h, z2 d6 H9 R7 _+ d2 Y2 K
  12. 用户可编写的代码区9 B# j* d" ]+ u# f, L

  13. ' J& D- b8 l5 K% }" G! G
  14. #define KEY1_Pin GPIO_PIN_11    //宏定义GPIO_PIN_11  为  KEY1_Pin 6 l. i# [7 s4 E! m
  15. #define KEY1_GPIO_Port GPIOA    //宏定义GPIOA        为  KEY1_GPIO_Port . f; q0 i; I/ [4 S6 {+ `
  16. #define LED1_Pin GPIO_PIN_12    //宏定义GPIO_PIN_12  为  LED1_Pin  
    ' m, n7 N) A) B7 K5 u* v
  17. #define LED1_GPIO_Port GPIOA    //宏定义GPIOA       为  KEY1_GPIO_Port
      ?( _. O( S6 S5 v
  18. + [4 p8 @8 Y- U  m& a
  19. /* USER CODE END PD */
    / I. Z  @3 m1 E5 a% G6 S

  20. $ ^) L  ^& m) _; {% k
  21. /* Private macro -------------------------------------------------------------*/
    ( q. N  R4 A+ o5 r) A: [1 d
  22. /* USER CODE BEGIN PM */% ?/ S7 i; O8 E/ ?5 i' L9 v9 x1 Z% h
  23. 用户可编写的代码区+ o( y" Z7 c, o
  24. /* USER CODE END PM */
    3 i' c1 p8 z! l
  25. . _  w+ k$ F# n: ^& D' A; Q$ V8 X
  26. /* Private variables ---------------------------------------------------------*/
    % C5 k5 q. L) W+ {2 o  A7 D
  27. * Z8 r# s, D8 t; L4 I8 k# K, [. {
  28. /* USER CODE BEGIN PV */. e2 G6 @7 h, _! A5 \
  29. 用户可编写的代码区- D! t1 H/ N9 y( _- g! S
  30. /* USER CODE END PV */
复制代码

$ U7 G& H% K, i, W  R" ^1 j
  1. int main(void)) E$ k4 R" ]6 z; U
  2. {7 d' k$ D3 q" O( z3 V
  3.   /* USER CODE BEGIN 1 */: T, ]* s8 Q/ C
  4. 用户可编写的代码区
    & m- @' H7 k; k
  5.   /* USER CODE END 1 */% o# S  b* Y: A/ b
  6.   
    ' u7 x0 L5 I; G, p% @4 \4 Q7 p
  7. & A- v2 {/ H' w
  8.   /* MCU Configuration--------------------------------------------------------*/
    4 h1 F4 i) \. D& {! ^
  9. 8 g1 C) i; q& T; B$ P; s: J
  10.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */' E" m0 }% D) c6 N& ?3 ?
  11.   HAL_Init();
    2 s: t) ~- V1 a& D: R. z. D3 C

  12. + s& T) X; U/ H, o. y  l' L
  13.   /* USER CODE BEGIN Init */
    . B8 a. P4 e* C
  14. 用户可编写的代码区
    2 D9 |/ |. w( h; ^  |- Q$ R; u. u. E
  15.   /* USER CODE END Init */1 X1 z  m" O) V

  16. 3 ~) x1 `: q( q$ S, a& H
  17.   /* Configure the system clock */
    8 P- w$ Y; P% M( O/ W' j& Q8 v! d
  18.   SystemClock_Config();
    3 [* j5 X& ^& H; k* V( f" m
  19. % r+ Q9 C" H+ J4 m/ |% w0 [/ T
  20.   /* USER CODE BEGIN SysInit */
    4 ]8 Z+ _6 i  U. u9 g
  21. 用户可编写的代码区
    ( S. V6 z" F) ^: @4 B, ^! ^
  22.   /* USER CODE END SysInit */, A" r6 r) r. x

  23. 7 u' ^! U1 a+ D  R
  24.   /* Initialize all configured peripherals */
    $ z6 D7 {2 e/ i+ V: K
  25.   MX_GPIO_Init();) e" b! Q: o8 w
  26.   /* USER CODE BEGIN 2 */
    6 M; g" W" P- x. N
  27. 用户可编写的代码区4 S* W* \9 X! _
  28.   /* USER CODE END 2 */) d: [3 _# M) W9 W
  29. . e* `+ {1 n4 r( Q6 l+ F, V6 B
  30.   /* Infinite loop */
    5 E6 M, u. @# e3 j, h
  31.   /* USER CODE BEGIN WHILE */
    : U- d2 j2 z5 z- r: k
  32.   while (1)! k) p+ B' F, a. _& T. M
  33.   {  |6 O0 Z' r1 M$ {; ]9 }, D
  34.     用户可编写的代码区5 _' Y9 p+ c) e# N+ b5 V
  35.     /* USER CODE END WHILE */
    0 Q. e; U) L  X- f- }1 O! r

  36. & ]/ A7 U0 V+ `: V
  37.     /* USER CODE BEGIN 3 */
    " g- @9 J9 C7 w: e
  38.   }5 \$ n; S7 X% P
  39.   /* USER CODE END 3 */
    9 s; k5 U& @2 }8 o
  40. }
复制代码
第二点:关于GPIO 的几个库函数使用说明:
  1. //这是上一节讲到IO口初始化代码,该代码由STM32CubeMx 自动生成5 F+ K% A8 h& L# K& S$ J7 _
  2. static void MX_GPIO_Init(void)
      E- @! d. b7 \7 L+ F0 y
  3. {9 F& ], w- {& Q: n& L* |
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};* h- q  B! w& M/ s4 Q0 [" T
  5. 0 j+ n2 a+ H6 d$ @. W: N$ x$ M3 M
  6.   /* GPIO Ports Clock Enable */
    7 M/ P0 \. y0 {" o: w8 @& k
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();
    5 G! o* B' F. d# O) ?

  8. : Y3 S2 B& w: s( h
  9.   /*Configure GPIO pin Output Level *// n6 ~) I- U. D
  10.   HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//默认输出高7 h! |- z! G9 a; f

  11. " X( q- p9 |- O1 S6 ]; A
  12.   /*Configure GPIO pin : KEY1_Pin */
    0 W2 t6 n" ^& t5 Q% i( i
  13.   //这是我们之前在上位机配置的参数,生成代码后就这是这样了7 T6 J6 X$ v; ~" u; v3 l, V
  14.   GPIO_InitStruct.Pin = KEY1_Pin;      //初始化KEY1引脚8 [5 G% h( w  h$ W; Y
  15.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  //配置为输入模式
    6 C) r" P8 r% h# t& i% I
  16.   GPIO_InitStruct.Pull = GPIO_PULLUP;    //上拉输入9 {2 a2 g4 K) J2 A
  17.   HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);1 Z+ d' F: h7 s- {/ u
  18. 4 g6 r8 h/ Z& `! C5 M5 Y
  19.   /*Configure GPIO pin : LED1_Pin */
    ( ], g- P3 ?0 C$ }* `) N
  20.   GPIO_InitStruct.Pin = LED1_Pin; //初始化LED1引脚
    - i) k1 x2 G9 {7 S/ s
  21.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //配置为输出模式4 F1 [' C/ ^8 ~/ W' N3 R' D5 t
  22.   GPIO_InitStruct.Pull = GPIO_PULLUP;//默认上拉输出
    / N, o' I9 a2 D/ h" o) V7 ]1 E% y
  23.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//低速模式
    + ~" a& i" A+ f' K: M2 |
  24.   HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);
    * E8 R, ]! k% R/ ~% T# a
  25. }
复制代码
  1. /* HAL_GPIO_DeInit    重置IO口,恢复为默认状态
    . z0 v4 a; k' T# _3 o
  2. .  HAL_GPIO_ReadPin   读取IO口状态函数,需要把IO口配置为输入模式才可以读取到,这里注意一下9 X9 g0 \# M, G0 T$ c# Z
  3. ·  HAL_GPIO_WritePin  输出IO口状态函数,即对IO输出高电平/低电平  C, r+ t4 W/ ~7 a& m
  4. .  HAL_GPIO_TogglePin 输出IO口翻转函数,即对IO口取反
    - E; v4 Q# x3 R" S, t3 X
  5. .  HAL_GPIO_LockPin   锁定IO口函数,读管脚值使用锁定,当这个管脚电平变化时保持锁定的值。
    ; z9 N. t" B/ c; [0 X
  6. . HAL_GPIO_EXTI_IRQHandler 外部中断服务函数,详细使用,下期讲到!5 Q# Q6 p! `0 }8 R8 g, ^- D
  7. . HAL_GPIO_EXTI_Callback 中断回调函数,详细使用,下期讲到!
    6 _1 n/ I6 e+ ^& K3 Q* d
  8. */" A$ M7 ^. C) H' J
  9. void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);/ U* F& e+ _% ~$ P. }" D* G0 h
  10. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);( M7 F' P- S% N' a4 Z! E0 C( ~
  11. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
    $ _9 J, P1 W! a) l6 @0 b9 `
  12. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    8 C" S1 p8 V' {) ?7 s% |1 C4 D
  13. HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    + k# _0 @0 N" A) B2 i3 [
  14. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
    5 F; V" F$ l; q  R
  15. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);: `1 i/ k0 V# T, S

  16. 4 c6 m- C' R) }8 M% H
  17. //搞清楚每个功能函数的功能后,我们只需要直接调用即可:8 @4 ]" f- O7 k+ S& `) X: K  ~
  18. //例:
    ( g* b3 D( N5 Q
  19. if(!HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin))  //如果KEY1 脚为低电平0 ]& e$ r: S" Q
  20. {+ V: ?, e% }% ]
  21.   HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //LED1输出高电平: ]' Q) ~& M9 z* x9 d+ M! R
  22.   HAL_Delay(1000);  //延时函数1S
    4 j/ U1 Q# Q; W; P* _& M2 |
  23.   HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //LED1输出低电平7 [1 x: I% {+ i- E+ {, c/ @  g4 @* j
  24.   HAL_Delay(1000);  //延时函数1S
    " Q+ Q7 F) n' m9 `$ d
  25.   HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); // LED1 翻转输出电平" q- O+ y" k5 w9 f, s4 ]( _
  26. }
复制代码

' ~2 c1 l. X" J6 J
如果能理解到这里,恭喜你已经学会了IO的基本操作!
文章出处: 电子爱好者
4 H2 w% ?+ Q  e$ b' i
收藏 评论0 发布时间:2021-1-14 15:52

举报

0个回答

所属标签

相似分享

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