新建CubeMX工程
, c' [4 _ w9 n这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。3 ^ P4 Y# ]" G9 c' b8 Y# S# Y
, v8 ~ d5 u- d! S
打开SWD调试接口
- u% ?- p! i9 }: _0 V在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)
: r! R9 s* @/ Y: i& f* b% h) q
4 f3 l6 \' L1 r' s- @8 g" R1 y: n$ r/ u
. ]- s! m; Z9 A" [
3 }5 w) p/ }3 ^3 T
4 R, x' y( w* w/ ^; @: x, t配置引脚属性
) k. f" E" b, h% t% b; WGPIO output level:默认输出电平。Hight和Low
* ^& ?& R! J; g
" _3 y: R& e) ~4 A- P5 ^GPIO mode :设置引脚输出模式。有推挽和开漏& _9 b" s! b B; @6 d
4 J1 W9 t1 ?. Z" F% AGPIO Pull-up/Pull-down:设置上下拉。- I1 F# _7 r+ }, {/ Q7 J
3 `0 z2 f- @. x6 O* v5 ?% |- {Maximum output speed:设置引脚速度。有四个等级。
4 [1 F0 ^ L! d: B* d; @/ _9 ?
( n, h' K; L! W+ SUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。7 w7 {$ D5 L' l9 g5 I6 J
v: h$ j" Z4 O9 t3 w' C
0 I! z% P4 X( D7 O; \& [" I+ p$ {
生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。
9 p# K) W( e2 Y# U% D在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。# i0 E3 e: Z6 l8 @2 L+ ^9 ]0 Z
- while (1)
2 f3 d/ W: O [+ K& O - {
; p- [% C7 m* s. o* G - /* USER CODE END WHILE */0 `) e: T! P: x: s
- , ~+ s8 g! B/ A5 G) J, p
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
, g* r( @( T! D% I1 f6 K - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
# G( m" X, ` h# `# Q# J1 Q - HAL_Delay(2000); //延时2秒0 _9 }9 U7 }: N. }1 b
- }. l% ]& h( d+ F6 n7 f' ^ ]. t
- /* USER CODE END 3 */
复制代码 . I" h3 r4 J# y# Y
编译后,下载烧录到板子中。
2 h0 I% A! C. A有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。6 d8 R4 P5 V6 P$ v* y
; I; p& U4 D$ [% P: pGPIO HAL库函数 c" C6 N( r# K7 v1 j7 i) s
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
# h8 [+ I6 Z+ ]$ `/ ~$ R+ A GPIO_TypeDef *GPIOx:GPIOA,B,C...) _2 w% M m. Q
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15
" W3 d4 P. V9 ?- A3 q# FGPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)/ n. Z2 N: H# \6 L+ \6 H2 o! a2 b
- while (1)( ]* `6 Q: _" ~' T) F4 r
- {' _1 c2 x: }) ~" x
- /* USER CODE END WHILE */, u" m5 \( f4 L- r
- 5 ^5 q; k- `( B7 G' L' g7 Y
- /* USER CODE BEGIN 3 */
+ u u' m; P: A- Y5 O2 ?( Q - HAL_Delay(1000);/ b8 R( _: v4 t& N7 `
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟 H" q! w% v/ }8 ]# b4 \
- HAL_Delay(2000);
+ r" F' y1 _/ l' l2 d - HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟$ \; \' G- }# {5 ~$ u6 ~/ g' e
- }
- g0 v6 v! C- z8 A3 W - /* USER CODE END 3 */
* l: y8 G$ O% b v C - }
复制代码
. X( w, P: M; r8 YGPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平6 t; ?+ \: B2 A* h
2 m K, v9 z7 w) |* _
GPIO_TypeDef *GPIOx:GPIOA,B,C...% I C, a2 I5 R9 L1 l5 i D
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15/ e7 W& ^: Z# w6 N
GPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平
/ r- S/ {# t, K+ u/ n还有其他函数,大家在实际中运用吧。
$ ^2 j( k1 _/ \- H- X8 N! M - void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平. y5 J. A4 X) t
- HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平5 _4 @" h, d. Q0 h' M
复制代码 ) n; k. `3 [5 F1 B# A7 ]' u: A8 V
5 s0 _6 b; W2 Q) t3 p7 m |