硬件介绍9 t2 Y3 l: e |( C
STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码( H S; b3 o/ L& V, r) X3 I) }
6 ?' X0 a0 ]6 j- k" l
I! e. W2 a" y: k6 B" Y
, \3 C X; \: ~( F3 H+ N; pSTM32CubeMX新建工程
. w7 ]; a K7 v6 w打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作/ G* y" P C0 Z. R/ v9 U. p8 n
# `9 w0 {- A6 L
6 Q" o h4 O O# ?2 V9 q0 M# Q# d6 Q& x, F
; k# S/ c, s. H7 n _4 [
~1 Q6 S4 D! C1 h, X
时钟配置! Q0 M0 k0 H- Y5 W4 b. s
STM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可
. r: Z4 G0 z; g: g
8 s+ U7 m; y, ?, |& F5 e: ?. S+ [
9 I: T1 A$ r% b3 x4 cLED配置
% X L% a5 B0 s1 l/ t3 }原理图
$ {0 R9 O _ f* s6 e通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。
1 @) H' }4 i+ \
( `4 X5 h, H+ A6 Z' ]( R4 }/ V, t% U# m" d5 ~. k
# m0 h9 S% m$ O) `; E# |( u
CubeMX配置
4 v( i: N. g) A3 t9 y- R选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发
* B: E" `7 ^- }8 H7 o- Q- L6 l$ M; V- #define LD4_Pin GPIO_PIN_5+ }( U. B* D! s) S4 T
- #define LD4_GPIO_Port GPIOA
复制代码 ! d q3 e! E2 ] K( l7 p4 V
* ~5 `" b( X! L7 B4 O! }/ s# c
) ~& i) h) e7 T% X W: q: p1 q- h; c5 \
按键KEY配置
+ B9 n- w2 K& _4 x* ?! |原理图; J9 X0 }0 d5 h7 V$ g8 S9 h
用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键' R! S/ X3 c) X6 ^' J4 l, [
2 \, k$ f2 G$ R* f
* c/ ~5 \" h# H# v% @
& d( Q! }0 a6 R4 sCubeMX配置
" r" w! _7 `5 D9 d2 ~ y+ f选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断
9 F7 U' s) ?; C2 I& `9 c
/ j# W. D, X6 f" F" A9 L ^9 T& V+ B, E4 h, c: |( R& K! b6 }$ b
3 h( A& A, e# q9 j; F( [
0 G9 M5 q) d$ ?
7 P: I/ ~! b$ M3 Q( k5 e生成工程& Y! Z; ?$ l7 n$ }9 L1 ]# H! e
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5) X( I7 W1 a3 ]. j
8 O; F# A% @, G6 L! ?. O
' ~) l, F2 _, @; }+ f' G1 s" D
. z# @" M$ y; @4 F& J3 f进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可
, O7 T( J$ \# `2 p7 A/ j7 @" d
3 _4 C( Z* P: }& |/ |5 h& u8 Q! S: W* K1 B/ ?$ u
6 f" x" H5 o4 Q- V' V% `1 k& P添加用户代码0 U2 d$ t) r' {9 }1 @. Z0 m
打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码6 u1 W. P) r- i! H
% S: c' n4 `: K8 m5 K- /* USER CODE BEGIN 4 */
) ~( s& L; e' z; M - void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
/ F) x3 n8 _4 ~* v! f, u% Q3 Z - {& P; J, K0 }4 N) p" g+ B- P
- /* PC13为按键,按下时检测到低电平触发 */
& z) w$ R5 Y; [( Z7 B+ i$ D - if(GPIO_Pin == GPIO_PIN_13) 3 I Y- d6 U+ b+ X6 A8 i \- c3 P
- {7 A- D& U: y* X1 h$ v3 f3 F
- /* 翻转LD4的电平,实现按键控制LED亮灭 */9 z L/ g9 N) J$ E
- HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);2 F$ ?1 q' p0 J6 l$ g/ c
- }6 y2 }* H; d4 g& j" q
- }! |: c+ c0 n& V
- /* USER CODE END 4 */
复制代码 K1 _' b7 L9 f5 X
实验现象
( @$ y2 L# F# A0 v编译、运行、下载后,现象如图
+ y0 {- w8 x' b( w% @3 m
. h" u* `! d' K7 q+ m, T4 f- M4 B0 k; u
# R4 E# O9 x" ?# P |