新建CubeMX工程
1 N) j6 h# |! i/ i2 V5 g: }这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。
* y; M i( G- S! f
' a# Q% [- l2 U% j5 J5 e- ]打开SWD调试接口
/ j7 Z H# X2 s% p& y0 t在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)1 w. V2 B4 ^1 b$ v
; g& m" K2 ?8 V, U! Y) u* L# h6 l" \
# `, w/ |7 ?) i4 \3 r. }8 X+ r
9 D: X; c; R3 s% j# ?5 C
, L" v2 y6 U4 O* B7 V
" [/ _) T, p, n G) L9 a配置引脚属性
) `7 v! l: L ^) M, L, NGPIO output level:默认输出电平。Hight和Low$ a6 C5 Z/ ?/ j
% z3 B1 A z3 _) b/ a2 H
GPIO mode :设置引脚输出模式。有推挽和开漏
* r/ u: q& h8 m+ _
O9 I. ?! X: y0 k d) VGPIO Pull-up/Pull-down:设置上下拉。
! G: G; k* M0 s" f5 }8 E; m+ e8 B
; D' b( K a' Z" c& Z# \4 MMaximum output speed:设置引脚速度。有四个等级。
$ \( t% h. I/ a" C( E! H; L1 l. u3 ~; G# k
5 u& u* ~# Q/ ]9 `( V7 QUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。% W) t( m! K& \
' G* D6 w5 ^4 |4 Q; j% c, \! V1 T! Y5 q
4 X) D: N7 O1 P9 ^1 |( s
生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。
1 w- Y$ @6 i8 @+ R在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。$ F6 D& x) s5 j
- while (1)
6 W" T5 ]. p# v - {: c/ ~7 Y9 p- L% R r' Y
- /* USER CODE END WHILE */- Y7 U Z I4 J$ f6 Q6 a1 `
- + h8 @5 A) j2 D7 b( |2 p( H
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉! J( O$ B) l" K3 C0 j( o c
- HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
+ }+ t1 m2 Y( m- o+ z; u ]7 u - HAL_Delay(2000); //延时2秒
( W+ D, j- @- D6 b8 L - }
) t7 o2 A9 K+ }( J3 y9 H/ b5 k. |/ X - /* USER CODE END 3 */
复制代码
4 ~, N# L) S7 F# I! h$ D& n, O编译后,下载烧录到板子中。2 T, Q# N2 L d) o3 h
有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。
* P- W5 |! c* {
+ [# A: o* ^, i& H; x& q% GGPIO HAL库函数; z& @0 u/ K6 {" r9 J$ p
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
9 Y9 D- J3 r4 Q) E1 i GPIO_TypeDef *GPIOx:GPIOA,B,C...; d. }" N: p/ a, I
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15+ I# M W3 k) S4 i9 R
GPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)$ R! c5 S. I1 A( C* a! \
- while (1)# x* G# @6 ?% D' \3 {8 }8 D
- {
- j+ Y. F, |% k ]7 t. u - /* USER CODE END WHILE */5 [, ^# H! _1 i& e+ h1 a* H
; R2 Y% g Q5 A; l+ y- /* USER CODE BEGIN 3 */& b2 l" P1 u* m) Q" a$ ^) L- e
- HAL_Delay(1000);! M X1 G' E0 Z. u
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟3 c2 L% P: y0 ]
- HAL_Delay(2000);* S" |0 v8 j& Q2 O& v7 x7 b7 P8 y
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟5 l5 g% E5 M7 ?3 c0 a) b1 V
- }. @1 v; t! W0 H# \
- /* USER CODE END 3 */
# D5 ~& g% h$ m - }
复制代码 ' e7 K1 t7 U7 H3 w3 t" ]
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平
1 g1 ^3 f& X! T
" ^5 Q( M1 ?8 k" A GPIO_TypeDef *GPIOx:GPIOA,B,C...
9 ?0 G4 Z% I" Puint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15
/ ? a4 u" j1 X! |& YGPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平& w( I* w+ W/ c& B+ _5 A1 H: D
还有其他函数,大家在实际中运用吧。6 B8 J3 f, M9 k1 h8 _9 l" Y& d. K
- void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平6 C6 f( P% w. D- I& X) l- o1 [% o
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平
7 V0 D: n3 c+ E" _& F5 f8 f9 r# k
复制代码 : _) p6 U0 G" V7 [3 G' [
6 h8 P K( z! k }0 | |