
1.1 资料下载和介绍 4 y+ \$ D! K3 ~. _1 b 1.2 原厂资料的下载 前面“2_原厂资料”文件夹包含了本小结所介绍下载的资料。本块内容单独提炼出来讲解,是希望“授人以鱼不如授人以渔”,让读者明白这些资料该从何处下载,以后实际开发,换成了其它MCU,方法也基本一致,也能自己下载这些关键资料。 对于几乎所有的MCU,都会有数据手册和参考手册,这两个手册必须下载。4 _& g$ e6 x- Q+ k+ a4 z 对于STM32系列的MCU,通常还会有Cortex-M3/M4编程手册,闪存编程手册、勘误手册、原厂固件包示例源码、原厂固件包用户手册、HAL库用户手册等,这些资料根据需求下载。 对于Cortex-M3/M4架构的的MCU,如果需要深入了解Cortex-M3/M4内核,还需要Cortex-M3/M4权威指南,这个供读者深入学习。, V2 P; D1 X: k6 i5 J$ a 首先打开ST官网,在搜索框里直接输入“STM32F103C8”,点击“Search”,如图 4.2.1 所示。注意,ST官网在不断优化,本手册截图基于当前页面示意,读者根据页面举一反三,灵活变通。' ~& |! Y) Z6 [8 ^5 j ![]() # U" i. |. A# r+ T: d" E) V1 @9 k 图 4.2.1 输入所需MCU g4 V! `8 L7 x& }* L1 I6 e$ r随后显示该搜索条件匹配的产品,如图 4.2.2 所示,可以看到只有一款产品符合搜索条件,点击该产品进入详细信息。 ![]() 5 z4 t- Z# s! `& f- d K1 B' E 图 4.2.2 搜索结果 2 m' L) Z1 }$ H& Y: S. v3 ^7 R$ j" q + Y8 ]+ `7 b3 n1 w! A( Z 在产品详细页,切换到“Documentation”标签,可以看到该产品的所有文档手册,如图 4.2.3 所示为部分截图。! `# _8 s) t) ~; | “Product Specifications”(产品规格):也就是数据手册,包含该系列MCU的整体描述、引脚描述、内存映射、电气特性、封装信息、订购信息等。在芯片选型、原理图设计、PCB设计、代码编程等开发环节,都会需要该文档;: R8 ]- }& n+ u% l6 q “Reference Manuals”(参考手册):包含该系列MCU各外设寄存器的详细描述,在代码编程时,需要找到对应外设章节,仔细阅读;& i' F5 ~# m$ n6 p4 U8 A : {* V) s- v; B' U, s “Programming Manuals”(编程手册):包含闪存编程手册和Cortex-M3内核编程手册,一些资源是在内核里的,比如NVIC和SysTick,此时在参考手册里找不到相关寄存器信息,就需要在Cortex-M3内核编程手册里查找; V7 u& B" y6 b l* d: ` D; b ) ?0 b' k6 L v7 @/ {( m) r/ C' G$ _ “Errata Sheets”(勘误手册):包含该MCU内核、外设资源的限制,解决方案等,在调试中出现了bug,可以看看该手册是否有类似记录; ' i% H1 z5 C$ _* f/ Z0 k* `) _* I1 _ ![]() 3 e# v8 K. L" n1 m( F5 m 图 4.2.3 STM32F103C8系列原厂文档(部分截图) 6 R( A1 t" ~9 X5 \# B5 A' D除了这些文档外,通常半导体芯片制造厂还会为MCU提供一些示例程序,ST也不例外。在前面的产品详细页,切换到“Tools & Software”标签,可以看到该产品的所有工具软件,比如各种硬件开发工具、软件开发工具、元件模块、评估工具软件、MCU/MPU嵌入式软件、产品评估工具、解决方案评估工具、工程服务、培训课程等,如图 4.2.4 所示为部分截图。) H. m6 u' w& f7 {& ~9 |" p 8 A8 a) }/ n+ j* c ![]() 图 4.2.4 STM32F103C8系列原厂工具软件(部分截图) * R7 ~6 s2 n" y" K1 H3 Y8 M, Z, C “Software Development Tools”下圈出来的几个工具后续会用到,这里先跳过。“MCU & MPU Embedded Software”下的“STM32CubeF1”就是包含示例的固件包。点击该固件包,进入详细页面,在“Overview”标签栏下,点击“Get Software”可以分别进入固件包、固件包补丁下载页面,如图 4.2.5 所示。' ?* ~$ S' I+ t2 E C5 E% p ( Y! Y! |6 ]& T% V9 \* ? ![]() 图 4.2.5 固件包下载 * v/ d7 O; n3 C9 O" [" l4 c' _/ ^- y u6 ~* V* G! z* B8 i! } 随后会弹出许可协议“License Agreement”页面,点击“ACCEPT”表示接受,如图 4.2.6 所示。9 H% g/ Z- e4 I4 c, t# u8 d ![]() 0 I2 }/ v1 _: A7 n1 M. D# m3 s. t6 Z 图 4.2.6 许可协议页面 2 ^; ?5 H# {1 f, D接着要求需要输入个人信息,如图 4.2.7所示。如果读者有账号,或者想注册一个账号方便以后下载,可以点击右上角“Login/Register”登陆/注册下载。如果读者不想注册,需要填写个人信息和邮箱,下载链接将发送到填写邮箱。 ![]() 7 `9 z" @4 |+ H9 A/ P 图 4.2.7 填写个人信息 ST还提供该固件包的详细说明文档,切换到“Documentation”标签。在“User Manuals”下可以看到“UM1850”文件,该手册详细描述了STM32F1系列的HAL库和LL库API,非常重要,后续会用到。“UM1847”文件则是该固件包的详细说明文档。除此之外,还有介绍LwIP TCP/IP协议栈、RTOS、FatFs等文档,如图 4.2.8 所示,读者可根据需求参考。 * F8 Q; Y& r0 A8 S2 o% b ![]() 7 z4 V6 _9 l. X/ w0 m 图 4.2.8 固件包相关文档 最后,再简单介绍下固件包所包含的内容,供读者参考,固件包内容结构如图 4.2.9 所示。“Documentation”:里面是本固件包的详细说明文档;, M+ Z' P9 n3 Y* L, s# C “Drivers”: ! T! l) W' n. |+ `/ W “BSP”:板级支持包(Board Support Package),适配ST原厂的几个公板;9 Z. b) W0 V% [6 I: K “CMSIS”: Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard),包含STM32F1符合CMSIS标准的软件抽象层相关文件;. a" f2 R9 o! m; p “STM32F1xx_HAL_Driver”:ST提供的HAL库驱动,方便快速编写程序;* R7 V4 ]8 j* e5 i4 }1 n “Middlewares”: “ST”:ST提供的图形GUI库“STemWin”、USB从设备库“STM32_USB_Device_Library”、USB从主设备库“USB从设备库“STM32_USB_Device_Library”;, O- C0 O0 n% H “Third_Party”:第三方提供的文件系统库“FatFs”、实时性操作系统“FreeRTOS”、网络协议栈“LwIP”;4 O0 D& W2 X7 D$ w4 n5 n& ?. d1 Y6 h “Projects”:以ST原厂公板为载体,提供的外设应用示例,比如GPIO、UART、ADC、RTC等;+ u6 J- ]! P1 O/ z) a; l “Utilities”:一些字体、日志、多媒体等杂项示例; ( E/ \- o9 s: _6 x/ H0 V4 b6 R ![]() 3 V8 z5 ^* F+ s1 L7 B) @ 图 4.2.9 固件包内容结构 【总结】8 E% V% Y! h" L4 g X! s" s) P x 如果读者以后开发其它MCU,在没有现成资料的情况下,可以先去MCU官网下载对应型号的数据手册和参考手册,再找找是否提供相关集成开发工具(IDE)和示例程序。加上硬件的原理图、PCB丝印图等,就基本可以完成相关开发了。; X- s5 f, M3 R- O4 i % `$ @) n* ?3 O+ V: u; s 原厂提供的资料文档众多,有些文档甚至页码上千,读者不必担心,这些文档不需要一口气看完,只在需要的时候搜索相关关键词,定位到对应章节,仔细阅读即可。* I/ s, E; [3 v1 f2 ^# b: ~! T* |, g 5 ?9 L8 p8 Y0 `2 d9 l9 D$ ? 1.3 开发环境的搭建 1.3.1 交叉开发 嵌入式系统开发不同于通用PC系统的开发。通用PC系统拥有强劲的处理器、充裕的内存和硬盘,且有鼠标键盘输入,显示屏查看,是理想的开发载体,因此PC程序也就直接在PC上开发。而嵌入式系统往往资源有限,输入显示也受限,不适合作为开发载体,因此嵌入式程序通常不在嵌入式系统中开发。而是将嵌入式程序放在PC上开发,然后将生成的可执行文件放在嵌入式系统运行,这种方式就叫交叉开发。 3 ` l' O! y$ f0 [ 交叉开发通常由三部分组成:宿主机(Host)、目标机(Target)、连接宿主机和目标机的工具(调试/仿真/下载器)。宿主机指用于开发程序的平台,这里指PC电脑,借助电脑上的开发软件,实现程序的编写、编译;目标机指程序运行的平台,这里指开发板;连接宿主机和目标机的工具通常有串口、J-Link等。三者示意如图 4.3.1 所示。6 L U: W- I/ I: a5 V) K4 y! _ * }1 L9 M! O8 ~' m* @' E* ` ![]() 图 4.3.1 交叉开发示意 5 p' F# q+ J& M+ h+ W v3 v" Y6 B嵌入式开发通常分为六个步骤:编辑、预处理、编译、汇编、链接、调试和下载。每个环节都需要相应的软件实现,如果将这些软件集成在一起,就叫集成开发环境(Integrated Development Environment,IDE),如图 4.3.2 所示。2 R {2 O5 `" K ![]() 图 4.3.2 嵌入式开发流程及所需软件 实际开发中,除了使用调试/下载器进行调试,还会用到串口打印显示信息。对于STM32开发,所需的开发工具如表 4.3.1 所示。因此我们需要安装两个软件(IDE和串口工具软件),准备一个调试/烧写工具。- y' a, U1 V0 W( ~* A 0 W& Y/ d9 N5 r ![]() 0 G1 c: z/ }( j2 e5 i * o2 c8 d( o! z/ n 综合实际开发情况和软件收费限制。对于集成开发环境IDE,本手册选择Keil,使用最广,读者熟悉之后也能过渡到其它IDE;对于调试/烧写工具,本手册选择ST-Link示例,功能够用价格便宜;对于串口工具,选择MobaXterm,免费够用。1 t& v5 `! M: b! _4 @3 A 3 J' ]' K6 [1 s 对于100ASK_STM32F103_MINI开发板,在电路上设计有串口自动下载电路,可以使用配套的100ASK_STM32F103_Tools工具,通过串口下载程序,免去J-Link/ST-Link等工具,在后面“4.4.1 串口直接下载”再介绍。 : o n- p" a' ~. A " \! E1 _1 R' g& J/ @ 9 Y7 u$ A) f" T9 ]* R8 I1 r 1.3.2 下载、安装Keil! W0 h, A. R: U o3 B( U 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 所示。2 Y \: Q0 S7 p" z# @) x$ o1 H ![]() 图 4.3.3 MDK-ARM下载页面 随后进入个人信息完善页面,按提示填写所有的信息,如图 4.3.4 所示,填写完后,点击“Submit”提交。# C w$ A5 d9 r$ M! d8 G ![]() 4 ^! {8 v1 A; L0 ] 图 4.3.4 填写个人信息 2 u& k% k8 y% i( g; N随后进入下载页面,点击“MDK532.EXE”即可下载,如图 4.3.5 所示。 ' h. i t+ G, j) x) D ![]() 图 4.3.5 MDK下载 m9 v. A& Z2 R/ E$ Y9 g下载完后,点击运行该文件,进入安装界面,选择“Next >>”,如图 4.3.6 所示。. O4 U% e. X& l" Q ![]() 4 I9 Z/ b9 \8 u7 P, M* G5 U 图 4.3.6 Keil安装界面 接着进入用户协议界面,勾选同意协议,点击“Next >>”,如图 4.3.7 所示。 ; v) Z0 m8 \3 \) u i4 d ![]() 图 4.3.7 Keil用户协议 然后设置安装路径,第一个“Core”是软件的安装路径,第二个“Pack”是芯片的硬件支持包的安装路径,读者保持默认路径或者设置为如图 4.3.8 所示一样的即可,如果是自定义设置,建议为全英文路径,不建议为包含有中文的路径。选择好之后点击“Next >>”后: R5 v* [, N6 s ![]() + b6 s9 u* b/ G+ @+ p% I 图 4.3.8 设置Keil路径 随后需要设置个人信息,随便填写即可,如图 4.3.9 所示。 5 K9 T' s& j; ?+ P! ^+ j ![]() 9 F$ ]6 U# b( J/ `: h 图 4.3.9 填写用户信息 9 E, ^* `0 w5 ^: d" W3 R3 l6 w之后便进入安装进度界面,如图 4.3.10 所示,等待安装完成。 R- {3 W5 ]4 l9 Z0 b ![]() ' W' Q: `: ~# y3 ~5 Y 图 4.3.10 Keil安装状态 ; Y6 l/ x2 N1 E: W2 T安装过程中,回弹出驱动安装界面,勾选“始终信任来自‘ARM Ltd’的软件”,然后点击“安装”,如图 4.3.11 所示。1 c* j' W# N9 v5 b6 [! L) T ![]() 图 4.3.11 Keil驱动安装 5 N6 k+ \1 t( I+ `& n _" d" a% S如图 4.3.12 所示即安装完成,“Show Release Notes”为查看当前版版本说明,可以不勾选,最后点击“Filash”。 S; [! y5 H( [5 T+ o' n8 ? ![]() 图 4.3.12 Keil安装完成 0 K. M* w+ j* |; L0 @之后会自动进入“Pack Installer”界面,这里会检查安装的编译器、CMSIS等是否是最新的,由于我们安装的是官网提供的最新的MDK,所以这里一般情况下都是不需要更新的。3 v1 n5 |. D5 ^( ]* F: `, B* e 至此Keil就安装完成了,但这不是Keil开发环境的全部。一个Keil的开发环境,除了Keil软件,还需要安装对应的Pack,比如这里目标机的MCU是STM32F103C8T6,就需要下载该系列的的Pack,如果是STM32F4系列,就需要下其它系列Pack。; X$ a$ O9 K$ H q. X9 r( ] 使用“Pack Installer”可以方便的对Pack安装和管理。在左上角搜索框输入“STM32F103”,展开搜索结果,可以看到STM32F103C8,点击右边的简介链接即可跳转到Pack下载页面,如图 4.3.13 所示。如果跳转网页无法打开,可直接打开Pack下载总入口。进入Pack下载总入口后,找到“STMicroelectronics STM32F1 Series Device Support, Drivers and”,点击右边的下载图标即可,如图 4.3.14 所示(部分网络环境打开该链接无Pack列表,请尝试换个网络环境测试,仍旧不行则使用配套资料Pack)。/ l8 ]/ l$ o! J1 m& X9 ^ 9 a3 i6 T1 r" a: Q6 }2 K ![]() 3 |( I o5 ~$ X! |) B 图 4.3.13 Pack安装管理器 ![]() 5 Y1 Y; l/ m: d2 S+ Y 图 4.3.14 STM32F1 Pack 0 f: F; D+ b8 J6 r6 d) c; Y! W下载之前会弹出Pack用户协议,点击“Accept”即可,如图 4.3.15 所示。! Z3 z1 Q( P8 N6 ?- \ 5 B4 { B% L: M- ?9 h, ? ![]() + L4 j/ J& P8 e# ^+ B3 W2 C# s 图 4.3.15 Pack用户协议 6 t% V) @+ V( K下载完成得到“Keil.STM32F1xx_DFP.2.3.0.pack”,直接双击该文件,随后弹出如图 4.3.16 所示界面,点击“Next”进行安装。4 c4 ]/ A$ w' }& O2 V- A 5 `" _$ n; F6 v; \0 a ![]() 图 4.3.16 导入Pack 本开发板使用ST-Link进行下载调试程序,还需要安装ST-Link驱动。首先从ST官网下载该驱动,或者直接使用配套资料里的ST-Link驱动,路径为“3_开发软件\1_涉及的所有驱动\ST-LinkV2仿真器驱动\en.stsw-link009.zip”。 解压“en.stsw-link009.zip”,双击运行“dpinst_amd64.exe”(如果电脑为32位系统,运行“dpinst_x86.exe”),出现如图 4.3.17 所示安装界面,点击“下一步”。 ![]() 8 g. |4 t8 _" d$ R1 \ 图 4.3.17 ST-Link设备驱动安装界面 ! S4 y6 Q/ Q6 I, F) [. Q1 G+ Q) }在安装过程中,出现如图 4.3.18 所示的Windows安全警告,选择“安装”。# [4 m. x, ` I |/ K+ k9 r9 Q # D7 {6 q; c6 J2 f- i ![]() 2 h4 |" ^% C c8 T 图 4.3.18 Windows安全警告 ) z" l x/ B9 e2 c: H) |最后安装完成提示如图 4.3.19 所示,点击“完成”退出安装程序。9 r# A( W& [+ Z 8 x% @/ o1 R0 R5 q! W' y' u+ [4 w% K ![]() 7 P# j/ S. `: x* ?4 d 图 4.3.19 ST-Link驱动安装完成 ! q9 k, p* ]+ n# N. m至此,针对本开发板(STM32F103系列)的Keil开发环境,配置完成。$ H5 y! m0 X1 g8 P6 z |; n- c+ r8 D' X 1.3.3 下载、安装MobaXterm 实际开发中,常常使用串口的输出信息来协助调试。通常的串口连接如图 4.3.17 所示。开发板的串口(TTL电平)引出,通过USB-TTL串口模块,转成USB信号给电脑,在电脑上还需要配套软件才能显示信息,也就是这里要安装的MobaXterm。本开发板的USB-TTL串口模块集成在了开发板上,只需要将USB切换开关,拨到非ON一端,然后插入电脑USB口即可。 ![]() & J8 ^. ?, A4 B( K y0 v* l 图 4.3.20 串口连接示意图 目前还用不上串口,因此不需要接线,只需要将串口工具MobaXterm先下载、安装即可。打开MobaXtrem官网(https://mobaxterm.mobatek.net/download.html),如图 4.3.18 所示。Moxtrem有两个版本,“Home Edition”(家庭版)有功能限制但免费,“Professional Edition”(专业版)无功能限制但收费,这里选择功能够用的家庭版下载即可。( z0 _* r3 F0 ?; u- t7 A M% z. v! x. Z, b* g7 K, N6 Z ![]() 图 4.3.21 MobaXtrem版本选择1 接着跳到家庭版下载页面,又分两个版本可选,“Protable edition”(便携版)无需安装,点击即用,“Installer edition”(安装版)需要安装才能使用,这里选择便携版即可,如图 4.3.19 所示。 ![]() 图 4.3.22 MobaXterm版本选择2 4 h+ ~& k$ p# k下载得到“MobaXterm_Portable_v20.4.zip”,需要读者解压到任一目录,解压后如图 4.3.20 所示,以后点击“MobaXterm_Portable_v20.4.exe”即可运行MobaXtrem。: a( }3 d6 [6 T# [4 p3 w7 v + T; r: c/ k5 B A8 F+ C5 _ ![]() 图 4.3.23 MobaXterm解压后文件 3 N& C2 A7 j; z: `本开发板采用CH340G转串口芯片,需要手动安装串口驱动,解压配套资料“3_开发软件\1_涉及的所有驱动\CH340G串口驱动\ CH341SER.ZIP”,双击运行“SETUP.EXE”,点击“安装”,如图 4.3.24 所示。 ![]() 图 4.3.24 安装串口驱动 * z: l5 g9 P" r# _ q: j2 y, Z% V1 p. ^' y4 `* \1 d" p6 N% N( x2 d 3 d+ T$ b3 T- N 1.4 下载程序和调试 在本章的最后,再介绍下如何下载程序和简单调试,以“2_GPIO—LED点灯”工程为例,读者暂时只关注下载和调试,对于代码内容、工程结构,后面章节会详细介绍。, H; j6 o+ S \ 1.4.1 串口直接下载* ?+ J) O, Z4 K% |4 n& r0 N$ x 开发板独创了USB接口集供电与下载一体,无需额外配件,将开发板的“USB切换开关”拨到 “非ON”一端,然后插上电脑USB口,如图 4.4.1 所示。0 p. ?. M( _5 w/ y6 A. x% k9 ` $ p% d0 L( ^$ s) Q q ![]() ( ^- A+ E3 V" ~: Q' {# E 图 4.4.1 连接电脑 0 V! q# J3 P, c7 S! k, K$ o确保按“图 4.3.24 安装串口驱动”所示,安装好串口驱动,此时电脑设备管理器,会识别到开发板的串口端口,如图 4.4.2 所示,其中名字为“USB-SERIAL CH340”,端口号根据实际情况生成,和本文可能不一样。 8 q+ d2 k0 O: P( @# y& L) X. ?7 F" I ![]() . h5 K, }/ q" l0 x 图 4.4.2 设备管理器 4 Y ~- {% F' K2 T0 ~) m3 X; l接着打开“100ASK_STM32F103_MINI开发板资料\3_开发软件\2_百问网STM32F103工具\100ASK_STM32F103_Tools”里面的“100ask_stm32f103_tools.exe“,如图 4.4.3 所示。& S- y; U3 W4 x1 I7 ?! W! z& q+ n * F0 g( F) C% Z7 P. F ![]() 8 ~4 E8 Y9 H# K 图 4.4.3 100ASK_STM32F103_Tools 这里要选择编程生成的“bin文件”或“hex文件”,打开配套资料的“05_程序源码”文件夹,里面包含了所有实验涉及的源码,找到“2_GPIO—LED点灯”并进入,再打开“Project”,双击里面的“Led.uvprojx”,如图 4.4.4 所示。 ![]() . \# {* X, O8 I. d# Z 图 4.4.4 LED实验工程 接着会自动打开Keil,界面如图 4.4.5 所示,可以把整个界面分为四个区域: ①功能菜单区:包含Keil的功能菜单,以及一些常用功能按钮; 0 `, z9 ]7 j8 F( ?+ B ②工程文件区:该工程所有文件的目录结构;( l3 V @$ a9 v7 R# | ③代码编辑区:在工程文件区选中任一文件,将在代码编辑区显示内容,供用户编辑;% d" g, _, I6 e) o1 ^4 a1 j 4 c$ c* S. y+ `8 i$ Z/ b ④编译信息输出区:显示在编译过程中的所有提示信息;( C7 H+ H, ^: ~' z( ^' } ![]() 图 4.4.5 Keil工程界面 , V5 S( T+ I( L Y" H" W4 L在功能菜单区,圈出了两组按钮,其中左边的一组与编译下载相关,从左到右,功能依次为: ) }! X- l4 f+ d0 A; a Translate:编译当前源文件,只进行语法错误的检查,不生成可执行文件,用来快速查看修改后的代码否有语法错误; Build:编译工程得到目标文件(快捷键F7),这里只编译修改过,以及和修改文件有依赖的文件,也就是增量编译,用来快速得到目标文件; Rebuild: 重新编译工程,不管工程文件有无修改、编译,会对工程中所有文件重新进行编译生成目标文件,花费时间较长;+ f+ i" M: V+ Q$ ?) S 2 j* |! T& B6 `' J& j Batch Rebuild:批量编译,当Keil存在多个工程项目时,用于多项目的批量构建、重建、清理等;5 p" }. }7 s6 }7 W: o0 e* t0 O " h& M: e ]. d8 R: V) a3 E; |! ~ Stop Build:停止编译,在编译过程中才能点击该按钮,用于取消当前的编译; + ?; }2 F5 P( ^4 A# X+ j' r Download:下载(快捷键F8),编译完成后,点击该按钮下载程序;- H1 [' P9 n, O0 n' H v 在中间的一组与调试相关,从左到右,功能依次为: Start/Stop Debug Seesion:开始/停止调试窗口,用于进入调试窗口,进入后会新增一系列的按钮,后面会仔细讲解;' B/ A, V* s1 j( h2 t - Y/ _. v) b" G& [( Z Insert/Remove Breakpoint: 插入/移除断点,在进入调试窗口后,选中想暂停的代码位置,点击按钮就会在该行出现一个实心的小红点,在调试时就会在该处暂停运行; # W. ?" j0 v- f5 H# m Enable/Disable Breakpoint:使能/去能断点,在有断点的代码行,点击按钮就会取消该断点功能,再次点击恢复该断点功能;, Q5 e; F. D% v; k- B# E Disable All Breakpoints in current Target:去能当前工程所有断点,保留了断点的位置,方便再次使能调试; " [1 f8 v/ j3 ?- i( }. e# ` Kill All Breakpoints in current Target:清除当前工程所有断点,整个工程不会再有任何断点; 对Keil有初步了解后,接下来就尝试编译、下载程序。点击Build按钮(快捷键F7),便开始编译程序,编译提示信息如图 4.4.6 所示,可以看到提示“0 Error(s),0 Warning(s)”,即没有错误没有警告,编译成功。0 Q+ J% H7 c( y' \ X& S, Z( q0 s8 b# C0 J- V( b ![]() 图 4.4.6 编译、下载提示信息 x0 J7 _8 w+ P& D% }7 j编译成功后,将在工程的“Objects”目录下生成目标文件“Led.hex”和“Led.bin”,点击“100ask_stm32f103_tools”的“文件选择”,选择“Led.hex”或“Led.bin”,如图 4.4.7 所示。 8 L- H% g* ^7 |) u8 j ![]() 图 4.4.7 选择烧写文件 & [3 E3 I4 ?& m* j) s5 f( i D& B$ v- o3 J9 w) e 点击“开始下载”,等进度条烧写完成,如图 4.4.8 所示,开发板自动重启,即可看到开发板LED闪烁。 ![]() ; k. H1 A# C: A& Y4 n/ x1 t 图 4.4.8 烧写完成 2 C* R" d" Y. N* S8 W5 y/ z' v" K- X9 B 2 P' ~3 i$ a: s+ ^* K! P 1.4.2 ST-Link V2 ST-Link是由ST公司设计,用于STM8/STM32微控制器的在线调试器/下载器。目前为止,ST-Link一共有三个版本。9 o" M6 v. p6 \$ ] A+ Z+ T ST-Link V1:早期版本目前市面很少看到,基本被V2取代; 4 t. Y1 c% t6 z) L$ H r1 }% k# h ST-Link V2:目前使用最多的版本,能够满足日常调试需求;/ z6 c" `% ~: K3 U p 5 i& \( M0 Q0 }9 ?' i+ q! q ST-Link V3:近两年发布的版本,功能、速度上都有所提示,价格较高,目前普及不高; \, R1 d' e$ r* b ST-Link V2本身就是使用STM32F103C8T6设计的,因此只要下载原厂固件,结合相应的电路,就可以将开发板变为ST-Link V2。' {9 S! Q& _' Y) q- @ & t" X# v' Z* y: I0 Q( w- ]( S 将开发板的 “USB切换开关”拨到 “非ON”一端,然后插上电脑USB口。打开“100ask_stm32f103_tools.exe“, 点击“ST-Link”图标,完成下载,如图 4.4.9 所示。7 E( Z+ f4 k# |% ~ Q5 ~$ N9 e* c ![]() 图 4.4.9 烧写ST-Link固件 下载完成后,需要将 “USB切换开关”拨到 “ON”一端,然后重新插入电脑,点击“确认”,进行升级,如图 4.4.10 所示。 / x" W( W; N& B4 k& q ![]() ' d! { n2 j) W 图 4.4.10 ST-Link固件下载完成 # `: T' z. m: z9 Z- J; a) I Z在弹出的升级界面,点击“Device Connect”进行连接,如图 4.4.11 所示。 d% X: y& f) P. n ![]() 图 4.4.11 设备连接 连接成功后,可以看到当前版本为“V2.J16.S4”,点击“Yes”升级到“V2.J38.S7”,如图 4.4.12 所示。 ![]() " u: d' C H9 w( H5 d 图 4.4.12 升级成功 升级完成,即可作为ST-Link V2使用。 连接100ASK_STM32F103_MINI开发板使用 7 q. A0 r( j3 G5 ^3 z$ X3 g6 } 对于100ASK_STM32F103_MINI,在设计上做了兼容,直接使用定制灰排线,按如图 4.4.13 所示连接,即一个作为ST-Link调试器,一个作为开发板,对后者进行调试和下载。# H# F! Q+ i' I: e6 B- v( w" n" v" l ![]() 图 4.4.13 连接100ASK_STM32F103_MINI开发板 l连接其它STM32开发板使用7 q; \1 _6 N. \0 _) Z6 I 连接其它STM32开发板时,使用如图 4.4.14 所示的“3V3”、“GND”、“JTCK”、“JTMS”,效果如图 4.4.15 所示。' r$ i/ O0 O, @3 \8 W6 f2 t " L0 R5 I( p4 f5 C ![]() ' W5 k; h! N' m: }6 {! p 图 4.4.14 ST-Link下载引脚 6 l* w7 g4 e+ ~; u% N ![]() a0 o3 L6 \ \. b 图 4.4.15 与其它开发板连接实物图 t/ v! p7 {; ]; r" {, \ 1.4.3 ST-Link调试下载+ E/ M* C! [% @0 u: U 将ST-Link与开发板连接好后,可以直接点击 Download下载(快捷键F8)。 " ^; M- ?6 k; `& F& ?4 s 有了ST-Link除了能下载,还能调试,比如前面串口下载的点亮LED程序,可能需要逐步执行排查问题,点击Keil的Start/Stop Debug Seesion按钮,进入调试窗口。 6 g+ r `6 z4 O; y$ A6 E/ v# H 默认的调试窗口界面如图 4.4.16 所示,可以大致分为五个区域,如图 4.4.16 所示,其中功能菜单区和用户代码区,是我们目前初步需要了解的,其它的读者可以网上查阅资料,扩展阅读。在功能菜单区,圈出了三组按钮,第一组是控制调试运行状态的按钮,第二组是控制各种调试窗口是否显示,第三组是前面介绍的断点添加工具。 / a5 h! D b. A5 f8 m8 y% r ![]() 图 4.4.16 Keil调试窗口 这里重点介绍下第一控制调试运行状态的按钮:5 G' G0 [; i N9 u Reset:复位,让程序从任一状态变为初始状态(跳到Reset Handler); ) z4 k3 p3 z, K9 u5 ?8 [ Run:运行(快捷键F5),让程序正常运行,遇到断点会暂停在断点所在代码行; % l n' k+ t* M \ W: I) P Stop: 停止,当程序在运行时,可以点击该按钮停止运行;5 P: k- g; y# h , K4 }4 t7 E# s/ g- w9 p Step:单步调试(快捷键F11),每点击一下,执行一条代码,遇到函数会跳进函数执行; Step Over:逐行调试(快捷键F10),每点击一下,执行一行代码,遇到函数不会跳进函数执行; B# L; ^+ C/ h* E Step Out:跳出调试(快捷键Ctrl + F11),每点击一下,跳出当前函数一次,直到跳到最外面的主函数(main函数);) Z+ T* D( G7 C9 t Run to Cursor Line:跳到光标所在行调试(快捷键Ctrl + F10),点击一下,运行到用户代码区的光标位置处停止,前提是光标所在位置能够执行;' U7 V% `. E! k$ P2 p$ }7 _ Show Next Statement:显示下一条语句,当打开了多个文件,不知道程序暂停到何处,点击该按钮可以跳到暂停处;" x" r" U5 `5 x7 _ & Q9 S4 R2 P. x. G3 S4 O 注意,每次修改代码后,都要按下Build(快捷键F7),重新编译修改后的代码,这样调试的才是修改后的代码。 ( K! } \6 W* i. j" K, { 下面来感受下调试,在前面下载程序时,体验过“2_GPIO—LED点灯”实验的效果就是蓝色灯间隔一秒交替闪烁。 进入调试窗口后,用鼠标选中“main.c”的28行,此时点击该行左边灰色方框处,或者点击功能菜单区的插入/移除断点按钮,就会在灰色方框处显示一个红色实心的断点,同理在30行添加断点,如图 4.4.17 所示。 同时,在18行左边有两个小三角形,蓝色图标表示光标所在的行,黄色图标处为要运行的下一条语句,可知此时程序暂停在18行处,还未执行18行。 2 J& @& h1 [7 M9 a# E5 I ![]() ; O# t% v. T! B 图 4.4.17 添加断点 3 d. m: |2 [4 l. B) k: C接着按下Run按钮(快捷键F5),可以看到小三角形跳到了28行断点处,表示现在停在了该行,因为还没有执行这一行代码,所以蓝色灯还不会亮,如图 4.4.18 所示。6 q5 u1 C Q1 @: [+ ~ ![]() 图 4.4.18 断点1 + N2 B; @; e% T2 {: @8 D- b接着再按下Run按钮(快捷键F5),小三角跳到了30行,此时观察开发板蓝色LED灯已经点亮,但还未执行30行关灯代码,如图 4.4.19 所示。( c! D9 ^8 l$ }9 _" p8 d" m- E" R 7 H$ ^4 L8 a# Y. M2 g6 U$ u! O ![]() " s, k' A. u* c7 m7 V 图 4.4.19 断点2 再按下Run按钮(快捷键F5),因为循环的缘故,小三角又跳到了28行,此时观察开发板红色LED灯已熄灭,28行点亮蓝色LED灯还未执行,如图 4.4.20 所示。! e4 c. \% x8 Z/ g , K; G0 M1 w& t' H9 { ![]() 图 4.4.20 重复断点1 通过调试,可以控制代码一句一句的执行,从而方便观察现象,排查问题。当然,调试远不止这些,实际开发中,还会查看寄存器值、变量值等,这些在后面实验中需要用到的时候,再详细讲解,目前读者只需要了解调试概念、基本操作方法即可。( I& a6 Z9 X( O7 x J( F5 U$ R 作者:攻城狮子黄 * {1 c: M) R5 O. D. f6 p) }& H' g 9 e z: I) {* l: h |
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
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数