1.最小硬件系统- h' r1 q2 b7 A }$ W- l 让 STM32F030 运行起来非常简单,在硬件上仅需给数字电源和模拟电源引脚(VDD,VDDA)供电,最好分别加上去耦电容。推荐值: VDD引脚加 1个4.7uF并联几个0.1uF 电容,VDDA 引脚加 1个1uF并联 1个0.01uF电容。电容值大些小些,甚至不加,对调试都不会有太大影响。 需要注意的是 VDD 需要在2.4V和3.6V之间,VDDA需要大于等于VDD。当然我们最常见的用法是把VDD和VDDA都接到3.3V。 o! U5 i1 ~- I" |. y j/ ~* C; Z( z( ]; G1 k0 e VDD和VDDA之间用磁珠隔离一下,有助于提高模拟部分电路(ADC, RC震荡器,PLL等)的稳定性。+ [* U) O, e( T4 O4 X 如上图,是一个可以让单片机工作起来的最小硬件系统。Boot0 引脚需要下拉到地。注意电路中没有时钟,单片机使用的是内部自带的 RC时钟 HSI(High-speed internal (HSI) RC oscillator),频率是8MHz。这个时钟在出厂时会做校正,全温度范围内精度在5%左右。如果需要更高精度的时钟源,需要外加晶振,或直接把时钟输入至 OSC_IN引脚。 2.下载调试器+ w% r/ h2 i. V K ' c- @9 g$ D, |$ v6 f! A6 b 需要用带SWD调试接口的下载调试器,如 ST-LINK/V2,或 JLink。; h2 U" X$ M- f r: q 下面是标准的 20引脚 JTAG/SWD 接口。我们只需要用到其中的 5个引脚: 1 VAPP, 接目标板上MCU的电源引脚 VDD。它的作用是让调试器知道目标板电压是多高。 7 l9 ]4 N& J+ f 7 SWDIO, SWD 双向数据线。8 W- B! I, }( F4 j4 n) t, W. n 9 SWCLK, SWD 时钟线。+ `. j; @& g/ _- [9 j' h" i" ? 10 GND, 接目标板 GND。1 w5 T; b2 M, B, b 15 NRST, 复位引脚,接MCU的复位引脚。此引脚可以不接。* V I: k5 ^7 n2 o" R+ m 注1:ST-LINK/V2的4,6,8,10,12,14,16,18,20 都是GND。其它调试器请参考所用调试器的文档。 注2:有的调试器可以从 19脚 对外供电。如果调试器没有供电能力,或目标板功耗较大,需要对目标板独立供电。 ST-Link安装后可以在设备管理器找到: 1 k/ }* `7 _, c) x# J9 L3 I' } 3.Keil安装,官方代码的下载调试 - y% V: }/ r* r7 F/ A6 {$ L 从ST官方网站下载 Keil,和例程 STM32CubeF0。安装过程从略。$ }1 ~6 \3 j& R! G, {% ~7 ]& t. a 解压并用 Keil打开下面这个工程: \STM32Cube_FW_F0_V1.11.0\Projects\( I8 v! c5 @0 Z2 D . v7 i9 M% V' _! }3 B# }- N' f STM32F030R8-Nucleo\Examples\GPIO\GPIO_IOToggle\MDK-ARM\Project.uvprojx5 h% ?5 X4 f! h k2 B" \+ L 1 i: ~0 C) f2 S& ^' J 我们可能需要通过 工程目标选项(Options for Target),把调试器更改为实际使用的调试器:7 N9 f* `( e, Z7 f( v, V 8 q" ?- [0 N- }. m6 d! j1 ^3 H: O 7 R7 c0 e- P; o- K4 d! Y5 R) W1 } 之后 编译代码,下载代码。在左下角可以看到进度条:' d3 ~" d) s. ]7 X3 t2 n9 ]' d , c: {: I) ]/ y8 z 下载成功后,点击 调试代码 按钮,进入下面这个界面。可以看到寄存器窗口(Registers),调用栈窗口(Call Stack + Locals)。8 y- H7 F' R% L- C$ T; [% D ( F8 g1 g# f A 左上角有 复位,全速运行,停止,步入,单步,步出,运行到某行 等调试工具按钮。我们可以通过 View 这个菜单添加更多的窗口,比如 Watch Window, Memory Window, Disassembly Window 等。9 [. F4 X$ } T+ O2 I, ^+ w & T5 J: P+ }" E. M# i 5 Q7 m- l! ^3 O: e9 h 我们点击 全速运行(Run)按钮,如果用的是 NUCLEO-F030R8 开发板,可以观察到板子上一个 LED灯(连至MCU的 PA5引脚)不停地闪烁。0 x1 s1 a y; U1 g: B5 i# s4 K 在这里我们可以看到下载代码后程序默认停在 main( ) 这个主程序入口。但是如果我们试着点一下复位按钮(RST),会发现程序停在了一段汇编代码里: 那么究竟 MCU 从一上电到开始控制 LED 灯闪烁,都经历了些什么呢?我们会在接下来的文章里进一步探讨。 ! u% ~/ b p( p( q+ G 5 q. \8 Z- x4 x" L |