
1.1 资料下载和介绍' a i- ~0 J- U0 N( r+ o# K( D+ U 1.2 原厂资料的下载 前面“2_原厂资料”文件夹包含了本小结所介绍下载的资料。本块内容单独提炼出来讲解,是希望“授人以鱼不如授人以渔”,让读者明白这些资料该从何处下载,以后实际开发,换成了其它MCU,方法也基本一致,也能自己下载这些关键资料。2 r( g/ K) E, Y x 对于几乎所有的MCU,都会有数据手册和参考手册,这两个手册必须下载。 对于STM32系列的MCU,通常还会有Cortex-M3/M4编程手册,闪存编程手册、勘误手册、原厂固件包示例源码、原厂固件包用户手册、HAL库用户手册等,这些资料根据需求下载。 , c8 X5 j0 d) J1 C- R 对于Cortex-M3/M4架构的的MCU,如果需要深入了解Cortex-M3/M4内核,还需要Cortex-M3/M4权威指南,这个供读者深入学习。 2 A6 O( E% x" |+ m- W 首先打开ST官网,在搜索框里直接输入“STM32F103C8”,点击“Search”,如图 4.2.1 所示。注意,ST官网在不断优化,本手册截图基于当前页面示意,读者根据页面举一反三,灵活变通。- N6 p7 l9 l' |, O- d4 ]5 ]1 [ ![]() ' h5 B# Q2 C! A: c& I3 u$ l 图 4.2.1 输入所需MCU 随后显示该搜索条件匹配的产品,如图 4.2.2 所示,可以看到只有一款产品符合搜索条件,点击该产品进入详细信息。, r C: B, J/ A+ R* P, n2 x ![]() 1 g, c7 B K. r; W4 X4 R" p% X 图 4.2.2 搜索结果 在产品详细页,切换到“Documentation”标签,可以看到该产品的所有文档手册,如图 4.2.3 所示为部分截图。 p# o7 y9 g( j- F; w “Product Specifications”(产品规格):也就是数据手册,包含该系列MCU的整体描述、引脚描述、内存映射、电气特性、封装信息、订购信息等。在芯片选型、原理图设计、PCB设计、代码编程等开发环节,都会需要该文档;7 m; S( T5 m! M# T7 R* P1 n “Reference Manuals”(参考手册):包含该系列MCU各外设寄存器的详细描述,在代码编程时,需要找到对应外设章节,仔细阅读; $ s, v: @/ M# W4 Q “Programming Manuals”(编程手册):包含闪存编程手册和Cortex-M3内核编程手册,一些资源是在内核里的,比如NVIC和SysTick,此时在参考手册里找不到相关寄存器信息,就需要在Cortex-M3内核编程手册里查找; $ O' E* o% a" q: G \& f+ W3 |/ H “Errata Sheets”(勘误手册):包含该MCU内核、外设资源的限制,解决方案等,在调试中出现了bug,可以看看该手册是否有类似记录;+ Q: C" X* u: i, g* y; s7 |( `$ ~ 7 s% ^% e) U& j ![]() 图 4.2.3 STM32F103C8系列原厂文档(部分截图) 除了这些文档外,通常半导体芯片制造厂还会为MCU提供一些示例程序,ST也不例外。在前面的产品详细页,切换到“Tools & Software”标签,可以看到该产品的所有工具软件,比如各种硬件开发工具、软件开发工具、元件模块、评估工具软件、MCU/MPU嵌入式软件、产品评估工具、解决方案评估工具、工程服务、培训课程等,如图 4.2.4 所示为部分截图。 ![]() 0 J; r P+ i# W3 W G. k+ e 图 4.2.4 STM32F103C8系列原厂工具软件(部分截图) 7 [3 E3 A1 ]9 T1 f6 W1 `; u4 A+ T" D& }8 P# f! C4 A0 E$ r “Software Development Tools”下圈出来的几个工具后续会用到,这里先跳过。“MCU & MPU Embedded Software”下的“STM32CubeF1”就是包含示例的固件包。点击该固件包,进入详细页面,在“Overview”标签栏下,点击“Get Software”可以分别进入固件包、固件包补丁下载页面,如图 4.2.5 所示。 # x5 ?9 q1 u3 J1 P7 u" m" ] ![]() 9 C$ m- n4 ?; n 图 4.2.5 固件包下载 % c" w4 w" t6 E3 ?& t% z 随后会弹出许可协议“License Agreement”页面,点击“ACCEPT”表示接受,如图 4.2.6 所示。# B, N/ ]# ]6 u) Z% y ![]() , P# U4 V) A) u- G3 f& A A 图 4.2.6 许可协议页面 , ^6 e& v/ }; p3 _; Q [接着要求需要输入个人信息,如图 4.2.7所示。如果读者有账号,或者想注册一个账号方便以后下载,可以点击右上角“Login/Register”登陆/注册下载。如果读者不想注册,需要填写个人信息和邮箱,下载链接将发送到填写邮箱。6 b, o2 g ]' Z# s( q' ~ ![]() 图 4.2.7 填写个人信息 ST还提供该固件包的详细说明文档,切换到“Documentation”标签。在“User Manuals”下可以看到“UM1850”文件,该手册详细描述了STM32F1系列的HAL库和LL库API,非常重要,后续会用到。“UM1847”文件则是该固件包的详细说明文档。除此之外,还有介绍LwIP TCP/IP协议栈、RTOS、FatFs等文档,如图 4.2.8 所示,读者可根据需求参考。" M' w* k; w. @) m1 f1 a ![]() & [8 m! ]: ~: } 图 4.2.8 固件包相关文档 最后,再简单介绍下固件包所包含的内容,供读者参考,固件包内容结构如图 4.2.9 所示。“Documentation”:里面是本固件包的详细说明文档; * k+ g( m) \2 M# V' A: u “Drivers”:7 E( j% w7 S8 \, ]& U* L & L* m( L: _: c4 K$ u0 p “BSP”:板级支持包(Board Support Package),适配ST原厂的几个公板; “CMSIS”: Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard),包含STM32F1符合CMSIS标准的软件抽象层相关文件; “STM32F1xx_HAL_Driver”:ST提供的HAL库驱动,方便快速编写程序;! E7 F( S5 o w # n% j3 b+ o8 h, f2 S+ o! _' @ “Middlewares”:" @# q& f( ?( f( t6 r {9 }8 o “ST”:ST提供的图形GUI库“STemWin”、USB从设备库“STM32_USB_Device_Library”、USB从主设备库“USB从设备库“STM32_USB_Device_Library”; “Third_Party”:第三方提供的文件系统库“FatFs”、实时性操作系统“FreeRTOS”、网络协议栈“LwIP”;" b9 x' f4 R2 j; ?, I5 J “Projects”:以ST原厂公板为载体,提供的外设应用示例,比如GPIO、UART、ADC、RTC等; “Utilities”:一些字体、日志、多媒体等杂项示例;; t- V4 B& B! G ![]() `) h1 Y e2 @- [9 n3 ] 图 4.2.9 固件包内容结构 ; F" U8 `3 T) K9 t【总结】 如果读者以后开发其它MCU,在没有现成资料的情况下,可以先去MCU官网下载对应型号的数据手册和参考手册,再找找是否提供相关集成开发工具(IDE)和示例程序。加上硬件的原理图、PCB丝印图等,就基本可以完成相关开发了。 + F( ?6 w, }2 D8 M( y) c 原厂提供的资料文档众多,有些文档甚至页码上千,读者不必担心,这些文档不需要一口气看完,只在需要的时候搜索相关关键词,定位到对应章节,仔细阅读即可。+ j. O5 R) B7 v 2 s4 n* a- P+ h0 S) r' P, V( y 3 Y' a! @; D# W) k* B% K! ^ 1.3 开发环境的搭建4 G5 Z1 }$ x$ W6 u" E! `. A& v 1.3.1 交叉开发 嵌入式系统开发不同于通用PC系统的开发。通用PC系统拥有强劲的处理器、充裕的内存和硬盘,且有鼠标键盘输入,显示屏查看,是理想的开发载体,因此PC程序也就直接在PC上开发。而嵌入式系统往往资源有限,输入显示也受限,不适合作为开发载体,因此嵌入式程序通常不在嵌入式系统中开发。而是将嵌入式程序放在PC上开发,然后将生成的可执行文件放在嵌入式系统运行,这种方式就叫交叉开发。2 L+ o) r& R0 X- @9 D % i7 L+ s) j7 `# ~2 r3 J1 L" C 交叉开发通常由三部分组成:宿主机(Host)、目标机(Target)、连接宿主机和目标机的工具(调试/仿真/下载器)。宿主机指用于开发程序的平台,这里指PC电脑,借助电脑上的开发软件,实现程序的编写、编译;目标机指程序运行的平台,这里指开发板;连接宿主机和目标机的工具通常有串口、J-Link等。三者示意如图 4.3.1 所示。! b' |! S, W+ T/ W% Y! b9 P( n6 B ; c0 A# r, B" Y/ C. x ![]() 图 4.3.1 交叉开发示意 ; k; c: p9 H0 t) [4 r; }3 ?! Z嵌入式开发通常分为六个步骤:编辑、预处理、编译、汇编、链接、调试和下载。每个环节都需要相应的软件实现,如果将这些软件集成在一起,就叫集成开发环境(Integrated Development Environment,IDE),如图 4.3.2 所示。) k. N) {5 P' s, c6 u ![]() 图 4.3.2 嵌入式开发流程及所需软件 实际开发中,除了使用调试/下载器进行调试,还会用到串口打印显示信息。对于STM32开发,所需的开发工具如表 4.3.1 所示。因此我们需要安装两个软件(IDE和串口工具软件),准备一个调试/烧写工具。 ![]() 8 _/ Z3 z% |2 Q/ ` 综合实际开发情况和软件收费限制。对于集成开发环境IDE,本手册选择Keil,使用最广,读者熟悉之后也能过渡到其它IDE;对于调试/烧写工具,本手册选择ST-Link示例,功能够用价格便宜;对于串口工具,选择MobaXterm,免费够用。7 z/ f; q( ~6 y - e' E( i+ ~+ @1 w- f8 c; M& i 对于100ASK_STM32F103_MINI开发板,在电路上设计有串口自动下载电路,可以使用配套的100ASK_STM32F103_Tools工具,通过串口下载程序,免去J-Link/ST-Link等工具,在后面“4.4.1 串口直接下载”再介绍。+ E x) g# w: _8 E! x- s 1 g( q& \4 p* U2 M: o8 H % B& s1 t4 P0 Y: r, D a( | % K$ t5 C/ J; U3 `3 S% q 1.3.2 下载、安装Keil Keil-MDK(Keil ARM Microcontroller Development Kit)前生是德国Keil公司,后被ARM收购,可以看作是ARM官方的集成开发环境。前面图 4.2.4 STM32F103C8系列官方工具软件(部分截图)所示的网页页面,里面有Keil的下载链接,或者开发板配套资料的“3_开发软件”文件夹提供所有需要的软件和驱动,读者也可直接去Keil官网(https://www.keil.com/download/product/)直接下载,当前最新版本为5.32,如图 4.3.3 所示。; F7 J. P7 E- O S ![]() 图 4.3.3 MDK-ARM下载页面 随后进入个人信息完善页面,按提示填写所有的信息,如图 4.3.4 所示,填写完后,点击“Submit”提交。+ R4 x6 K* F' y, y/ F ![]() 6 \& w% d: a8 h1 a2 @- _% J7 D 图 4.3.4 填写个人信息 随后进入下载页面,点击“MDK532.EXE”即可下载,如图 4.3.5 所示。, }. Z. O7 i" t* f ![]() 图 4.3.5 MDK下载 5 n1 R1 C) r" X( w* c下载完后,点击运行该文件,进入安装界面,选择“Next >>”,如图 4.3.6 所示。- ]: t4 a, r) k ![]() 图 4.3.6 Keil安装界面 6 [/ E- E& J0 x; P接着进入用户协议界面,勾选同意协议,点击“Next >>”,如图 4.3.7 所示。 Q$ n9 T x. D- n0 m& J- N5 }1 d ![]() 图 4.3.7 Keil用户协议 , K3 [% G$ y6 l6 N6 ?然后设置安装路径,第一个“Core”是软件的安装路径,第二个“Pack”是芯片的硬件支持包的安装路径,读者保持默认路径或者设置为如图 4.3.8 所示一样的即可,如果是自定义设置,建议为全英文路径,不建议为包含有中文的路径。选择好之后点击“Next >>”后:# v' v5 f6 X: h6 J% f, j 6 y, c2 R4 Q) H% C' ^5 f ![]() 5 H, z B$ g9 |/ P5 j 图 4.3.8 设置Keil路径 随后需要设置个人信息,随便填写即可,如图 4.3.9 所示。0 Z% X; V4 F5 X( F- p+ K" }' F z; k+ W9 n" p9 y* s0 K/ f" Q: t ![]() 图 4.3.9 填写用户信息 % @- r. F* c) _之后便进入安装进度界面,如图 4.3.10 所示,等待安装完成。7 Y) t. s" m$ V! S# V% S- d# ~+ i ![]() . q0 m7 A/ p! {% f2 v( ^ 图 4.3.10 Keil安装状态 3 f4 b4 X/ \; r/ {8 {4 l' \安装过程中,回弹出驱动安装界面,勾选“始终信任来自‘ARM Ltd’的软件”,然后点击“安装”,如图 4.3.11 所示。& Q4 L2 h9 u' e0 G$ d/ s, } ![]() 4 \9 s9 d% f( ~ 图 4.3.11 Keil驱动安装 如图 4.3.12 所示即安装完成,“Show Release Notes”为查看当前版版本说明,可以不勾选,最后点击“Filash”。 ![]() 4 G4 }4 }" U# w* s9 s) E2 X 图 4.3.12 Keil安装完成 之后会自动进入“Pack Installer”界面,这里会检查安装的编译器、CMSIS等是否是最新的,由于我们安装的是官网提供的最新的MDK,所以这里一般情况下都是不需要更新的。 至此Keil就安装完成了,但这不是Keil开发环境的全部。一个Keil的开发环境,除了Keil软件,还需要安装对应的Pack,比如这里目标机的MCU是STM32F103C8T6,就需要下载该系列的的Pack,如果是STM32F4系列,就需要下其它系列Pack。' B" c: e* j. t" ^ 使用“Pack Installer”可以方便的对Pack安装和管理。在左上角搜索框输入“STM32F103”,展开搜索结果,可以看到STM32F103C8,点击右边的简介链接即可跳转到Pack下载页面,如图 4.3.13 所示。如果跳转网页无法打开,可直接打开Pack下载总入口。进入Pack下载总入口后,找到“STMicroelectronics STM32F1 Series Device Support, Drivers and”,点击右边的下载图标即可,如图 4.3.14 所示(部分网络环境打开该链接无Pack列表,请尝试换个网络环境测试,仍旧不行则使用配套资料Pack)。 ![]() 7 C. {* U: m- O2 d 图 4.3.13 Pack安装管理器 * w* q% \6 j# @! C5 O: ~5 H8 H3 E ![]() 3 T8 H$ n1 \5 H. G 图 4.3.14 STM32F1 Pack 下载之前会弹出Pack用户协议,点击“Accept”即可,如图 4.3.15 所示。 S) U2 R: Q) Z0 ?' }/ c8 C( u ![]() 图 4.3.15 Pack用户协议 下载完成得到“Keil.STM32F1xx_DFP.2.3.0.pack”,直接双击该文件,随后弹出如图 4.3.16 所示界面,点击“Next”进行安装。* J( U) b, a' t ![]() 图 4.3.16 导入Pack 本开发板使用ST-Link进行下载调试程序,还需要安装ST-Link驱动。首先从ST官网下载该驱动,或者直接使用配套资料里的ST-Link驱动,路径为“3_开发软件\1_涉及的所有驱动\ST-LinkV2仿真器驱动\en.stsw-link009.zip”。0 m! W3 t1 e$ c% i7 I$ d % w. m! u. C5 I/ B. y 解压“en.stsw-link009.zip”,双击运行“dpinst_amd64.exe”(如果电脑为32位系统,运行“dpinst_x86.exe”),出现如图 4.3.17 所示安装界面,点击“下一步”。# S6 P) a. P; I1 h4 O1 M9 V ![]() 图 4.3.17 ST-Link设备驱动安装界面 在安装过程中,出现如图 4.3.18 所示的Windows安全警告,选择“安装”。 9 d% q1 t/ q2 ^0 X$ U ![]() 2 u1 p) _: ?' u; g5 y/ G/ \ 图 4.3.18 Windows安全警告 - i! _9 d5 C) S( q. P最后安装完成提示如图 4.3.19 所示,点击“完成”退出安装程序。; _+ k+ K; k# ]( w/ ^% [# J ![]() - M7 x% J" f/ | 图 4.3.19 ST-Link驱动安装完成 ! {; U, C9 H6 |* I% A$ t1 {至此,针对本开发板(STM32F103系列)的Keil开发环境,配置完成。 , S7 z+ Z1 Y; p' F" b& W6 S 1.3.3 下载、安装MobaXterm 实际开发中,常常使用串口的输出信息来协助调试。通常的串口连接如图 4.3.17 所示。开发板的串口(TTL电平)引出,通过USB-TTL串口模块,转成USB信号给电脑,在电脑上还需要配套软件才能显示信息,也就是这里要安装的MobaXterm。本开发板的USB-TTL串口模块集成在了开发板上,只需要将USB切换开关,拨到非ON一端,然后插入电脑USB口即可。% c3 M+ G3 l: c6 B" [ ![]() 图 4.3.20 串口连接示意图 9 z! `; }9 d6 G5 B/ T7 [目前还用不上串口,因此不需要接线,只需要将串口工具MobaXterm先下载、安装即可。打开MobaXtrem官网(https://mobaxterm.mobatek.net/download.html),如图 4.3.18 所示。Moxtrem有两个版本,“Home Edition”(家庭版)有功能限制但免费,“Professional Edition”(专业版)无功能限制但收费,这里选择功能够用的家庭版下载即可。 9 V# _6 a" B/ ]9 l ![]() 图 4.3.21 MobaXtrem版本选择1 接着跳到家庭版下载页面,又分两个版本可选,“Protable edition”(便携版)无需安装,点击即用,“Installer edition”(安装版)需要安装才能使用,这里选择便携版即可,如图 4.3.19 所示。 7 F$ y: Z; X1 i k ![]() ; W' U7 O. ?* g9 ~$ A! |1 G 图 4.3.22 MobaXterm版本选择2 下载得到“MobaXterm_Portable_v20.4.zip”,需要读者解压到任一目录,解压后如图 4.3.20 所示,以后点击“MobaXterm_Portable_v20.4.exe”即可运行MobaXtrem。% ^$ } m" I+ P& I% s" t ![]() 图 4.3.23 MobaXterm解压后文件 本开发板采用CH340G转串口芯片,需要手动安装串口驱动,解压配套资料“3_开发软件\1_涉及的所有驱动\CH340G串口驱动\ CH341SER.ZIP”,双击运行“SETUP.EXE”,点击“安装”,如图 4.3.24 所示。 ![]() 图 4.3.24 安装串口驱动 ; {6 {9 N2 V- @9 B- X, ] , V7 E& L0 W; m8 |* z! P' k 1.4 下载程序和调试$ Z' m) N8 Q0 ~8 A# u' j 在本章的最后,再介绍下如何下载程序和简单调试,以“2_GPIO—LED点灯”工程为例,读者暂时只关注下载和调试,对于代码内容、工程结构,后面章节会详细介绍。2 L0 }0 ^: t$ L6 z 1.4.1 串口直接下载6 E' F X1 @3 [' _( E 开发板独创了USB接口集供电与下载一体,无需额外配件,将开发板的“USB切换开关”拨到 “非ON”一端,然后插上电脑USB口,如图 4.4.1 所示。" V5 `6 _& d, h" f: v ![]() & r) h$ C% M1 n 图 4.4.1 连接电脑 2 E* I/ a9 @1 Y* h- z! x X确保按“图 4.3.24 安装串口驱动”所示,安装好串口驱动,此时电脑设备管理器,会识别到开发板的串口端口,如图 4.4.2 所示,其中名字为“USB-SERIAL CH340”,端口号根据实际情况生成,和本文可能不一样。 ![]() 4 i1 B0 y1 {5 [/ j2 I 图 4.4.2 设备管理器 0 p) L. C) Y) B0 ?8 w( U接着打开“100ASK_STM32F103_MINI开发板资料\3_开发软件\2_百问网STM32F103工具\100ASK_STM32F103_Tools”里面的“100ask_stm32f103_tools.exe“,如图 4.4.3 所示。: h. _! }5 p# A8 {1 K: n. } ![]() / U- y7 f; Q B1 n) Z. u+ \) W" E 图 4.4.3 100ASK_STM32F103_Tools / T* V$ `0 x2 X( E7 }9 k' q这里要选择编程生成的“bin文件”或“hex文件”,打开配套资料的“05_程序源码”文件夹,里面包含了所有实验涉及的源码,找到“2_GPIO—LED点灯”并进入,再打开“Project”,双击里面的“Led.uvprojx”,如图 4.4.4 所示。 ![]() 图 4.4.4 LED实验工程 接着会自动打开Keil,界面如图 4.4.5 所示,可以把整个界面分为四个区域:" J# K# _1 P# ^% N' d' W2 ? ( j8 f: Z) B- V9 H$ w ①功能菜单区:包含Keil的功能菜单,以及一些常用功能按钮;! j" a8 b2 j# c. t0 k ②工程文件区:该工程所有文件的目录结构;% u) y' g0 n; d4 V# p/ z ' s; e$ `0 b" t ③代码编辑区:在工程文件区选中任一文件,将在代码编辑区显示内容,供用户编辑; ④编译信息输出区:显示在编译过程中的所有提示信息; ![]() % N" L1 l9 m, A. K" M' o: C 图 4.4.5 Keil工程界面 ' I+ y, f3 q7 ?5 F在功能菜单区,圈出了两组按钮,其中左边的一组与编译下载相关,从左到右,功能依次为: 4 y Q; [: `5 v7 O% N, e! n! x Translate:编译当前源文件,只进行语法错误的检查,不生成可执行文件,用来快速查看修改后的代码否有语法错误;6 Q, n! ?, d$ ~6 x& o9 }. g ) r# Q/ e( J! A! S; @, j& I/ [ Build:编译工程得到目标文件(快捷键F7),这里只编译修改过,以及和修改文件有依赖的文件,也就是增量编译,用来快速得到目标文件;4 V* U* F! i/ F: r+ @4 t ; h) j6 h2 o! P Rebuild: 重新编译工程,不管工程文件有无修改、编译,会对工程中所有文件重新进行编译生成目标文件,花费时间较长; Batch Rebuild:批量编译,当Keil存在多个工程项目时,用于多项目的批量构建、重建、清理等; 0 R1 f5 M3 Z2 W( M- _" ~ a l ~ Stop Build:停止编译,在编译过程中才能点击该按钮,用于取消当前的编译;2 ?# @/ V; j) x6 I4 A: W; Q r - i# B$ s. L) I4 S( f$ t* ?" J Download:下载(快捷键F8),编译完成后,点击该按钮下载程序; 在中间的一组与调试相关,从左到右,功能依次为: Start/Stop Debug Seesion:开始/停止调试窗口,用于进入调试窗口,进入后会新增一系列的按钮,后面会仔细讲解;$ K5 g* n9 U2 ]4 f, P$ i8 L . f. q7 w* M0 y1 z+ e Insert/Remove Breakpoint: 插入/移除断点,在进入调试窗口后,选中想暂停的代码位置,点击按钮就会在该行出现一个实心的小红点,在调试时就会在该处暂停运行; Enable/Disable Breakpoint:使能/去能断点,在有断点的代码行,点击按钮就会取消该断点功能,再次点击恢复该断点功能; & e+ n( Q# |5 |- M N( \# |0 h Disable All Breakpoints in current Target:去能当前工程所有断点,保留了断点的位置,方便再次使能调试; Kill All Breakpoints in current Target:清除当前工程所有断点,整个工程不会再有任何断点; + V; |! P+ E, i5 r$ O 对Keil有初步了解后,接下来就尝试编译、下载程序。点击Build按钮(快捷键F7),便开始编译程序,编译提示信息如图 4.4.6 所示,可以看到提示“0 Error(s),0 Warning(s)”,即没有错误没有警告,编译成功。) G- C% z% H7 H. @: X7 u' b1 b ![]() 图 4.4.6 编译、下载提示信息 & ^* Y/ U8 L5 @1 [* |+ ^编译成功后,将在工程的“Objects”目录下生成目标文件“Led.hex”和“Led.bin”,点击“100ask_stm32f103_tools”的“文件选择”,选择“Led.hex”或“Led.bin”,如图 4.4.7 所示。# H2 ]: B( p' ?/ S8 ?: Y( J# v4 a * E3 o+ [4 I+ z$ k ![]() 6 ?. y5 S3 A2 v6 d6 ^ 图 4.4.7 选择烧写文件 6 [) m4 U3 ?) Q9 J' ?# Z& `, }. _6 k% R 点击“开始下载”,等进度条烧写完成,如图 4.4.8 所示,开发板自动重启,即可看到开发板LED闪烁。- u0 f) Z5 }7 A/ D: S8 P ![]() 图 4.4.8 烧写完成 ) i) a3 o* Z' r( r! f( ~1.4.2 ST-Link V20 ^* C9 K( m U/ l ST-Link是由ST公司设计,用于STM8/STM32微控制器的在线调试器/下载器。目前为止,ST-Link一共有三个版本。 ST-Link V1:早期版本目前市面很少看到,基本被V2取代;) b# x- V8 v5 ` ST-Link V2:目前使用最多的版本,能够满足日常调试需求;6 L, o7 x1 t8 g2 m1 k* C' ] 9 l- r5 S. ]8 ?) l3 a& Y ST-Link V3:近两年发布的版本,功能、速度上都有所提示,价格较高,目前普及不高; ST-Link V2本身就是使用STM32F103C8T6设计的,因此只要下载原厂固件,结合相应的电路,就可以将开发板变为ST-Link V2。 将开发板的 “USB切换开关”拨到 “非ON”一端,然后插上电脑USB口。打开“100ask_stm32f103_tools.exe“, 点击“ST-Link”图标,完成下载,如图 4.4.9 所示。 ' }+ k) \% I% Y* C2 H& A ![]() : e4 n2 u# Y, H, n' Y 图 4.4.9 烧写ST-Link固件 8 t2 @$ V4 T/ l/ W8 J0 _/ V下载完成后,需要将 “USB切换开关”拨到 “ON”一端,然后重新插入电脑,点击“确认”,进行升级,如图 4.4.10 所示。 ![]() . y# S/ v5 G* w$ _ 图 4.4.10 ST-Link固件下载完成 在弹出的升级界面,点击“Device Connect”进行连接,如图 4.4.11 所示。: f( `0 n: u( H }/ O4 ^0 e3 W' Y ![]() ' S/ D" k- J4 c9 W' `$ o 图 4.4.11 设备连接 连接成功后,可以看到当前版本为“V2.J16.S4”,点击“Yes”升级到“V2.J38.S7”,如图 4.4.12 所示。 ![]() 图 4.4.12 升级成功 ( n- `. ^2 a R/ J9 j升级完成,即可作为ST-Link V2使用。! S3 o9 C& n* D* T7 i4 t/ v1 y8 H& s 4 d. y- o! ^% l5 A- M 连接100ASK_STM32F103_MINI开发板使用3 Y+ n6 L- l* Y. R" t$ D% y 对于100ASK_STM32F103_MINI,在设计上做了兼容,直接使用定制灰排线,按如图 4.4.13 所示连接,即一个作为ST-Link调试器,一个作为开发板,对后者进行调试和下载。 $ E5 e# x5 x7 G+ o0 b, r8 t ![]() 2 a& R+ j1 ]9 m: C5 O( Z 图 4.4.13 连接100ASK_STM32F103_MINI开发板 l连接其它STM32开发板使用8 \& s& e- }8 a% t$ ?5 z/ _9 J 连接其它STM32开发板时,使用如图 4.4.14 所示的“3V3”、“GND”、“JTCK”、“JTMS”,效果如图 4.4.15 所示。 ![]() ' ?5 H7 m3 y8 A1 a( C# C; \2 H 图 4.4.14 ST-Link下载引脚 9 ^5 g& v$ i3 j* K. R( Y7 M* ~0 S' P3 k6 F0 T T ![]() % i) Q" @- F, q) \ 图 4.4.15 与其它开发板连接实物图 $ k5 n$ r5 z ]& M9 I, F' Z6 c* G+ o 1.4.3 ST-Link调试下载* |2 `; g& f4 |) e1 } 将ST-Link与开发板连接好后,可以直接点击 Download下载(快捷键F8)。0 a3 s# l( N7 Q9 J9 \& B% x 8 J* C2 u) u) t& T 有了ST-Link除了能下载,还能调试,比如前面串口下载的点亮LED程序,可能需要逐步执行排查问题,点击Keil的Start/Stop Debug Seesion按钮,进入调试窗口。/ p8 ^' Y8 p0 M$ | 默认的调试窗口界面如图 4.4.16 所示,可以大致分为五个区域,如图 4.4.16 所示,其中功能菜单区和用户代码区,是我们目前初步需要了解的,其它的读者可以网上查阅资料,扩展阅读。在功能菜单区,圈出了三组按钮,第一组是控制调试运行状态的按钮,第二组是控制各种调试窗口是否显示,第三组是前面介绍的断点添加工具。 , R& R# L: C+ ~$ d ![]() 5 j, e* l" a0 i 图 4.4.16 Keil调试窗口 这里重点介绍下第一控制调试运行状态的按钮: ! s- L6 N( p' z5 W h9 C' d Reset:复位,让程序从任一状态变为初始状态(跳到Reset Handler);5 C' D& q5 i1 j1 o5 |! r# D3 w6 m; p c/ @- ?; ^/ `# z* V/ Y& T Run:运行(快捷键F5),让程序正常运行,遇到断点会暂停在断点所在代码行; Stop: 停止,当程序在运行时,可以点击该按钮停止运行; Step:单步调试(快捷键F11),每点击一下,执行一条代码,遇到函数会跳进函数执行;6 s& V' M8 f! V6 `- D7 j 9 O% P4 X8 s8 H Step Over:逐行调试(快捷键F10),每点击一下,执行一行代码,遇到函数不会跳进函数执行;# A( X( Q9 j% I0 c& q2 Y. M2 S u1 U9 a , ?' A( @6 C V$ w- q0 O Step Out:跳出调试(快捷键Ctrl + F11),每点击一下,跳出当前函数一次,直到跳到最外面的主函数(main函数);( \5 b7 h( D$ h& L+ s 5 J' `# ^& s: U$ v" ~ Run to Cursor Line:跳到光标所在行调试(快捷键Ctrl + F10),点击一下,运行到用户代码区的光标位置处停止,前提是光标所在位置能够执行;8 h) r2 \, E, {1 ` 8 v. ?2 v' t, M Show Next Statement:显示下一条语句,当打开了多个文件,不知道程序暂停到何处,点击该按钮可以跳到暂停处;9 D8 m6 y+ M# w# F& f8 ~" ] g % T! J6 m) R$ u7 A1 ~; o: _, A 注意,每次修改代码后,都要按下Build(快捷键F7),重新编译修改后的代码,这样调试的才是修改后的代码。1 ^! Q I4 P# o' Y) Y7 q/ w j 7 K! D7 E. g+ u+ e 下面来感受下调试,在前面下载程序时,体验过“2_GPIO—LED点灯”实验的效果就是蓝色灯间隔一秒交替闪烁。/ d# c9 G1 s8 a* N; j3 e" V2 t 进入调试窗口后,用鼠标选中“main.c”的28行,此时点击该行左边灰色方框处,或者点击功能菜单区的插入/移除断点按钮,就会在灰色方框处显示一个红色实心的断点,同理在30行添加断点,如图 4.4.17 所示。0 b0 a% v" U. X0 N( R ; r$ }+ X# y6 l: U# C( w1 s, { 同时,在18行左边有两个小三角形,蓝色图标表示光标所在的行,黄色图标处为要运行的下一条语句,可知此时程序暂停在18行处,还未执行18行。 4 R; Y7 s9 W; n, U ![]() 图 4.4.17 添加断点 & X8 u. ]2 c+ k) {; v接着按下Run按钮(快捷键F5),可以看到小三角形跳到了28行断点处,表示现在停在了该行,因为还没有执行这一行代码,所以蓝色灯还不会亮,如图 4.4.18 所示。 - \/ B% a0 H. o" y. c* \ ![]() " t* C2 Z, Q% B8 O+ A7 } 图 4.4.18 断点1 2 Y. c; Q ^) K1 d$ A/ ?接着再按下Run按钮(快捷键F5),小三角跳到了30行,此时观察开发板蓝色LED灯已经点亮,但还未执行30行关灯代码,如图 4.4.19 所示。: G8 L8 F- D' T- G : d8 ?- t& X2 P; U3 J `: |$ A ![]() 8 w6 a: Z& t" n, U9 j- V4 U0 l 图 4.4.19 断点2 再按下Run按钮(快捷键F5),因为循环的缘故,小三角又跳到了28行,此时观察开发板红色LED灯已熄灭,28行点亮蓝色LED灯还未执行,如图 4.4.20 所示。 ! Z: N' _4 c {$ @ ![]() 图 4.4.20 重复断点1 通过调试,可以控制代码一句一句的执行,从而方便观察现象,排查问题。当然,调试远不止这些,实际开发中,还会查看寄存器值、变量值等,这些在后面实验中需要用到的时候,再详细讲解,目前读者只需要了解调试概念、基本操作方法即可。' W! W2 g% [7 C 作者:攻城狮子黄 |
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
Keil下的STM32N6之RAM运行工程配置说明
【STM32MP257-DK】01开发板开箱、ST MPU 生态资源使用、环境搭建以及镜像更新
兔哥的初代M33【002】-H503Nucleo 内部flash操作
兔哥的杂谈【002】——如何性价比更高地去编译STM32
OpenBLT移植到STM32F405开发板
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
FreeRTOS学习笔记2