硬件介绍6 j) Q. M5 l% o+ h0 H
STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码! O; R4 g, w; L) g7 f& Z
4 Z& j( h: i% z, C5 {( s6 Z. W' ?2 F9 X/ n3 h4 E2 B
( E, `7 C! r# ZSTM32CubeMX新建工程
3 g2 J3 V4 ~! L0 N3 p打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作
. _1 [/ e# E! }! w, q# j2 N* a j! t, ^
+ m/ c1 ~* M3 \* \" t0 Q+ _0 n: E( T0 U0 J% \! `4 d. x5 p
# R" z0 e: U7 q; b
" p1 c! G& X+ W
: S3 Q8 ?0 g2 f. U, `; m; O( v时钟配置
; X, v" p9 s* V0 n/ z' Z5 ^7 PSTM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可5 h5 o' X( e7 U: U' i+ V( o
2 n% n# N+ O6 G/ A; v8 ~
5 ^) [3 S) Q) ^( n! t. o
LED配置, T6 A) @% c! y8 E
原理图
. O/ I2 ^2 v3 H( F通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。8 K; D& z" P. _- G# C
) e. P/ o- p* j( X+ J8 w4 h
; J' I1 g. p ^8 C: }5 F5 s1 y$ y' T( s: Y2 R+ E I
CubeMX配置
7 D4 i- r6 y- I% n( }选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发
5 T5 W& T* _4 u, ]- #define LD4_Pin GPIO_PIN_5- @' G/ G. b9 A$ g# C9 S* p
- #define LD4_GPIO_Port GPIOA
复制代码 # N* R- O1 N+ C: `0 t
) u3 m: H0 ]3 r8 p2 c
* I% k6 Q. e' X7 g$ ~
P+ ?" t8 l' ~' w E! Y. \按键KEY配置; i/ p4 s$ ]4 W. F
原理图
; v' |" |) l! _, h& R5 ~9 K用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键
& X# c9 Z" t$ K. D" d9 M' v* n0 k, D
/ M1 X6 c. C S$ {; E6 b1 C! c- D( |. [
CubeMX配置
/ h7 l/ [# j( s: P: ~- V9 f选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断8 M* C0 A% k) j! N3 J! X! Z
* q& ]2 D, W, H& Y3 K) z: U. x
, u5 b& H. V! r- U, F- @+ C
# A. S0 s$ [% L
H/ @/ D4 K1 C. r& [3 ^% a: N' n
! ^* G9 ?. i; @! R! k: ~
生成工程- B7 t. C& V6 y5 G8 d
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5)
5 ?; ?( e- f3 M& v/ \' e5 _
7 Z% H* C9 T% X, m1 u+ M3 d3 i. [( H. C/ T" L1 N7 N' T
' H3 ]* V0 J$ P2 U进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可' z, [2 c- ]2 P6 ?( q3 Y" H! G
1 w+ S: R! K+ A2 T' f8 Z
0 r0 V0 o K$ m( x; L$ X s: S+ Z! [1 O! z# {7 o2 j1 a. E
添加用户代码6 |5 ?& E1 J" W; _8 q2 {9 s9 L
打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码, C0 H- H& y+ R/ N1 T
6 J! K# Q @* R) k2 \* q, L- _- /* USER CODE BEGIN 4 */
# d& Q/ G! W# `; T( V' E - void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin) 0 g5 B% A/ N* }' A h6 P8 a! u( C$ o
- {
; D) P% y' x( N1 W$ c0 }. o - /* PC13为按键,按下时检测到低电平触发 */0 M1 f% V/ Y4 c9 a( t4 `" L0 z
- if(GPIO_Pin == GPIO_PIN_13) + n8 ^4 T' {6 ^. U1 n* P# |. Z
- {
: Q L5 u" d" v7 P - /* 翻转LD4的电平,实现按键控制LED亮灭 */
& d6 e2 A- r Q$ [ - HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
. n4 r+ G7 L: E' }+ A - }% }5 |0 S2 c* R5 |
- }3 ^2 ~/ r" o; c+ X/ Z2 U; ]
- /* USER CODE END 4 */
复制代码
$ _$ l' o" n' }+ M实验现象& n4 @- G& [& t0 x& J* X6 C: Y) y6 |
编译、运行、下载后,现象如图9 O& W" q/ G) E* W) `
2 ]8 h. h8 B1 i
( L( K, _9 B4 G1 p
6 C$ S$ |. T# L6 J+ t4 ? |