新建CubeMX工程
8 t6 B1 Z0 W, C+ o. i$ g, R这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。
9 X2 @; A, H* y3 X! Z; l3 m/ T7 V, i
打开SWD调试接口
0 h3 t! o8 |5 C8 m0 ?在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)+ t0 g9 d! o4 S; Y5 T# D
. Y5 @- B$ d, m: R1 `* \* Z. s7 e( g. p0 O# }! B9 u
5 a! }& i: b7 r( Y9 U/ ]: o x: [1 p) Z v+ \% u
5 _3 \# b4 ?* I+ |
配置引脚属性 4 G8 L4 }- X [5 o9 |' ^: {
GPIO output level:默认输出电平。Hight和Low
; n J6 |- X2 D+ Z9 h) Q$ d/ H% x% E. a* m8 f# t- v7 W: }3 T1 s% q
GPIO mode :设置引脚输出模式。有推挽和开漏4 v% v2 C* X& ?2 ?
3 i: y q: k. J8 h+ X* c" XGPIO Pull-up/Pull-down:设置上下拉。
. U. o' B6 M0 V7 ^# ]
) I: R3 [- `/ C5 Z$ N/ VMaximum output speed:设置引脚速度。有四个等级。
, U2 C s. w" I: Z. w" K6 d9 ~$ L* e# R# \5 i+ O" Y, p
User Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。
. a+ U8 f+ _) }/ O+ I& A
; p% { e. N6 q2 ]5 n1 _
; D0 |+ S2 A- u. Q" h8 }
T& X6 p( T! J3 ?- Z生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。' m$ a6 L# ?4 H2 @# N
在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。0 Z' H/ d- Y( N5 c: N) O
- while (1)8 z9 f* \, V& B, F1 v
- {
9 |) G6 \* R/ I - /* USER CODE END WHILE */1 E* r, U# s+ C
- . j/ M. b |( Y+ l* S- w
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
: D! U6 ~& S' i - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚& E& D" G6 C$ ]1 p$ K
- HAL_Delay(2000); //延时2秒
, H3 L/ F# F- l; i, W4 }8 I% v - }3 P Z+ T% C! e% }; E- M
- /* USER CODE END 3 */
复制代码 7 e% ^* N' r4 J6 Z4 F
编译后,下载烧录到板子中。4 q" S$ ?1 \/ A9 F2 \: M
有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。+ M/ A; I; y) W) z. `
4 K- `: b3 W& e, k7 d2 TGPIO HAL库函数) n2 i- g) w0 T9 r) o2 p
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码 & O) ]. V& U7 F8 l# [/ f: b) L
GPIO_TypeDef *GPIOx:GPIOA,B,C...
, v. X' A( B- ^6 x7 O1 }0 Vuint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15
6 j% a% F. M( rGPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)$ I- s2 ?! S6 ~- J
- while (1)6 E( n; k3 j, {! K3 z( |, z
- {
& A9 H% j* c8 F) A: S: `- h - /* USER CODE END WHILE */5 k: v$ V# ]" P! v
# x% r* F0 L( k- b- /* USER CODE BEGIN 3 */( C, L3 q1 L; @, @) r7 r
- HAL_Delay(1000);
+ C, |/ o: I u - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟
) {. q2 }/ @% ] - HAL_Delay(2000);
5 X h- X3 N% O |/ G0 N - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟
, I8 Y0 N$ k9 u6 k( u - }
! N& x- h" A+ { E - /* USER CODE END 3 */) c8 |# {( A" O5 q. b
- }
复制代码
; M1 e0 P2 p8 N+ u$ z0 Y8 g1 KGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平
( v {% r5 E" J
0 F1 q" f( @2 }( G) |2 O) Z GPIO_TypeDef *GPIOx:GPIOA,B,C...5 v Q8 n' \2 S( `; ^4 B5 }: J3 b
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15
7 a$ [% C4 j9 E- J8 wGPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
( [ Z* m% [# c3 C: ?还有其他函数,大家在实际中运用吧。
+ g: {) W# d4 n4 D4 u/ O, }5 {( v - void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平
9 m5 L4 V- n. }! B2 w: g - HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平
1 k" g& o6 O. C+ t# J O+ [8 m
复制代码
- n( o4 O2 e/ J+ k1 B+ M5 i' J
( a' Q7 a% C: ? |