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

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

[复制链接]
STMCU小助手 发布时间:2021-1-14 15:52
第二章:STM32CubeMxGPIO基本使用方法
第一点:生成一个工程后,需要注意事项:
在STM32CubeMx软件本身生成的源文件中;用户的代码只可以写在以下区域,自己建立的源码文件不受影响:
  1. //写在前面或后面在下次从STM32CubeMx 生成工程时会被清空掉!& r' b! z3 U2 O6 B5 Y6 x
  2. //包含库文件,所以尽量不要试图尝试修改库文件来达到功能需求!
    2 d# Y/ d  W1 l$ B; u3 G" ^
  3. USER CODE BEGIN9 E. ^, P( n( i' l" k

  4. 8 C1 S3 ~% u# Z; B& P
  5. //只有这写在有编辑权限的代码区域中编写代码,才不会被清空掉,这里要注意一下!0 s' X! P; C* ^) U+ W
  6. 用户可编写的代码区
    5 o( @1 l% N' D1 x& u

  7. 0 D$ Y3 q3 U2 U3 [
  8. USER CODE END
复制代码
  1. /* Private includes ----------------------------------------------------------*/
    $ w2 F( \5 h; d9 t
  2. /* USER CODE BEGIN Includes */
    : P% e5 d$ M8 ?
  3. 用户可编写的代码区1 A  ~: F7 ]; d& N2 M5 z5 f% i. o
  4. /* USER CODE END Includes */6 G2 j% ?8 `! d' @1 U; e; ~
  5. ) @9 I9 H' D& v, J6 w6 g2 {
  6. /* Private typedef -----------------------------------------------------------*/
    , Y$ ]9 Q9 _& D$ q, T" u
  7. /* USER CODE BEGIN PTD */- {3 L2 S) Y9 r4 Q8 e
  8. 用户可编写的代码区0 k( q8 V2 e9 J2 n
  9. /* USER CODE END PTD */7 P8 }# G) l$ K4 r- d  w  e; {
  10. /* Private define ------------------------------------------------------------*/
    9 R  c: o& n1 G2 y  X- [7 c. R
  11. /* USER CODE BEGIN PD */
    0 Q2 @6 U1 I: z! w/ _' _
  12. 用户可编写的代码区
    & A$ k0 E, s, Y5 s# ?% c# s" B5 E

  13. " q) a& e- S6 A  {5 r
  14. #define KEY1_Pin GPIO_PIN_11    //宏定义GPIO_PIN_11  为  KEY1_Pin
    2 W- m/ h7 y/ d; h' A( q5 g
  15. #define KEY1_GPIO_Port GPIOA    //宏定义GPIOA        为  KEY1_GPIO_Port * [% ~0 g: k- A4 G$ p9 J
  16. #define LED1_Pin GPIO_PIN_12    //宏定义GPIO_PIN_12  为  LED1_Pin  2 m: f( `! ~  H* S8 W$ `
  17. #define LED1_GPIO_Port GPIOA    //宏定义GPIOA       为  KEY1_GPIO_Port   }7 A+ q) q5 J+ m* V2 P
  18. 3 h3 w6 O; a# B
  19. /* USER CODE END PD */9 D8 \$ X- t) H/ O

  20. ) E/ V5 X. i' J+ ?! X# U
  21. /* Private macro -------------------------------------------------------------*/
    2 ^2 J$ u! f. f! Z- C( x
  22. /* USER CODE BEGIN PM */, A$ J/ Z" H! N9 h5 V4 j
  23. 用户可编写的代码区
    7 P+ ?% u; D  E( a: \# X
  24. /* USER CODE END PM */3 b# p7 W# `% i# C
  25. & z# v$ J( _. i8 K: M9 T4 l
  26. /* Private variables ---------------------------------------------------------*/
    8 h! R' V" p+ ]2 I8 d& _7 r* E6 ^% @( T

  27. ! U. O1 N5 E7 ^2 U% w2 o
  28. /* USER CODE BEGIN PV */6 Z  a- t: J& X" @
  29. 用户可编写的代码区4 T9 o8 v4 R* ?8 V' h
  30. /* USER CODE END PV */
复制代码
% k6 o' ?- I/ u% ~# A
  1. int main(void)
    3 i6 {8 |# p* w( J; |  U. v# P" m* C4 l
  2. {
    , l9 C& i8 {$ @! H; M2 s
  3.   /* USER CODE BEGIN 1 */
    * q0 b% b( d7 H/ W* M, \/ F" Q
  4. 用户可编写的代码区1 i0 v& c  Q+ e% t$ W, u" t
  5.   /* USER CODE END 1 */
    % f0 f* g5 B( H' F  Z9 K" H  Q0 q, o) Y- g
  6.   7 y( m# ~0 W2 `8 n
  7. , v$ {% N5 I$ V6 g5 u3 _+ |
  8.   /* MCU Configuration--------------------------------------------------------*/; x4 O" u4 y3 N7 I4 B
  9. 4 e+ Z: _% J2 B. W7 n9 q
  10.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    3 I* N/ ~, C! K# d& C9 {
  11.   HAL_Init();
    1 t" ^* ?* Y: y2 R8 k

  12. ; v% v8 Q4 w% a$ \- [; G
  13.   /* USER CODE BEGIN Init */( A7 ^3 C1 @; n/ r- }
  14. 用户可编写的代码区4 q, O7 K. N/ H2 r9 O
  15.   /* USER CODE END Init */
    , I) I: j" R( Z9 X- w* h- D

  16. # |" W0 p1 g2 p$ e9 e
  17.   /* Configure the system clock */* f# u7 Y' j0 g: Y! G( N
  18.   SystemClock_Config();
    , o8 V3 o) ]9 \. a4 p

  19. ) R* C' A( j! F. V
  20.   /* USER CODE BEGIN SysInit */5 ^$ D( P- L( D! r8 o" e( }, |
  21. 用户可编写的代码区# X0 ^. W( n4 e+ S) k2 O
  22.   /* USER CODE END SysInit */
    # e6 S& Q- t. {$ N' @

  23. % ^7 P. g/ D6 U* u" Z
  24.   /* Initialize all configured peripherals */
    ! S7 d" d% w0 T" i" y( n8 n
  25.   MX_GPIO_Init();
    2 y( V2 ~0 H, s0 R% C; y# j
  26.   /* USER CODE BEGIN 2 */
      j7 ~1 ?" Y( Q$ J" ^$ d" ~) h
  27. 用户可编写的代码区
    $ d) J  m, |$ p: [9 K, x
  28.   /* USER CODE END 2 */7 f5 ?1 \  s8 R4 u

  29. 2 D4 t, g, n" f+ n' k
  30.   /* Infinite loop */
    ( [" K# J: D# J' D0 a
  31.   /* USER CODE BEGIN WHILE */. @! M6 m& w- K& d+ R" l; u  m
  32.   while (1)
    : t9 b6 J7 |, ~0 `
  33.   {( Y, `8 k& f# b) v! ?) f
  34.     用户可编写的代码区; I8 h: B: N4 U; `9 W6 D& }
  35.     /* USER CODE END WHILE *// m9 E7 s! L% K0 ]
  36. 2 o3 {4 m# W- ~+ K9 J; X% U2 V9 y
  37.     /* USER CODE BEGIN 3 */
    7 J/ z, o: x) G
  38.   }( y" I$ n) w1 A
  39.   /* USER CODE END 3 */- W+ A$ n$ u7 T- f
  40. }
复制代码
第二点:关于GPIO 的几个库函数使用说明:
  1. //这是上一节讲到IO口初始化代码,该代码由STM32CubeMx 自动生成8 ~0 f- F- S0 h$ y9 \
  2. static void MX_GPIO_Init(void)
    1 f( H4 s/ u7 u2 d$ _
  3. {
    ! j. |" ]" |9 |  g* ]. `
  4.   GPIO_InitTypeDef GPIO_InitStruct = {0};0 J0 b$ a. a; o0 a, O; a6 m

  5. 7 A* @  ]) |; i0 t; K; c
  6.   /* GPIO Ports Clock Enable */
    2 N, o5 m9 `0 _8 M
  7.   __HAL_RCC_GPIOA_CLK_ENABLE();% p' C4 T$ F2 @+ M# |
  8. ' C" H- a9 o4 j. r% y
  9.   /*Configure GPIO pin Output Level */
    & P3 B9 @9 O, h$ v
  10.   HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET);//默认输出高) H7 F1 I4 H2 Q
  11. 7 k# p3 c1 D, t: t* F, B' G0 u
  12.   /*Configure GPIO pin : KEY1_Pin */
    ' ?6 c5 u. V; \0 l: J. Q$ R
  13.   //这是我们之前在上位机配置的参数,生成代码后就这是这样了0 `3 m/ V- _. o$ P) o
  14.   GPIO_InitStruct.Pin = KEY1_Pin;      //初始化KEY1引脚( E' I' U/ Q  I* _. ~# M
  15.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;  //配置为输入模式( ]2 G: A5 C$ f# b. T" T% A7 ^
  16.   GPIO_InitStruct.Pull = GPIO_PULLUP;    //上拉输入; C) k0 r1 Z2 t7 g! D
  17.   HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);
    , x$ R; r! k. y6 O

  18.   H# u% f* o* {0 w1 g  |. A
  19.   /*Configure GPIO pin : LED1_Pin */
    9 e0 z! S4 P! F& h4 R: j
  20.   GPIO_InitStruct.Pin = LED1_Pin; //初始化LED1引脚
    6 w( L$ O6 q: _; n
  21.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //配置为输出模式
    ) a4 p/ A7 B: L3 Y( k0 Y4 Z' C7 y
  22.   GPIO_InitStruct.Pull = GPIO_PULLUP;//默认上拉输出7 |- ]. t" J4 {
  23.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;//低速模式& @6 h- k. s, m( G
  24.   HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct);! }! X% T, X- v+ X) c. d
  25. }
复制代码
  1. /* HAL_GPIO_DeInit    重置IO口,恢复为默认状态
    $ n. j6 n# C% B
  2. .  HAL_GPIO_ReadPin   读取IO口状态函数,需要把IO口配置为输入模式才可以读取到,这里注意一下
    ! R7 _' d& u7 f  K! u" C5 q
  3. ·  HAL_GPIO_WritePin  输出IO口状态函数,即对IO输出高电平/低电平( Z3 F: Y1 K1 d+ N& b
  4. .  HAL_GPIO_TogglePin 输出IO口翻转函数,即对IO口取反( s8 x! I" W) G  k
  5. .  HAL_GPIO_LockPin   锁定IO口函数,读管脚值使用锁定,当这个管脚电平变化时保持锁定的值。  D! t4 d, J! }' w
  6. . HAL_GPIO_EXTI_IRQHandler 外部中断服务函数,详细使用,下期讲到!
    ) r& [) j8 j* W
  7. . HAL_GPIO_EXTI_Callback 中断回调函数,详细使用,下期讲到!$ D" N4 l) Z8 U# s* ^
  8. */
    - K5 g; a  E8 _& B) x( t
  9. void  HAL_GPIO_DeInit(GPIO_TypeDef  *GPIOx, uint32_t GPIO_Pin);) {  D4 M5 p) @' f+ C/ I2 d
  10. GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);$ E$ h2 m3 W  \3 A1 M
  11. void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);2 R; Y+ W! G2 Y" Y2 |+ |
  12. void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    2 Z4 ^) t7 W! `& @. a, [' a
  13. HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
    ' q* W: ?. {( |
  14. void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin);
    ! d' O8 S' ^0 o
  15. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
    ) s: C2 ?" E: a

  16. , u( _: F2 L0 L2 `5 V
  17. //搞清楚每个功能函数的功能后,我们只需要直接调用即可:
    % g! I* E- i' d1 ?8 o! S
  18. //例:
    + u8 X7 q* \1 o7 C
  19. if(!HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin))  //如果KEY1 脚为低电平* r$ g9 G9 e5 V
  20. {
    ' F9 ?% U. a; f0 w0 ^) I/ S" o
  21.   HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //LED1输出高电平# t1 z1 f+ y; j# a! [
  22.   HAL_Delay(1000);  //延时函数1S* E3 e, L9 _/ @  i, v, _
  23.   HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //LED1输出低电平- t: y# [  f7 U) r: B3 S
  24.   HAL_Delay(1000);  //延时函数1S# W( r' g. R1 h
  25.   HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); // LED1 翻转输出电平
      D- f9 a( w2 {& F) c$ |
  26. }
复制代码

6 I7 }8 ]' ~! c. x3 j: ]4 Y: v; S
如果能理解到这里,恭喜你已经学会了IO的基本操作!
文章出处: 电子爱好者
$ I5 w; F: M% M
收藏 评论0 发布时间:2021-1-14 15:52

举报

0个回答

所属标签

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