STMCU小助手
发布时间:2022-5-6 09:55
|
1 概述 1.1资源概述* O* O6 }7 G' E" O1 x 开发板:正点原子STM32F103 Nano开发板 STM32 ST-LINK Utility版本:V4.5.0.05 K, p y! E. r7 l STM32CubeProgrammer版本:V2.4.0* D, w; V, J. `- ]3 L* Q MDK版本:V5.23! g: N! n" p3 c. f' t9 n/ Y6 B" I! ] 主控芯片型号:STM32F103RBT6 " C7 W, @. U+ [7 d s/ S1 N7 ]
$ k7 J |0 E& p% h% F* @ 1.2 STM32串口烧录方式 启动模式说明说明,我们选择系统存储器启动。8 d' ]7 a/ J& l; W5 X0 L
2 F' z! u' P8 m3 [ 内嵌的自举程序存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程: ● 对于小容量、中容量和大容量的产品而言,可以通过USART1接口启用自举程序。串口烧录的原理就是利用这个自举程序读取串口的数据,对内部Flash进行擦写,实现程序的烧录。 使用串口进行烧录,上位机可采用FLYMCU,然后通过USB转串口线(或者板)给目标设备进行烧录。需要注意的是,如果是M3内核非互联网型的板子这里的串口必须是串口1,对应为GPIO9和GPIO10。如果是M4内核,可以是下述端口。$ S8 n' Y7 Z5 H, y* q; D6 H* R2 i2 d4 D& B ● USART1(PA9/PA10)8 Q. ?* ] N% _# [ ● USART3(PB10/11 和 PC10/11)7 L4 M8 n0 p6 v3 Y, { ● CAN2(PB5/13)& w5 j: f- c3 m" U; q( F0 y ● USB OTG FS(PA11/12) 从设备模式(DFU:器件固件升级)。6 v7 f2 n! O6 N1 B9 d: a ; l7 Z2 _1 O) S* J, O
BOOT1设为0,BOOT0设为1,按复位键即可进入串口下载模式,打开FLYMCU软件,选择正确的串口,点击读器件信息,显示连接成功。$ Q/ _$ y) p" u
打开所需要下载的HEX文件,这里由于电路上没有自动复位进BOOT区的电路(正点原子部分高级一点的板子有),我们选择不使用RTS和DTR。点击开始编程。直至下载成功。
下载完成后,将BOOT0跳线跳到0,按一下Reset键,程序即可正常运行。8 I: P* V. B( a% ~ 使用这种串口方式烧录时,若选择STLINK进行烧录,将会报错。未检测到STLINK错误提示。需要使用另外的工具进行烧录。
2.KEIL软件下载介绍' M0 } G- A* q, v 可以使用KEIL内部集成的STLINK组件进行烧录,使用此种方式进行烧录时,将STLINK连接到电脑,在KEIL中可以检测到STLINK。 建立工程并编译通过后,可以实现内部集成的烧录工具实现对目标开发板(芯片)的烧录工作。 D' h: V r* L) y4 b( L$ }! ?
1 g+ p! V6 f2 G0 \/ h; R. |- \ 缺点是显而易见的,当我们工程文件缺失,只有烧录目标程序.bin或者.hex文件时,我们就不能通过这种方式进行烧录操作。接下来我给大家介绍两个ST官方的烧录软件,可以在ST官方网站上下载到。分别是STM32 ST-LINK Utility和STM32CubeProgrammer。
! F' R& ^ d' F8 r+ e2 e 3 STM32 ST-LINK Utility介绍 3.1 windows操作系统 上位机可采用ST官方的STLINK软件,然后通过STLINK模块给目标设备进行烧录。: P# }4 r/ D m# x5 U8 ? $ ]3 B- h1 y1 Q
此软件需要使用STLINK仿真烧录器,支持.bin/.src/.hex/.src/.s19五种格式的烧录文件下载。烧录文件在MDK软件编译工程时会自动生成。正点原子的例程烧录文件位于OBJ文件夹中(.hex)。如果是使用STM32CUBEIDE生成的工程,编译后烧录文件位于Debug文件夹中(.bin)。
- z+ a! e4 g( V8 k 这个软件支持开发板板载的STLINK V2.1进行烧录操作,不会提示需要固件升级等任何错误。具备烧录软件和芯片已烧软件比对灯功能。软件体积小巧,非常好用。4 K6 u& h. V& W, v+ [) k6 q5 H 3 S1 A! X* Q5 k" G, Y 3.2 Ubuntu操作系统中烧录 3.2.1 软件安装. S1 B2 G) e4 H 软件直接使用命令行安装即可,UBUNTU的源自带此软件,无需在github上下载源码编译安装。 M% H8 _' Y1 J" u( }7 D 0 n& H9 r2 L M/ W- P3 K( o
使用命令行进行软件的烧写工作,下载命令的格式,比如说可以使用st-flash erase对芯片进行擦除
3.2.2 软件烧录 软件下载示例,烧录文件为bin格式,需要带地址信息,sudo为非必须的,这里使用的版本是1.6.0
当烧录文件为hex格式时,由于hex文件里边包含地址信息,因此不需要再指定地址了,但是需要指明烧录的格式。
3.2.3 使用GUI界面进行烧录1 \" j5 X5 Z' E, E" R 安装STLINK-GUI后,可以使用GUI程序进行下载,GUI的显示界面如下 ! q* b( d) g5 R/ d, E7 O
3.2.4 更多详细信息% b( M0 h6 c W 命令行模式仅支持V1和V2版本的仿真器,并不支持V3版本的仿真器。" ]4 [( k+ N6 \6 m: ` 更多详细信息,可以参见GitHub的官方资料 : q) O- P2 A/ E 4 STM32CubeProgrammer 4.1 使用STLINK进行下载/ s, [, S5 i: G# H f* w$ @7 G8 h+ K STM32CubeProgrammer软件是ST新推出的烧录软件,支持更多的方式设置,官方定位是替代ST-LINK Utility。打开如下图所示,支持STLINK、USB、UART以及OTA(均需要对应的烧录工具)下载,支持SWD和JTAG。但是需要说明的是,这个软件烧录时,需要STLINK固件为最新。使用正点原子Nano开发板时,会提示软件非最新,不能进行连接。3 s+ X3 Q, E& Q$ E' N
. ?& V) d1 Q W! R* A 弹出的固件需要升级的错误 {) \( E1 x- ~: C0 ]) Q9 c+ a% y
如果买的是官方出品的STLINK,可以正常对固件进行升级,如果不是官方的烧录器,升级前请三思,升级后有可能导致烧录器不能正常使用。下图为点击firmware update后出现的弹框。0 ^% C/ F! j% Z : ^& e' s% x& H: W T4 J- r, f7 G
: i* s; i# ?4 X7 T& u) E& d 使用正点原子Nano开发板也无需担心会升级导致不能用,因为你尝试升级时会弹出另外一个提示,需要额外的9856B空间,不能进行升级,原因是我们板载的STLINK芯片采用的STM32F103C8T6只有64K空间,这部分空间已经全部用完,不能再写入更新更大的固件。# Q+ [0 q* S# Z* [ S- k$ |* ^! \# k5 z
另外这个软件也集成在STM32CUBEIDE软件中,STM32CUBEIDE为ST将eclipse、STM32CUBEMX和STM32CUBEPROGRAMMER集成整合到一起的综合编程软件,目前用的人还很少,挺好用,而且免费,跨平台。连接成功的示意图如下,默认会把芯片内部的程序读出来,可以对此程序进行另存为等操作。* b2 ^2 k5 u& }& Z6 r$ j/ a5 ]: k3 c9 \ 1 {* I4 p1 ~( E. B
使用此烧录工具,烧录时还可以对芯片进行读写保护,避免芯片被恶意读出盗窃烧录底层。6 p3 G1 O1 G6 A* @+ I4 b8 @' j6 l 9 g1 ?& {. @: Q" g, O8 I# Q
在ubuntu中此软件和windows下是相同的。 ! P8 c! l& c6 ]& F4 p$ V: @ 4.2 使用串口进行下载& L, v- j* v* r; R3 z* ` 我们在此软件中,可以使用串口进行连接烧录,这样做的好处是不需要使用第三方串口烧录工具,另外cubeprogrammer也不会对STLINK的版本信息进行核验。 1.BOOT设置,将BOOT1跳到0(开发板已经默认拉到地),BOOT0跳到1(3.3V)。按一下RESET按键$ y, Q" \" e: J) X+ l
2,打开软件,选择Uart和正确的COM口,由于用的是串口,因此就和stlink无关了,用一个USB转串口线也可以进行下载。7 m3 b- X4 T x! s' ] ! p& z6 @' `; h( \
: S% @4 L. k. z. f+ T$ Z# b 3,连接成功后如下" X6 C/ p* [# ]. S3 e" X # a: @' F, ?' h- Y0 l; _ 1 Z) k* ]7 @- _ l' g ) z/ B$ M6 X: O' K) }9 z 4,选择要下载的文件下载,下图所示已经下载成功。" V4 P. ^* E5 C! }2 L) B A 4 P* S8 L8 u' X9 ]8 z$ M
5,将BOOT0跳线还原到BOOT0。若上图勾选了Run after programming,则无需按Reset即会运行新程序,若没有勾选,按一下Reset按键。. W+ t G' g/ ~2 E' G 5 官方正版STLINK仿真器3 h6 b4 b. g9 p0 M f 5.1 STLINK V3 mini下载器 这里我推荐一款官方的正版仿真器,即STLINK V3 MINI,ST官方近两年推出,采用了STM32F723的芯片,比常见的STLINK V2拥有更多的功能,更快的速度。7 h# x# `( s* }- S' j 2 i+ T' z: v! o" Y" R; A' ? O; K
这个仿真器非常小,比通常的U盘还小一号,且排线为14P 1.27mm间距的排线。因此不支持常见的2.54杜邦线连接,需要额外的转接板进行转接。这里需要特别注意。此款仿真器支持一个虚拟的串口(13脚和14脚),支持SWD和JTAG烧录,端口定义如下:
嘉立创白嫖自制的转接板,此板的J4插座还支持NUCLEO的SWD扩展口的转接,按键为RESET按键,可以下载完成后手动对烧录好的芯片进行复位。
" o3 u0 m3 m+ z$ e$ p9 i3 [ 背面引出的串口,本想放在正面的,结果实物比封装大,翻车了,而且1.27的插件不是一般难焊,很容易连锡。
( Q7 |' z( B+ Q. z' y: T& o- A STLINK V3版本的速度比V2的要快,缺点是不支持山寨芯片,接上后提示无法连接到目标,而STLINK V2是支持山寨STM32芯片的。目前V3系列暂时未发现网上有仿造的产品出售。这款性价比比较高,淘宝价格80元,推荐各位购买。 ! c9 R$ F p1 l: L2 o1 S 5.2 集成在官方开发板上的STLINK; v1 h, m5 c) u9 h 官方的开发板集成了STLINK,这个STLINK可以对外进行烧录。这块部分可以裁下来单独使用。当烧录外部设备时,需要将外部烧录跳线拔下来,然后将烧录口和目标板通过杜邦线进行连接。不同的开发板对应的STLINK版本不同,F103对应的是V2.1,F7开发板对应的是V3.0。7 v4 u8 x4 |* u' U$ \/ B* m% d
可以做一个6PIN转20PIN的转接板,转接到20pin上,成为一个标准的下载器。
6 连接异常处理/ ^$ F( j$ S/ q 6.1 能连接但下载报错解决方案' |5 C, ~0 G, @* z6 O/ \# f 使用杜邦线进行SWD连接时,如果是散线或者线缆过长,会出现KEIL能连接上,但是下载报错(flash错误或者M3错误)的故障。将线缆更换为排线或者降低线缆的长度可以解决这个问题。$ t1 h# ?7 V; Z# ?2 n; f6 J - E2 d( u# s7 N- _4 ?' r
$ w/ k# M* _9 j% A, ^ 6.2 特殊IO口使用导致烧录一次程序后SWD口不能用 JTAG或者SWD端口被占用,但是却没有进行正确的配置。 在开发STM32F407芯片时,调试18B20温度程序时发现一个问题,当下载完一次程序后,SW就失去连接5 ?5 L% Y2 ]- z ( ]1 B1 q% ~. ?* U: ]% a
" u6 S# u( W0 o( Z2 s 强制烧录时报错信息如下:No target connected! A) k/ n. h# h/ A- i3 h 8 @( b" D" Y ^
报错信息Error:Flash Download failed-Target DLL has been cancelled) [# `0 R- C: U4 P8 h4 h ; v8 T& R" a% k7 K
使用utility连接也会报错,报错信息如下:Cannot connect to target ^& Z" k D& o+ U! R, o. [* B* O
/ l; D h6 Z7 f' \) A 按照提示,在烧录时按Reset按键,成功烧录了软件。使用一行行注释排除的方法,最后定位在DS18B20_Init初始化函数这。程序使用了PB15作为了18B20的输入,这个口也是JTAG的接口,在使用时,不能按照常规GPIO口进行配置。使用时,需要先禁止JTAG,然后使能SWD。如果弄成了最后一种模式就SW下载方式无效,需要按住Reset复位重新连接烧录了。) Q4 C. V, I& O# P, S( L! Q * }6 P: ^& R; a& A( z6 z0 ]
8 p2 d4 b+ K6 q, Z 为了验证这个想法,在程序中将A15改为B15。更改初始化函数4 `- H8 M8 _( A2 c# Y8 b1 Z - [' k2 `9 K3 ^) R+ h7 ?. F
更改头文件定义
更改后,可以通过编译,下载后,KEIL也能扫描到设备。 ! t; \9 Z- Z |$ z
6.3 能识别到芯片,但是下载时弹出报错对话框! X6 D7 k* e7 `7 v/ ]' O. K 使用5.34版本的Keil,能识别到芯片,但是下载时报错 Command not supported 8 `. F1 U* s8 j0 Z" }6 E& z |
点击确认下,报另外一个错误
原因是新版本软件对未能及时升级STLINK固件的烧录器进行了封杀。需要升级仿真器的固件。当然盗版仿真器不能升级固件,唯一的解决办法是将Keil进行降级处理,降低到5.27版本。下图是在keil升级固件的方法。用正版仿真器实验过,没有这个问题。: ?$ Q5 k/ q1 z4 b# n1 r1 m+ z2 d : G( O. |- m+ W! o+ f A% a0 t
* D$ g6 K) V4 ?0 d2 s, v: l 7 stlink对芯片的部分Sector进行擦除& P4 O5 D% i' x8 _5 @ 在使用Bootloader+App的使用方式时,我们烧录App时,如果每次都对全片进行擦除,那么每次的Bootloard将会被我们擦除掉,导致程序需要下载两遍。我们可以选择对部分的Sector进行擦除,而不是全部。 案例:某个Bootloader对应开始地址为0x8000000,结束地址为0x80042B0 APP应用对应的首地址为0x8010000 # e$ l6 y# Q9 P4 s8 H4 L3 y
结束地址为0x8015BD0 : E4 T# |1 d' G" {3 g3 h( T, ]( \
当我们不希望擦除Bootloader时,我们可以选择Sector擦除,擦除APP对应的地址段。 7 e$ e6 U7 G c5 d+ }
9 F1 O- C- ?" {- L4 y8 w- Y1 n 此时程序回退到没有下载APP时的运行状态。可以继续下载新的APP应用程序。4 u" T) V# X( A' l# T 9 k" Z) [/ D& K$ P8 C7 x# o & `; C' d# p0 O$ k( h8 h |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版