硬件介绍 p( C+ ?$ a" z
STM32 NUCLEO-G071RB 开发板,软硬件资源详见官网介绍,主要是参考用户手册和电路图,利用STM32CubeMX图形化配置工具生成工程文件,并编写用户代码3 o" {; [# e6 G' ^. ]& Y8 v
9 m8 Y: L- _9 ]2 D8 y
7 N2 g8 j) Z# N0 E" V
4 s9 w8 V. L. c# Y) l) {
STM32CubeMX新建工程
: T# E3 ]+ K- @0 M" q4 D* a/ A打开STM32CubeMX,安装所用MCU的工具包,再按图示步骤操作
9 F& S2 z8 y7 A: l8 J& F
?4 d. D: R/ `; V& n( R6 c( `! K3 S1 A5 N4 Q# ?2 s
+ i4 x: D* _# l2 _, ~; K+ e3 M9 U
7 T6 `7 E% V8 _$ R4 q
- l$ Y, t9 F' D& P' e% n& C时钟配置
7 b: p R2 `( n0 s+ X: i/ \STM32G0系列内嵌高精度(±1%)RC振荡时钟,无需外部时钟,且只需一对电源供电,直接将时钟树的HCLK配置为最大64MHz即可
% c& b- n" z" i0 R1 X% @2 Y3 Y+ T3 P0 E9 k# e9 \
& B+ }& R5 k& i+ `! s
LED配置! H0 P) V, [. a4 w6 T1 [7 P5 O
原理图: S, q( ^ j) {1 u. u( g% Z, Y! }
通过阅读用户手册和原理图可知,LD4为用户LED并且连接到STM32G070的PA5引脚,输出高电平时,LD4被点亮。
, c. R& S# p$ S- \; H+ Y2 d7 ]- R! Y; _8 z+ M" g/ L2 s n- e
) ~$ U P4 p! H ]' r
1 `5 j$ ^" E, S- F
CubeMX配置) J" B1 O* \9 y) o0 `' X
选择GPIO,点击PA5管脚,模式为GPIO_Output,User Label输入LD4,输入User Label的好处是在main.h中会生成如下定义,方便开发/ u" y2 Z6 I! E, H; x0 P
- #define LD4_Pin GPIO_PIN_5
7 n6 Y: w B" ~: E$ v4 N) Z - #define LD4_GPIO_Port GPIOA
复制代码 : {: @& i7 }. f M0 R
: L* |/ z- ]: ^# Z% S9 C* l+ _9 z' K n" _0 j, }) A; x8 {9 B
1 K: H! Y0 V0 V
按键KEY配置3 \7 f$ ]$ {5 z8 f
原理图0 y* p( V+ c, g* A0 }1 L/ F
用户按键B1通过上拉电阻R29钳位在高电平,当按键被按下时变为低电平,因此可以使用外部中断下降沿触发来检测按键2 z, @) u/ G4 F5 a8 Y$ ^
& B' r! [7 O3 n6 Q/ f, d" s4 _( s
- w: e: G% `9 \9 V4 v& a* G8 q$ G5 v8 q
CubeMX配置
3 @' {# R, s0 N. h) w选择右侧GPIO,引脚不好找可在搜索框搜索PC13,单击选择GPIO_EXTI13,GPIO模式配置为下降沿触发,最后使能外部中断
. N7 M* Y0 |' ?# I6 Y; x A; ]+ W+ w4 v
$ s/ m+ d4 \; o; y0 k" \* g% z! P, u" a& u: X
2 e0 H! D. }$ I6 z. K8 {
0 d' A1 K+ w( h! A& W生成工程( P+ v8 v. I# ~
进入Project Manager,点击右侧Project输入工程名,选择开发环境MDK ARM V5(即Keil 5)
1 v! z# k4 F" ~
4 g0 a+ u5 H& s2 p7 j2 J0 U% l1 b( J0 U0 p' _/ I
( T5 M0 O5 O* O. y" G- B; N" A- ]
进入Code Generator,勾选为外设配置生成单独的.c/.h文件,最后点击右上角的生成代码即可! H6 e4 i8 D$ ~5 } S; `7 t% s
5 {3 M& B T: A }) q3 E: m6 m
5 h; |! q5 M0 E7 }' x
& Y6 m: N8 F* Q添加用户代码
) K- W1 g* L% K1 f1 X9 \! o打开工程,在main.c中的/* USER CODE BEGIN 4 */之后输入以下代码
0 h- n# j# Q1 a1 a8 g2 ?
8 X' P; r. q: z1 o' x5 Q! U- /* USER CODE BEGIN 4 */1 c& L: h3 f2 {% s5 @
- void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
7 I {5 _& A6 t! Y7 r' v# v3 g - {
' ^ J. Y' a: A0 k/ S* Y - /* PC13为按键,按下时检测到低电平触发 */4 ?, L* E" O0 O! d g9 v7 s
- if(GPIO_Pin == GPIO_PIN_13) & ^' c) F! I* d+ [. j
- {
7 g1 V/ k( U$ }* k X' w4 o: t! g - /* 翻转LD4的电平,实现按键控制LED亮灭 */
4 g2 k$ R! g: H% E* z( l( G7 ` - HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
5 @' c# G1 {! I( [ - }/ B4 J8 r1 s$ J* s! T3 f! S2 W
- }1 x6 F( |" F5 ]/ V2 m
- /* USER CODE END 4 */
复制代码
8 x' W7 A; e( K' X. _实验现象
+ p3 _0 W# J) U" R* ]编译、运行、下载后,现象如图
' M7 m1 R# B3 f- Q) H5 _
" Z2 l8 ~2 Y6 L }7 t. L- i `* f2 L# O- H
* S* S1 ?' E3 T* }! n! @7 O7 W |