硬件介绍
- C) M3 p d" J. o" @3 C" n/ tSTM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码
, `8 ?- C* J' x1 Q+ j
$ U8 O6 e }3 h) a5 }; W/ X: L
# D! v) a8 b1 X3 \$ ^
/ b% p) D1 T* }3 }& K2 A9 wSTM32CubeMX新建工程
' I/ Z9 \# j- G6 P9 Z打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作% O v, [+ E% e/ m+ Z# s. ?4 f. Y; t6 T
6 B) }" Z7 N( r4 u8 h$ L- N M
# b0 Y$ U3 l! c) C0 e/ S8 M. F% `
' T) s% z$ d/ s$ P, |
; p; W) J4 ]. `. {/ D0 I7 j+ W! K$ M _8 Q
时钟配置& d+ Y* H9 K2 B( ]
STM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可
8 ]* l$ I% N, W. C+ P2 A9 k: c p
/ A4 g0 j0 O% E" N) C2 p
LED配置
& d/ H( D: G. d3 }0 f. h4 B# }; T, K9 m原理图7 |! w8 h% H5 M
通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。
1 H% _* `; y$ a% `0 n# H. n: P. a7 M) ~* \7 L4 Q7 a3 Y: g$ _: z Z
5 d. O# R3 |* y- e0 h% t! @* n$ G* w
CubeMX配置
% ^3 b" J9 _9 k% b s0 A. D选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发
! u5 z" V0 `2 k$ O+ C$ L2 C0 k9 V- #define LD4_Pin GPIO_PIN_5( P6 }( V* o- j/ P, _9 S
- #define LD4_GPIO_Port GPIOA
复制代码 9 t8 T$ ?& N# w1 t* t5 \
* W3 k8 V- ~8 ^6 x
2 J$ W) y2 w; N/ q- ^: n# T
8 p. C/ c& V; h* K2 H. |; |, u8 U( @按键KEY配置! D0 x8 C3 L" ^. S5 a
原理图
& ?& a. c% X( e' c用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键4 @ C; ], M% p+ C
3 _% V% O) f6 u
* e G8 v: M2 q1 m$ B" l- L0 e6 a' ]4 Z* D' O3 o7 ?
CubeMX配置
6 E7 x# N1 G% A3 J" l" W选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断
) h! L- V: H1 \. X: ]$ x I
{3 n- I5 x* X5 q+ q/ B
- B" {, V ?) A5 h6 {; B3 d& n& l+ i; w
& @/ ?8 u n d( ]- X R: U# H
7 x4 b$ a3 _+ j, N0 {' q! M+ v生成工程, z$ e% b8 Z( `) R
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5)$ R) ^4 l2 b9 h+ B g4 @- ?
# t& h- D' I" u R) U: C9 j
* Y. i0 \+ B+ B5 ~+ e6 o' m
5 |* B+ B; i2 H# A进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可
- e5 {* D+ b. s8 u% P( T! a4 L) T6 a3 j2 ~0 g& x& {- G) R7 Z
1 y- L: ~0 h3 e& z( d
3 {3 Z" j' ^" p8 T添加用户代码
+ D( _3 \/ q* r2 @/ [; ]" n+ g: B打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码6 E# e& D6 U! Q I
- {9 T; E& m3 x: }7 d C0 N
- /* USER CODE BEGIN 4 */
$ e& d7 w1 u9 J( a$ Z6 L' D$ o - void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin) , u- }& g" h' t1 t% n
- {8 ]2 |: [6 [) r S% i- G2 g! F
- /* PC13为按键,按下时检测到低电平触发 */& V& r1 i. G7 Y5 S5 }# G
- if(GPIO_Pin == GPIO_PIN_13)
; f2 w0 s( h5 y7 h# F1 x+ W2 x - {
0 P. i7 `, u1 a$ t3 Y2 `: R% n - /* 翻转LD4的电平,实现按键控制LED亮灭 */6 T t2 X$ H" y
- HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);/ T) \* `; E1 U1 d
- }
# V( C0 r9 v+ v' o, J4 Y9 `$ | - }
# t. ~+ g4 L( S) M4 ~6 A - /* USER CODE END 4 */
复制代码 1 Z. c; I& q0 F' F
实验现象7 D# _0 ?3 `4 o n, u; o% C
编译、运行、下载后,现象如图
3 |1 f! z2 Y) _" F( A$ b& [3 Y a9 I4 O3 ~9 L, n
\& U, ?& K0 D2 i! F8 O7 |
* j4 b% L+ d$ g4 D- T
|