
1 概述+ Z( L; \6 d ^+ h4 ~ 1.1资源概述 开发板:正点原子STM32F103 Nano开发板9 X8 v( i1 p' g9 W+ [( u STM32 ST-LINK Utility版本:V4.5.0.06 }% |3 p; p0 o$ p! t STM32CubeProgrammer版本:V2.4.09 [" n$ m* u' z$ O# [$ | MDK版本:V5.230 ^7 P' H6 C( m8 i1 y# K+ e 主控芯片型号:STM32F103RBT64 m" V, r* v6 x& b$ v; k; Q h + C5 ]5 |' r! R8 C" e+ f: @0 f% P ![]() + w& Y$ B* k+ p, [# N. F 1.2 STM32串口烧录方式 启动模式说明说明,我们选择系统存储器启动。 ![]() 7 F3 h9 h0 ~, D; y# D6 b; Y9 u: F" T, X 内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。/ Y/ g( ^; T6 x, q0 G; P* S 使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。1 b; I o9 t( j8 g/ Y- o ● USART1(PA9/PA10)+ u' k9 \! Y: J9 @5 p ● USART3(PB10/11 和 PC10/11) ● CAN2(PB5/13) ● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。 . r9 C. F7 `# R ![]() BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。) k' }+ Q) i5 ^1 [ [# c ![]() 打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。9 }5 z2 r+ \- O2 m% F% A% p3 B: s [! i& M1 ~+ m ![]() " E; T8 ?0 i; h$ l- k 下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。 使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。 / E/ v3 m% H1 H0 ~1 S5 R5 H O ![]() 1 i& I! ^0 _7 A o6 q 2.KEIL软件下载介绍 可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。 建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。 2 ]( p& \- W5 N5 ~) W/ b- P" K! ~ ![]() ; {+ n; g) H6 d2 r* S) X, F& N6 g 缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。1 a2 s+ C, d7 s# h8 ~ Q' W& E - `1 R( Y# x) i2 a' W ![]() ; y J7 e9 ^6 ^7 Q$ y 3 STM32 ST-LINK Utility介绍 3.1 windows操作系统$ l& K7 X3 Q! y1 N5 ~6 A 上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。& U. m5 q, y) [# f2 d. Y6 g ![]() 此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。 7 K' z, I0 \* x) u ![]() 这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。 3.2 Ubuntu操作系统中烧录 3.2.1 软件安装8 q+ C* c, d& K* G% M- O 软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。; d3 x+ t- A% C e
使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除
3.2.2 软件烧录 软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0, M) {$ f2 P; N1 L L
当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。; |- o/ m" r" B$ }$ h/ H& _, {3 x ) o% i4 _( {5 h& u1 D
3.2.3 使用GUI界面进行烧录 安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下" v, r: e% ] Z8 e) K, C ![]() ' R3 ]1 @) ]- Y, I% S& Z: f- J 3.2.4 更多详细信息 命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。" g/ h A- X$ V4 T" P 更多详细信息,可以参见GitHub的官方资料! T7 |3 \6 K! Z 4 STM32CubeProgrammer 4.1 使用STLINK进行下载. u$ E% a7 {9 W+ B3 g ` STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。$ d! ]- {( `/ `. \: ?2 x* \ ![]() $ j8 i& J( B# V& P 弹出的固件需要升级的错误 B$ g* k# ^( i) B1 N ![]() ! t$ s( E2 ] ~- N# `# f 如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。 ![]() 使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。8 n% @: V! Y: S% w" { n5 G ![]() 另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。" S- Q i4 Z8 y) A- W8 _ ![]() 6 y- R1 X" R; Y- {( x4 l/ E2 G 使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。 g& d5 t) G2 `2 L2 M i! w7 D7 Z/ n ![]() # [" Q: S5 E+ ^* m' o: T 在ubuntu中此软件和windows下是相同的。4 \* q f; Q3 ^$ v 4.2 使用串口进行下载% b, @- g2 _1 \# D/ u 我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。: R7 v4 {7 S8 P% E {- ?3 M / f3 V9 J9 G% }# N 1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键 ![]() 7 H, l" X4 T* q. E+ n- x 2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。5 y) C4 [3 M; F ![]() 6 y: s' g/ z8 R# b$ [1 P 3,连接成功后如下 ( s3 C2 Y4 O5 n 4,选择要下载的文件下载,下图所示已经下载成功。* E: R5 R$ ~5 a* p4 A " W; U& Y' S& C; ] ![]() 5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。+ z/ W/ j5 m6 g2 D1 Z% w 5 官方正版STLINK仿真器4 m* _4 a: j4 `: ~* ^ 5.1 STLINK V3 mini下载器- [/ r" P8 S: }- H 这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。 ![]() 这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下: i1 {7 m& s+ M 7 g, i% w- z9 m d ![]() 嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。 ![]() 4 w0 K1 d( x% R' h6 ~/ p3 V( }0 g 背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。. l; _, @% d( h, R b0 H! m x" @) [ |0 D, p$ [- S# X' I' h ![]() / w5 ?% J2 q" p4 L. n# w/ X" A- | STLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。) ]; k. g; L+ f9 |( d 7 ?3 z" I, I) O# ? o# m8 Y* K# _$ c 5.2 集成在官方开发板上的STLINK G! ^( m, b; I! G+ n' \0 v/ g 官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。7 M4 H9 B9 O; R/ w d ![]() 可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。 ![]() 6 连接异常处理7 ?7 {- F' T0 [8 F$ L! E' ?( a 6.1 能连接但下载报错解决方案 使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。' }' M: H& S" _" _7 Y ; F6 e! a0 } u. Z ![]() 6.2 特殊IO口使用导致烧录一次程序后SWD口不能用& ?' O1 C2 ^8 v3 N w( F JTAG或者SWD端口被占用,但是却没有进行正确的配置。# l. ]/ V. ^/ e2 j: P, H, ]- L 在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接7 w/ K0 h" g5 B6 s: G* q+ t% G5 b ![]() 强制烧录时报错信息如下:No target connected " S& X' j' G: E ![]() 报错信息Error:Flash Download failed-Target DLL has been cancelled7 F5 [3 M5 D1 ? ![]() 8 Y. t, r; @0 r. X6 T; { 使用utility连接也会报错,报错信息如下:Cannot connect to target ![]() 7 D4 m) O5 R8 ^; v9 ?3 [ 按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。! v, L9 p! B9 U% K& p2 q 9 j4 r9 Q- e3 t6 i: n1 ^ \2 x P ![]() 为了验证这个想法,在程序中将A15改为B15。更改初始化函数 5 r) I: A( b- r' y: J
更改头文件定义
更改后,可以通过编译,下载后,KEIL也能扫描到设备。 ![]() & L+ g$ B2 X: n- ^ 6.3 能识别到芯片,但是下载时弹出报错对话框" w1 I6 I5 R. S0 ]; Y 使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported# | y3 y8 G; g1 I+ E+ X ![]() 点击确认下,报另外一个错误# ]# [1 k! Q: A2 V - ?! y+ E M0 j' j0 Z. { ![]() 9 a4 A$ ]% t- g# _, | 原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。 ![]() : k p' P p2 D# E9 P; f4 s6 w+ ^ 7 stlink对芯片的部分Sector进行擦除- f& S; p, l; I5 j- k. R$ b4 f' ^ 在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。7 F3 s2 e$ T3 F; ^; Z* v2 t+ e 案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0* u" h0 k( T2 {: z. p% t APP应用对应的首地址为0x8010000 0 i5 U$ i& B% l o/ a7 y ![]() ' ]2 s4 T" t8 j+ l, h 结束地址为0x8015BD02 }( N3 e% V: X8 q8 } 4 F) i, S# m& |! v ![]() - Y; o" w- I- o) d9 F 当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。 ![]() 7 h# k ?2 t- @8 Y 此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。/ C8 O5 p5 A/ }% a $ |8 t% p. v6 k+ u $ w& v* i' ^8 a d |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命