硬件介绍: F- O- G& [- d8 s W1 N+ C* w, f
STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码
* o, U* @# @9 u2 M9 H4 k5 ?$ d
. I: a+ u; J" V; F0 Y, }) u' D
1 |$ T/ j, A0 mSTM32CubeMX新建工程% [: a6 @1 B0 d0 Z
打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作
& ?' @2 \" t- g6 k& y& [* ~/ ~/ j$ l ~( C5 J" a8 E; Y
$ j' G8 U1 U. B( f- {/ L8 O! |
' p5 \. S: Y+ x! d2 `' i) G$ I* O& x0 k8 R
7 e! H% A, b! d) W
时钟配置
: I6 t9 t+ O' K, @' {4 c! c9 mSTM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可
! @$ @0 R2 O6 u4 f
, ]3 e$ X* n* b+ m" [
; ^1 _1 d: W5 d" XLED配置
3 q) W( j: K8 ^" I+ E7 I原理图
" d! t. C5 j O: R1 j; ]( ^. ?通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。
# p& F$ j$ [3 u9 l, O! }( A2 [# O. d* Z8 C
6 O2 R+ e6 y& i% _. R
! w9 | w$ y r' hCubeMX配置- H+ ]) n% S, i& H- T. `# p
选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发6 G3 X% x; ?- |1 p1 s5 M
- #define LD4_Pin GPIO_PIN_5 R5 E2 _) o% O7 I# ^% _
- #define LD4_GPIO_Port GPIOA
复制代码
+ N9 b( S& Z9 h# @7 A' U% F/ T
3 |/ y, T( M# T
- m+ `; X* I O d L8 P$ P
* K% \8 v+ i/ s" c2 N/ i6 C按键KEY配置$ ]) `$ \: q+ ?" i/ J3 z
原理图
6 M/ Q' [: |. Z* ]% i: G1 r用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键4 y) |( U5 \# c# R7 R+ O' [
, k3 W2 t1 f+ N8 }" j0 E# c4 i. }/ c0 @ S, s# @% W
0 U# c& e- ]8 k: V7 W
CubeMX配置7 H- k6 i; u, L0 P3 D# d- k
选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断; }% D0 w8 X6 M
6 y/ E. z. m) C2 \/ r" L$ D
7 ~/ n4 m5 Y: ]9 L2 e, D" y" L0 J- v) n( Y$ y) K
0 `" t0 S2 U+ Y/ E
: y, U/ H' F) A4 R& L. [生成工程" @$ d. `0 f+ m! A) N$ O* n
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5)
, V" g% l% {: X" R1 D# n8 j! ^: Y5 y9 F" A' q; _1 q5 C
3 v% j7 E9 J& i
! P+ C$ V# D9 G& w( e进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可0 }! J, Z2 K" M
k& M4 Z0 y2 d/ n+ L7 m/ S
& M+ E' H, ~$ w. W
( x/ F6 V% k/ H# }( `添加用户代码
. R8 m7 ]& B: p. v打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码' E$ h# {- c9 n1 M3 d6 A* ?6 \
* [2 W. o b8 h& E6 z4 G, C* Q% u- /* USER CODE BEGIN 4 *// Y$ n0 n* Q6 B6 i
- void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
- D& Z9 }/ m: n% w3 i, b4 j - {% V- a6 t' j& m: p
- /* PC13为按键,按下时检测到低电平触发 */, ]) z% Z9 q5 A7 k! ]2 k
- if(GPIO_Pin == GPIO_PIN_13)
8 {% W5 C/ X5 Y7 |* l - {1 C/ G0 x, Y) p, }( u8 {4 F, R
- /* 翻转LD4的电平,实现按键控制LED亮灭 */' d. B6 I. w; v; z) Y
- HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);+ b% S+ V" G8 T ^5 I1 _8 L$ Z9 k
- }5 w1 s. n7 d! |2 @9 H6 H: O
- }
3 s7 j+ E1 E! {/ e5 Y5 w8 a - /* USER CODE END 4 */
复制代码 3 P+ z* C- H/ C+ h+ D# I. P- z/ R) F7 C
实验现象
, g$ W# b8 R8 U s3 V7 W0 i: u" d编译、运行、下载后,现象如图
9 P n9 c/ p. K Q; J! w3 ^5 X7 L( c
& Z/ j5 l% X1 k& Q$ q! U$ d8 `. @! V9 k0 p
; Y. F6 ~1 c# Y( _. y: q
|