新建CubeMX工程
2 F- M6 L& L% r6 B+ k. p( f2 i这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。3 r; k, j1 s* \6 k% G
# ~) I: v0 A, ~0 R& J8 N打开SWD调试接口, x, z& D r0 X% _
在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)
5 x8 Z; r1 m& k' }* G# j
& @3 a# Z+ Y" {/ F f' T! [( e0 i2 e
! ]+ b! m- O) _ [0 @" `; S- K. g' r# w$ m6 `' z
# q* k5 ^7 X+ i配置引脚属性 - ]4 t' v* |# M A
GPIO output level:默认输出电平。Hight和Low
& R1 ^8 U5 p: Y' Z" _( L; @. F0 u& X) E' Y4 y8 E8 g
GPIO mode :设置引脚输出模式。有推挽和开漏 k1 B+ h$ k* D( N- S7 y& K
$ a$ X4 e4 R( ZGPIO Pull-up/Pull-down:设置上下拉。) ^& G( O& t1 I& I. b3 G& V: c
! F4 ] \% V$ }6 }) S* }: b4 u
Maximum output speed:设置引脚速度。有四个等级。
" p+ Y) K2 F* [( {" ^+ ~% ^
! z; L) _2 k6 K0 D0 kUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。
6 J3 Z+ }$ O8 k1 q0 ^
- P3 N7 z4 E& s9 i
+ c, n Q# C9 ~) ^8 h3 r
) \; ?! J4 m2 ]+ H: c, |0 P0 {生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。
' N. g. i. \2 {# s! h: S) w在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。9 c1 M& I: F: }
- while (1)
; M( L6 W2 G6 V( a2 S0 S( F - {' B; _/ t2 ?7 p1 M
- /* USER CODE END WHILE */+ k6 I" `6 s' W0 W6 a) n- }
- q, c; k3 Y1 K1 E- f- u
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
/ L4 W3 s# t `( o - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
# J8 V6 h0 ^* _ - HAL_Delay(2000); //延时2秒% @2 U! o( a! ?
- }! O/ J* [0 }( s7 W
- /* USER CODE END 3 */
复制代码
. `9 t1 B; e$ {9 \8 C编译后,下载烧录到板子中。% r/ p, p9 g% S9 H
有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。8 p1 S. t' Y' k+ r6 ]2 v
1 K4 a5 w. ~* L) T- _8 ?GPIO HAL库函数
. M+ v* _8 m5 Q" y) s1 W- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
, O, k/ T& X9 F% E5 \! G( ] GPIO_TypeDef *GPIOx:GPIOA,B,C...
" T4 r" @# f3 F- }+ C# ~uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15
0 m, l0 |0 G9 C9 Z$ e8 RGPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)
! q- x0 {3 B0 D# O( g' Z' j- while (1)
; Z; W: U) r- a& Y, |, L( D) O. Y - {4 C: U+ w- j2 `, X
- /* USER CODE END WHILE */
- _# ]# o& S, g. o) K; }/ } - ) M) Q% z* a6 ?# |6 _1 ~1 N. d0 E
- /* USER CODE BEGIN 3 */, u/ i& u& O/ q2 N, S. @! C6 v
- HAL_Delay(1000);
" |3 V+ T5 Y) g1 a - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟6 g/ B( P2 d3 ^1 S7 m& W( g
- HAL_Delay(2000);
- ]: Q, e |) v# B - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟$ G) r4 ?% e. h: d
- }8 |3 Y' ^/ x0 Q0 g( m* c, Y3 O# f
- /* USER CODE END 3 */6 x$ R; m, k2 g+ B! ` R1 C
- }
复制代码
5 L7 R' _9 {: O7 rGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平
* M8 k+ _, u* A6 N8 v6 I: `& R
5 \5 X9 U, |9 c2 L3 t; [ GPIO_TypeDef *GPIOx:GPIOA,B,C...: x/ U. M6 i! [: k/ u
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15
' d. n: M) s9 f3 E+ c' ]$ \* d/ fGPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
5 _4 x, D" i% [& K* L, Y- D5 U还有其他函数,大家在实际中运用吧。% S9 e+ E- x- e( X! q: J
- void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平. E' T" j; T# Y I% \) R% C& H
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平
k( ]& x# w _9 U/ G! D' l
复制代码
( E. _ Y! B" K4 K
; l* ?5 X" ]1 E4 U* l- }* { |