新建CubeMX工程2 n, j7 ?& ]6 M7 ~( e
这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。
% @0 f. _: B# z& R( ?- _8 ` [0 f0 `/ r+ ~" Z" f, x5 Q
打开SWD调试接口$ M0 F+ }9 a: K4 b3 U
在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)
9 \! t) p' z" k+ X% v
# ]2 l7 \1 p/ ~: R# B/ G) P0 B) a8 L9 t/ j" m8 K
: ]- t( H) A/ }' p U% ^( \; z0 Z9 |9 l7 q6 ?
) z. y( q$ b0 [$ e
配置引脚属性
$ B z) e/ U. l, s7 d* S( NGPIO output level:默认输出电平。Hight和Low) ?, z- \% r4 A* i) P: u
9 V- I4 h- J& v: Q3 o0 j6 ZGPIO mode :设置引脚输出模式。有推挽和开漏
! \+ ]. _5 G5 I
: x6 @+ u# \+ ]) ^+ J$ T b" C- OGPIO Pull-up/Pull-down:设置上下拉。* G) q+ F9 Z, v7 I7 R% E
; Z, B9 [# ]5 j/ ~! H* c) ]Maximum output speed:设置引脚速度。有四个等级。) Y$ O$ {8 S Z4 t/ _! @
1 q: _7 {# ~9 {4 ^1 x0 F# TUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。
8 Y/ W' X% f* x7 q. w1 Q# |5 ^ B4 G9 [3 k
) e2 Y3 t9 @2 F) `- b% X% `
$ F+ w0 W; V6 ~0 R
生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。. }3 K+ |5 t4 K. n& v
在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。8 }; h/ U( H, J% B
- while (1)4 J$ |! V+ T: f! p8 E1 N0 ?
- {, F% W& ?! p N- T6 I, _8 Z2 T( @$ I
- /* USER CODE END WHILE */& G$ L. S1 q! T) K
9 r' f/ ]) M0 ^, r, u( j7 Q- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
4 F; B8 c: \6 S, o) f' i! r - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
9 z- |5 {5 E, u3 ~6 h4 D: k - HAL_Delay(2000); //延时2秒
: r: J \. d9 K6 @. x3 j8 A - }% G- H/ \, t+ D- I
- /* USER CODE END 3 */
复制代码
9 k, U' n9 E( U0 i+ w% k编译后,下载烧录到板子中。
& `6 {: g' q2 ^8 T# ^$ m. M+ H有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。3 D, V( I# [$ s7 r. o5 y' J
P* M. `& P# B# B5 _GPIO HAL库函数
) t! I V8 @7 v& X# n3 j- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
( S: K) K2 Q/ B' Q GPIO_TypeDef *GPIOx:GPIOA,B,C...3 B% _' p: c ~: r4 U$ q0 _& Y
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15; q4 W5 H0 x0 b" D3 o5 |
GPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)
- i: Y! x) i# p) F5 c1 d- while (1)* h7 v( \! C( n ` L0 X3 Z
- {
3 W r2 y0 ]! j - /* USER CODE END WHILE */; ~- O: {( i, f7 @% L/ o% ~
- 5 w: G/ k: a5 F& ?& w
- /* USER CODE BEGIN 3 */
/ |: j* b" v- y" D9 K - HAL_Delay(1000);
, K$ z1 s5 y2 Q1 E" s& d - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟9 k! T4 U& c. I' W
- HAL_Delay(2000);
: Y/ j( a2 w4 \" j' {; Y4 X" J( z - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟
+ }* ]( j0 L0 \0 z2 s& Q0 A - }
/ K; h$ |# p4 `/ U0 D - /* USER CODE END 3 */
# S1 g: c% g2 ?& |1 Y - }
复制代码 ; ]2 }2 c7 B1 P& P( g- I
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平
/ ?. n- y0 N2 Y1 P, Q
2 k% _/ H% A: R GPIO_TypeDef *GPIOx:GPIOA,B,C...3 G V! E! u" a9 G
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15. ^9 I$ [0 {* U
GPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
" K2 ^) v8 Y! a: H7 z3 n7 O9 I7 \还有其他函数,大家在实际中运用吧。
0 j- p, y/ ~# W- X - void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平5 O8 H+ z+ U; \% c6 Q) v ?' B
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平
4 K6 z9 _8 N! J2 A# G, W9 L
复制代码 3 k! S) L- F. b. G
7 k% ~" n& K+ T% j7 d/ X6 B |