硬件介绍9 A4 n& Y; H$ ?7 {8 e r
STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码' N% P, z6 S6 {
# W9 u+ n, B9 ?& A) H1 T
0 u6 }3 g0 s$ y1 Q; u
6 Y v4 f1 S- D: o d5 _STM32CubeMX新建工程
0 l" o- j2 [* Y* i8 G打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作# h9 }+ ]2 g0 ^: A/ Q4 r( E
$ V/ [3 g/ D2 D# A* c1 ?" C& s
! v5 q8 e+ Y! W* Z$ ~# R; n1 r) q4 }, s8 {$ q i4 w
) `7 x* O; d; s4 T2 S+ d- @* c, O
! o2 E+ l) I: j2 h$ d3 ?% O0 s时钟配置
7 X" b K( s: O6 HSTM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可
, o$ w& S) b) L7 E# Q
: j# o& T( ~6 n9 T" x: ~" f: U; V! e- I, N n% F) X
LED配置
7 o" W$ h3 _0 h F1 E' ~( e/ Z i原理图- v. Z5 R9 B3 L
通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。7 t3 k5 x2 w& `4 D/ k8 Q# W
5 u- P* O4 O. g, m
6 ~ A) }, a- |( U
& I$ o/ ]( H4 M' a4 w& MCubeMX配置6 T* Z* [1 K0 ^# i% d& Q) ~& v' V
选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发
$ o( B1 {9 { w- #define LD4_Pin GPIO_PIN_5
+ H! \4 ^/ f0 C7 O% ] - #define LD4_GPIO_Port GPIOA
复制代码 $ v5 }" K7 v- N" W
. M5 Y! H0 x2 [1 ^& n" W9 o
& F0 Q! j. G5 ~% m7 T( [
: e }) a5 m m; {按键KEY配置
( q/ D7 O' D' a+ X原理图2 S3 h. D: T M+ l+ I {6 M
用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键
$ i0 \) i. I2 Y- c7 H) B" F
; n5 X6 B$ [" J% m$ f+ i+ t( e, w9 A5 H1 d* p% C
; D' s% f3 V6 W0 r
CubeMX配置) X6 F2 g; w8 s) \9 m* w* W
选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断
- T1 ^( z( x2 N& n! R. l
6 {8 h* o# Q1 {7 c# c$ N$ X! Z9 J. e
5 y# |; Y; B+ V$ D5 F8 f' R7 q4 ]" G9 w. R; ?! Y
: i- v! N% h+ m9 R% T5 V& I1 }1 ?& c0 |4 E7 F$ } x# \" @4 r+ k
生成工程, L" E: q) O4 e# C6 E- L
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5); y* i* |* c6 c: o" o
! V: i4 U0 P- ^# w2 i1 |4 Y
; n0 V- m; o% p T( L2 W: {2 _8 ^& g
! C. T0 r6 t( Z5 x/ }. |- l4 V进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可3 M! ?/ }# }, o; p! |6 H3 R
7 Q/ Q) f+ Z; P9 W
* i/ v7 [6 V) M9 O, o1 h. E
{3 o$ W4 V# P7 C% y5 v添加用户代码
; G# f0 v+ I3 d$ V# E8 r6 P! P" Y打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码- C$ h2 T0 H; s
9 H. S* E$ ^! m( S1 R* b5 S% Z
- /* USER CODE BEGIN 4 */
# u* z$ K/ w3 e3 c( v8 z# W8 B - void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin) + `2 M2 Q7 V7 o5 M
- {" m# ]8 o% Z2 J& M" L% |( Q
- /* PC13为按键,按下时检测到低电平触发 */( Z9 }0 `# O9 R* B4 s! F
- if(GPIO_Pin == GPIO_PIN_13)
3 X/ q6 t1 S' }! R0 V0 w+ g- B - {
: [# _# z/ Y: y* M# ` - /* 翻转LD4的电平,实现按键控制LED亮灭 */5 M, ~% l& T! S: [" l- B
- HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
# l7 r7 t: t3 I0 b% b3 t% } - }6 w* e7 E1 u# o8 u9 e/ Q, o5 z
- }
) F' C( G4 z/ W9 _# @% e - /* USER CODE END 4 */
复制代码
) B ^: A- n, n/ @实验现象, C2 y2 l( X- T; Q2 {, Z2 G% ]" x! {
编译、运行、下载后,现象如图7 ~7 Y* Y4 e8 m5 ~
2 I- \0 Z, n4 Q& m7 P4 V3 M. s
5 t) g" _& k: Q" r" S5 g2 j# G, [: U! f
|