新建CubeMX工程! K; H, L2 u7 w8 a+ _
这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。% X8 z9 H6 w4 h G, }( J
' j6 d* Q3 s8 y2 B- c
打开SWD调试接口
! }4 d# r) P; Z$ Z* |+ S在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)- J% t* ?; o6 X7 ?3 b
; T+ M1 j7 d$ V
; e. a: h% @$ T2 Q4 X- D- E' _& c8 ^1 Q- I$ D6 f
- g2 h" j; k& k0 Q; Q8 G x
& C9 N" G, s' j配置引脚属性
, M% L7 `( s9 L. u0 \% _1 hGPIO output level:默认输出电平。Hight和Low
3 p5 {/ l# O" Q8 ?6 K* s) `$ d9 w# _- q
GPIO mode :设置引脚输出模式。有推挽和开漏
0 j7 w8 R J. g( o0 Q4 \, M/ {! e( `5 H( c9 H' N1 i
GPIO Pull-up/Pull-down:设置上下拉。
6 D7 o5 R' Y8 L# N h, {+ n+ w* y6 Y1 U0 I& C
Maximum output speed:设置引脚速度。有四个等级。
2 T8 a% A! T! r D% M& ?% p- H* M% W8 e7 f' J) p, J+ N
User Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。5 L; y; ~9 ~8 L* o. I
, O, k* \. U6 K. T
2 U" Y. {; H( L' ?0 G; n# C
: r+ S- W) h5 b生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。; B2 o \# s6 z3 X0 L/ U
在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。8 G0 U1 u$ |- Y% A% O( ~
- while (1)$ D, @7 Z) g% }0 O
- {0 Y/ B) u) b1 [9 L S6 r
- /* USER CODE END WHILE */
! Z( _3 F+ k+ w - 3 D; E. v( b1 }9 E0 F8 g. S* D
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
- `" b" f1 t1 X' c - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
+ ?+ ]1 F) Y( w$ ?8 W' V - HAL_Delay(2000); //延时2秒
# q% X7 Y2 M$ v' A6 m& \ - }1 |: Q! p9 h/ a, p' D
- /* USER CODE END 3 */
复制代码 9 F# F& G7 a6 s$ h% I' p
编译后,下载烧录到板子中。
0 W Q! c: y5 M有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。/ W/ Y/ T" Y4 _! Q
+ J7 B2 U* E. ^6 f* u" FGPIO HAL库函数! B: D A' v0 Y' i2 H0 N" ^) ]* Z
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
4 }! M8 v i8 z9 r+ _9 Z, \ GPIO_TypeDef *GPIOx:GPIOA,B,C...
' A6 _5 n6 E1 a9 Y0 |+ uuint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN159 ^+ _6 N( e7 @! [* d
GPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平), }6 f$ N# @7 H
- while (1)
2 q# T1 D) B3 H - {
% Q$ `1 t% ~4 m+ r# S( ?% w - /* USER CODE END WHILE */& E7 {: ^! Y& W7 }( D
6 u r& j2 r' y9 [( O' ]- /* USER CODE BEGIN 3 */
6 |# i8 B' ~1 J( o" w - HAL_Delay(1000); m% ^! I* n" ], ~; M" e% ^, ]
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟6 m) \0 P3 t; j$ Y
- HAL_Delay(2000);; E' e& x$ o- k' {
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟7 }; J* ~4 n" W% Q
- }" ^& X+ j+ z+ }' W! c
- /* USER CODE END 3 */
4 j v5 e2 [: N N7 N - }
复制代码 ; u# v& Z2 i/ l: Y- S
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平0 N' p) Y9 B' g) C1 u. e g
. V5 ^! K/ C1 d2 J" j
GPIO_TypeDef *GPIOx:GPIOA,B,C...
& j; y8 j- X$ K% M7 I3 p' H! Huint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15
8 {( A! t. R, y! D h* oGPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平$ a1 v$ `& M/ H. j4 L6 K' m$ ?
还有其他函数,大家在实际中运用吧。% k) E# M+ s& v5 B2 V6 r. s
- void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平2 a8 s5 U* S: q, d) ]
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平+ U p8 R) i1 q4 v# i* u. [3 f3 G2 A
复制代码 $ R& x+ ?0 e1 Z2 \1 G9 b0 C0 p
3 @7 w" x- f9 Z. S3 j |