新建CubeMX工程9 J3 p% C d9 Z9 e
这片文章中,我们使用芯片自带的HSI时钟,所以不需要配置时钟树,使用默认频率(16MHz),以便理解步骤。
- z% B8 @- e/ s& R' R. y- ?
3 M. R+ Q6 Y" L4 g& d! l9 _4 }2 g打开SWD调试接口
! Q7 ?* c9 F' h- N4 D% s4 M7 ?. T在引脚视图中,点击PC6,选择"GPIO_Output"。在配置页中选择GPIO-PC6。(LED灯是接到PC6引脚的)
4 F- ^& c0 v4 z
( ]' }) u$ Z4 c% `9 e& {' w7 P5 T
+ S/ e. K- v8 U' S, c% q
) }: ?3 Z: G. y, [9 B% v) ~$ K, ?
/ [9 S* w) v) h: w! `# u" F b
配置引脚属性
1 T& L$ [* q& E* b& G' wGPIO output level:默认输出电平。Hight和Low
% u) s6 w' N0 X! ~: T/ |* V3 l F. y/ N& a# J! Y4 o s
GPIO mode :设置引脚输出模式。有推挽和开漏
- A. w+ P$ A [' [, S7 T
5 j7 B1 ^# L) h6 Z; r9 DGPIO Pull-up/Pull-down:设置上下拉。
+ G* p2 z* h. N* b9 q9 y. x1 x5 v
Maximum output speed:设置引脚速度。有四个等级。, z+ r5 z3 y. d l0 O. j. P
( E r% K/ i2 M& y$ j lUser Label:设置用户标签。相当于自己命名引脚。比如设置LED6,在MDK软件里LED6_Pin,就是这个引脚。自定义引脚格式为*_Pin。
4 h! `5 o* Z% w3 C9 \9 [$ Q! E1 K, W% o5 w/ R# k- _; ~
/ s& h/ d! n# l/ b5 O
8 X. |, w% b# z生成代码后,使用MDK软件工程,在魔术棒-debug选项卡中勾上"Rest and Run"。. l5 L5 F8 W/ Y" x4 b6 r
在Application/User目录下,打开main.c文件。找到while(1)函数,写入下面两句代码。" ?: S! k1 d. w2 k, T$ C! c$ C3 U" L1 }
- while (1)+ X5 _. Q9 g$ @% b
- {6 y6 ^% y K+ i, m* H4 R: x# L T
- /* USER CODE END WHILE */1 r8 o! V0 G" i% c; x, |# R$ o
- 9 B# \4 i$ Y! k# L9 d
- /* USER CODE BEGIN 3*/ //在BEGIN与END之间添加代码。重新生成工程就不会删掉
- \8 M w1 }: w- l& ~ - HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_6); //翻转IO引脚
; L$ `) m2 }$ e - HAL_Delay(2000); //延时2秒
+ l& c. Y4 d) K* S% I% f! T* e - }
' [0 I9 F% |$ ^& K1 ?4 F* \) B0 j - /* USER CODE END 3 */
复制代码
- ]+ r/ ]/ N, y! Y编译后,下载烧录到板子中。
' \2 V9 T% |% l; ^; m/ z$ p有人想我不想有规律的闪动,或者常亮呢,该用什么命令呢?就用到一下命令。
1 v2 t, _5 l5 f
* [$ V5 P' t8 p" {) SGPIO HAL库函数9 V3 W$ j6 c. X# M7 X9 _( l% l
- void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); //设置引脚函数
复制代码
4 ^4 Q% G; l3 \- R8 U; k# | GPIO_TypeDef *GPIOx:GPIOA,B,C...
9 {( q7 I, \( X3 J: M( cuint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN15/ ?, p/ p3 Y2 E. G
GPIO_PinState PinState:GPIO_PIN_RESET(低电平),GPIO_PIN_SET(高电平)$ ~# Y# Y7 e# y
- while (1)4 f" X, m% i6 D8 ]# `7 B4 j" h
- {
; Z8 r$ l! C' {( N - /* USER CODE END WHILE */
8 f, @7 u. u, }) r w" s/ i - : v( l# D" y1 ?& f9 @
- /* USER CODE BEGIN 3 */' [& i. `4 x4 u9 v% `) `% i5 H1 G, G
- HAL_Delay(1000);2 w9 h! n @5 M( s5 T
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_RESET); //LED灯会亮两秒钟8 o, I5 E# w" j% w3 t/ v5 Z5 } K
- HAL_Delay(2000);- R/ S, y! W) ?( D8 z7 \! Y
- HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,GPIO_PIN_SET); //LED灯会灭一秒钟7 | R& c" r7 [5 G" h5 b
- }
0 @! ]6 u U1 E; B1 V' b3 k - /* USER CODE END 3 */# B$ h% l/ Z$ k' h+ j
- }
复制代码 4 B# }' Y! S! u( q A6 W: M; J
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //读取引脚电平
/ S2 C n a$ V% f
. J2 D6 N1 S* F9 l GPIO_TypeDef *GPIOx:GPIOA,B,C...1 r# i5 k2 r. A" h. @9 d" B
uint16_t GPIO_Pin:GPIO_PIN_0~GPIO_PIN_15% q J8 x3 ~: E3 Z' u3 E! H
GPIO_PinState返回值:GPIO_PIN_RESET=0代表低电平、GPIO_PIN_SET=1代表高电平: ?. C) J: t# u$ c, }
还有其他函数,大家在实际中运用吧。
0 c% f- [2 U9 o5 ^ - void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //翻转IO引脚电平
9 N5 y( j% z/ x5 z - HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); //锁定IO引脚电平
; {$ J& N# i* ^. w" Q
复制代码
2 g! k- Y/ o8 _5 }% _' N
6 l4 Q: ~0 K$ j6 v |