STMCU小助手
发布时间:2022-12-7 16:03
|
STM32介绍 STM32命名/ l4 W5 b1 D, n- S1 S$ } / A. f9 T# C! @% b
6 s W( D& x! B& J. S armV7的三个系列8 F7 U! @/ m/ T5 j9 {& X A:针对操作系统7 F. G2 m8 b5 Y3 `: ]. `6 \# E# N& | R:针对实时系统 M:针对微控制器 m H/ G7 Y8 X0 Y& O. o7 t9 g. g( Q. K STM32F103: S; M5 f$ ?3 \8 c1 [ STM32F103资源4 x7 S) m; P' T/ c 64KB SRAM 512KB FLASH6 \; t0 S, [- F9 j5 | 2 个基本定时器、4 个通用定时器、2 个高级定时器 2 个 DMA 控制器(共 12 个通道) b8 K4 P P5 S- m. b D! C 3 个 SPI% a1 i* X3 ]4 u" ~: R, D4 ~& G- g 2 个 IIC 5 个串口 1 个 USB; j) k: d! E# J! m* h9 K! P% L7 d 1 个 CAN. a* f! d# j/ t0 {) c8 S+ X 3 个 12 位 ADC、1 个 12 位 DAC 1 个 SDIO 接口、1 个 FSMC 接口9 M, ^) [- v8 E8 a! b0 Z# y# h 112 个通用 IO 口# C5 Z7 f! ` E7 k0 N2 I* u- f 84个中断,16个可编程优先级,任意脚中断 L1 B; h8 t5 @ 带有外部总线(FSMC)可以用来外扩 SRAM 和连接 LCD 等 STM32F103总线架构- L1 N5 i/ |* S0 Z2 m/ Q; h3 ~
6 R/ ?( r5 A1 i2 e1 k 四个驱动单元是: 内核 DCode 总线; 该总线将 M3 内核的 DCode 总线与闪存存储器的数据接口相连接,常量加载和调试访问在该总线上面完成。 |# \3 @ K6 c 系统总线; 系统总线:该总线连接 M3 内核的系统总线到总线矩阵,总线矩阵协调内核和 DMA 间访% F3 r+ I- ^5 l; I 通用 DMA1; R: @% s7 z7 J. w- q7 i 通用 DMA2; DMA总线将 DMA 的 AHB 主控接口与总线矩阵相连,总线矩阵协调 CPU 的DCode 和 DMA 到 SRAM,闪存和外设的访问。0 ~5 v3 `( j' I" ` U ! P i% A& f+ ]. q 四被动单元是: AHB 到 APB 的桥:连接所有的 APB 设备;2 z1 Q% a; ~% n9 E AHB/APB 桥:这两个桥在 AHB 和 2 个 APB 总线间提供同步连接,APB1 操作速度限于36MHz,APB2 操作速度全速。 内部 FlASH 闪存;# D% a2 [5 w% l7 O7 ? 内部 SRAM;' U0 c: O3 T. m. A FSMC; 总线矩阵# D# R7 U) o6 z3 E1 z 总线矩阵协调内核系统总线和 DMA 主控总线之间的访问仲裁,仲裁利用轮换算法。 ICode总线 该总线将 M3 内核指令总线和闪存指令接口相连,指令的预取在该总线上面完成。 STM32F103引脚
# e0 K( Q( z) \9 T$ D/ y & \/ x: `- ~. Z. P; _: | STM32F407 芯片 * ?/ Z, z9 N: U% c N+ X+ M
STM32F407资源. G+ [, A U" t4 P 1.内核6 \& E) q9 L' q* ^ D, u5 X 32位 高性能ARM Cortex-M4处理器6 |3 N7 e2 \: j0 T: H* n 时钟: 高达168MHz,实际还可以超频一点点 stm32f407的主频通过PLL倍频后能够达到168MHz,而且芯片内置一个16MHz的晶振和一个32KHz的晶振,可 以满足不同功耗的需求。 支持FPU(浮点运算)和DSP指令6 X' t+ S1 n' I' J 2. 144引脚 114个IO口 3. 存储器容量: 1024K FLASH, 192K SRAM' u% ^* o9 \& K* H# E }+ `9 d0 e% M, u 4. 4~26M的外部高速晶振/ |1 w3 v1 ?3 \: `% { b 5. 内部16MHz的高速RC振荡器, f* f# ]! \4 N& Z: K 6. 外部低速32.768K的晶振,主要做RTC时钟源2 [# Y4 N' E) H& O 7. 3个12位精度AD[多达24个外部测试通道]5 @3 k6 R* A0 C# g R3 D# s
$ H! W: _, M, ?- w- P5 j/ c 8. 2个12位DA 9. 16个DMA通道,带FIFO和突发支持 10. 定时器多达17个. {- e" i/ o8 I 10个通用定时器(TIM2和TIM5是32位)- E* _: J) l6 y 2个基本定时器# T& K9 ]. `) c( J6 m$ S 2个高级定时器$ M) b5 u4 z/ w/ g: e 1个系统定时器/ ]2 b% q( [2 J! b# x 2个看门狗定时器-( |8 d8 ^$ @! G4 X5 a 11. 个I2C接口 12. 6个串口. |0 P) a& S' o; W) W) K& V3 ? 13. 3个SPI接口9 p: r1 y8 {4 P8 a 14. 2个CAN2.0 15. 2个USB OTG 16. 1个SDIO F407总线架构
主系统由 32 位多层 AHB 总线矩阵构成。 总线矩阵用于主控总线之间的访问仲裁管理。 仲裁采取循环调度算法。 总线矩阵可实现以下部分互联:" a+ ~# C* i8 b$ S% Y: H5 y 八条主控总线是: Cortex-M4 内核 I 总线, D 总线和 S 总线;: Y" @6 K* K2 R7 k DMA1 存储器总线, DMA2 存储器总线; DMA2 外设总线; 以太网 DMA 总线;. z8 q) @9 J6 M5 h$ @3 @5 g USB OTG HS DMA 总线;4 j) T" N% n0 w! F4 I$ b. d9 H 七条被控总线: 内部 FLASH ICode 总线;3 ]( q y% m8 ?4 W# z B$ D( Z# Q3 E 内部 FLASH DCode 总线; 主要内部 SRAM1(112KB) 辅助内部 SRAM2(16KB);8 H- @' c" m# _. ~/ P/ Y$ T& @ 辅助内部 SRAM3(64KB) (仅适用 STM32F42xx 和 STM32F43xx 系列器件); AHB1 外设 和 AHB2 外设; FSMC: O, R. |/ s7 q! X STM32F407系统框图2 ?: s2 V# T8 q: _: B6 O) |! h
. ?" ?1 R9 E- A9 ^: _ STM32F407地址分配 # K' N& w7 p3 I7 q G! Q. n
7 G( D0 x4 L1 y; b# ]& L. [# D 0x0800 0000开始的flash,从0x2000 0000开始的sram这两部分,其中flash是我们代码烧录的地方,sram是我们程序执行的内存地址。) I" t# N. T8 P, v* p; Q* s1 I
STM32开发1 _8 v& h( C4 G/ B% K 固件库概念 FWlib叫固件库,FW的单词是Firmware.即固件的意思。STM32的固件库包含C文件和H文件,主要用于存放STM32的一些寄存器的定义及一些底层驱动函数; C Y( X' `0 I* U) {5 S* y 容量* F7 H- G) [( a5 Q2 K8 U 对于 103 系列,主要是用其中 3 个启动文件 • startup_stm32f10x_ld.s: 适用于小容量 产品,小容量:FLASH≤32K • startup_stm32f10x_md.s : 适用于中等容量产品,中容量:64K≤FLASH≤128K! ?- [# [, K5 h l M0 S • startup_stm32f10x_hd.s: 适用于大容量产品,大容量:256K≤FLASH" }4 i/ d2 L: F" V/ ? % r2 X$ D; M5 l; W% h' g6 G STM32启动模式 B0 B1 启动模式 0 X 主闪存存储器 1 0 系统存储器( Z) V' m6 `5 z$ h6 P3 [2 b. n 1 1 内置SRAM . A+ z9 L8 O+ A4 m STM32软件 MDK介绍 • MDK是keil公司开发的,为基于Cortex、arm7、arm9等处理器设备提供的一个完整开发环境。; I6 k8 D I, z+ g1 h8 \ • MDK(Microcontroller Development Kit,字面的意思就是“微控制器开发套装”)。 ( T; d8 O9 L& z R! P$ A MDK安装 o 在软件资料,1,软件,MDK55 U5 b9 S) w" ?0 C L o 无脑安装" G3 |8 ]) H) o. x `# w4 X' ~2 S • MDK5破解9 ~: q( p1 y; T' A, E o File license Mangement 复制CID) C! f/ {, Z! S! J4 h$ j0 R o 在keygen破解软件中运行CID 得到秘钥,记得选择32 o 用管理员身份打开MDK5,再次进入license Management 的New ID Code粘贴 生成HEX文件 点击魔术棒,进入配置菜单,选择 Output。然后勾上下三个选项。 其中 Create HEX file 是编译生成 hex 文件,Browser Information 是可以查看变量和函数定义。 / x) u& q! X0 i% ]% N
- j( j9 ^6 X) i. K + Z9 H* P9 v7 u; ^8 s 支持包安装6 S% e$ U8 {; ?- ? 9 i. R6 p6 W0 L/ c
r* z! T+ W; R0 Z7 @ 可以下载软件,Keil.STM32F1xx_DFP.1.0.5.pack7 c0 d- O& Z* @+ e/ V I 双击安装 添加宏 因为 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。2 S$ N2 q* b; }- k( N ?3 V, q c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面 如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。
3 M5 n. m- I, G 添加头文件路径 对于任何一个工程,我们都需要把工程中引用到的所有头文件的路径都包含到进来 。- Y/ J; c3 E; g4 o# U: T/ d' Y 点击魔术棒 ,出来一个菜单,然后点击 c/c++选项.然后点击Include Paths 右边的按钮。 弹出一个添加 path 的对话框,然后我们将图上面的 3 个目录添加进去。2 L+ \2 e+ P5 W6 K6 |% v 记住,keil 只会在一级目录查找,所以如果你的目录下面还有子目录,记得 path一定要定位到最后一级子目录。然后点击 OK.
9 v9 O3 g' k7 ^. s7 b0 q 库函数选择外设 3.5 版本的库函数在配置和选择外设的时候通过宏定义来选择的,所以我们需要配置一个全局的宏定义变量。) A: p8 z' g& U5 M2 q8 `7 O c/c++界面,然后填写“STM32F10X_HD,USE_STDPERIPH_DRIVER”到 Define 输入框里面8 \ A3 w" x+ Z4 a 7 ?; D! p4 J. {5 E8 d8 ^* j1 g& L, N$ V
如果你用的是中容量那么STM32F10X_HD 修改为 STM32F10X_MD,小容量修改为 STM32F10X_LD. 然后点击 OK。! c2 E7 w( J8 }1 z) G : g* R ~+ I1 x- d: }6 I4 j 编译输出4 ^( u7 Q# v& _0 [2 V
编译工程,在编译之前我们首先要选择编译中间文件编译后存放目录。- V5 R( @/ Y6 ^" v) i 方法是点击魔术棒,然后选择“Output”选项下面的“Select folder for objects…”,然后选择目录为我们上面新建的 OBJ 目录。 这里大家注意,如果我们不设置 Output 路径,那么默认的编译中间文件存放目录就是 MDK 自动生成的 Objects 目录和 Listings 目录1 \2 V4 I$ ^' a6 L9 o) s 第二个图标是全部重新编译按钮(工程大的时候,编译耗时较久,建议少用) % J. D4 K' P. q5 a! L% {) J 编译成功
从编译信息可以看出,我们的代码占用 FLASH 大小为:5 K% I8 L5 l: v( o2 K 1892 字节(1556+336),所用的 SRAM 大小为:1864 个字节(32+1832)。 Code:表示程序所占用 FLASH 的大小(FLASH)。/ K) x# r- A I6 _5 N0 N8 `1 J RO-data:即 Read Only-data,表示程序定义的常量,如 const 类型(FLASH)。4 s( y, {$ R$ {) ?2 k RW-data:即 Read Write-data,表示已被初始化的全局变量(SRAM) ZI-data:即 Zero Init-data,表示未被初始化的全局变量(SRAM) 1 d$ ~% V m( T* m( ^ flymcu使用 串口下载软件 flymcu,该软件是mcuisp的升级版本(flymcu新增对STM32F4的支持),由ALIENTEK提供部分赞助,mcuisp 作者开发
特别提醒:不要选择使用 RamIsp,否则,可能没法正常下载。 DTR 的低电平复位,RTS 高电平进 BootLoader; M8 f* B$ j9 b" x2 a) m# q 选中这个选择项选,flymcu就会通过 DTR 和 RTS 信号来控制板载的一键下载功能电路,以实现一键下载功能。这个是必要的选项(在 BOOT0 接 GND 的条件下)。4 [7 o R2 k3 B3 A8 Z) f' W 9 E! e& H( a4 @3 l ) @/ [$ y( v9 T: v0 n
第 1 个圈,圈出了 flymcu 对一键下载电路的控制过程,其实就是控制 DTR和 RTS 电平的变化,控制 BOOT0 和 RESET,从而实现自动下载。) C4 s/ S. a* v# J, G( { XCOM 串口调试助手,直接打开,设置串口即可(程序中要通过对应的usart发送内容)
' c7 Q2 w! J7 F8 W/ w2 z ) Y+ p+ d* ~) x; u: G/ @ 程序下载电路; G5 j0 y- b+ X( O; |" _, m 5 q1 ]" Y( ]# f; g8 ?
1 c D Y* U/ p9 a USB 转串口,CH340G,是国内芯片公司南京沁恒的产品,稳定性经测试还不错,所以还是多支持下国产。 首先,mcuisp 控制 DTR 输出低电平,则 DTR_N 输出高, 然后 RTS 置高,则 RTS_N 输出低,这样 Q4 导通了,BOOT0 被拉高,即实现设置 BOOT0 为 1 同时 Q3 也会导通,STM32F4 的复位脚被拉低,实现复位。6 O( v& K! ]6 f 然后,延时 100ms 后,mcuisp 控制DTR为高电平,则DTR_N输出低电平,RTS维持高电平,则RTS_N继续为低电平 此时STM32F4的复位引脚,由于 Q3 不再导通,变为高电平,STM32F4 结束复位) L+ X/ ~- l5 y3 ~1 N- ]. ]; o) m 但是 BOOT0 还是维持为1,从而进入 ISP 模式,接着 mcuisp 就可以开始连接 STM32F4,下载代码了,从而实现一键下载。3 k& K! o: w, @/ b STM32调试7 \7 m: {* T9 V5 s9 {/ ` x/ p JLink. Y% C& G! \$ U0 V* a JTAG与SWD是个接口,JLink指的是仿真器 串口只能下载代码,并不能实时跟踪调试,而利用调试工具,比如 ST-LINK,JLINK 和ULINK 等就可以实时跟踪程序,从而找到你程序中的 bug,使你的开发事半功倍。 + u8 k; p; E4 x$ U2 S
# i% x7 r. ] }. \& B* c 6 n/ O9 b7 o6 G0 J0 l JTAG/SWD 调试原理
串行接口,就是SWD,通信数据线两根# k+ |2 t5 W( M6 o5 F7 a' G" a8 f( V8 e JTAG,通信数据线五根,所以用SWD多* {& z+ @* s H; t' g3 Q
使用SWD的话,只需要SWDIO与SWCLK两个引脚。 使用JTAG的话,五个引脚都要用到。6 b8 p9 ] S2 x9 I ) ?* h9 Y; }* f6 W9 n3 \# n8 d: Z SWD与JTAG的端口映射) E1 P# U' S7 a8 R ' H2 t' y$ `4 G; Q, {( \% s
, S( Z( d" K# r E 默认的五个口不能作为IO口输出
2 ^5 B& t5 k- Y6 q$ g 认这五个引脚复位了之后都是用来仿真的,是不能正常使用的,只有禁止了相应的端口,才能释放IO引脚1 e; U; m3 X4 K" z) T/ ~: H/ d1 a ' Q p( {/ a. z! r JTAG/SWD硬件* l6 W5 J5 ]2 h& C& u: u; I6 j
7 c! o# J/ ~( h8 b- s. {/ m( i STM32 的 SWD 接口与 JTAG 是共用的,只要接上 JTAG,你就可以使用 SWD模式了(其实并不需要 JTAG 这么多线),当然,你的调试器必须支持 SWD 模式,JLINK V7/V8、ULINK2 和 ST LINK 等都支持 SWD 调试。3 y* L9 a9 b$ S! Y$ C3 y$ [ 0 N L# Q3 f' P. L, u7 R& I 设置禁止JTAG (在文件stm32f10x_gpio.c中):调用该函数,有三个选项。407没有复用概念。" S6 d+ z; M% S# W7 j4 L
JLink配置 魔法棒-Debug-JLInk* \: t2 y v2 l
4 i- b7 u# g5 F" T' Y8 O/ Y8 {4 r: [ 上图中我们还勾选了 Run to main(),该选项选中后,只要点击仿真就会直接运行到 main 函数,如果没选择这个选项,则会先执行 startup_stm32f10x_hd.s 文件的 Reset_Handler,再跳到main 函数 0 ~* S' x6 ~# U$ W. R3 X setting JLink* {4 P: N( _0 z& O
选择Jlink的时候一般选择10M,JTAG5M就可以了' d, f Z% x$ W: d2 J! F! t7 Y 在 Utilities 选项卡里面设置下载时的目标编程器 , Q2 ]0 z6 f8 T N5 [( V
. V1 A. p) a; Z9 B4 l+ D& w 进入 FLASH 算法设置Flash DownLoad,在setting的右边两个按钮 i+ [1 e! d, H5 H . g$ C) e: [+ k& u8 d
设置完之后,点击 OK,然后再点击 OK,回到 IDE 界面,编译一下工程。接下来我们就可以通过 J-LINK 下载代码和调试代码。 只需要点击 LOAD 按钮就可以进行程序下载。4 o( N% t) V, k; I
- E! O3 d2 ?) x% \& H% d
Debug介绍. J1 Z5 B. R% J3 J6 ~9 ~$ ^0 S
' B# @, v0 s# m! t' u 复位 其功能等同于硬件上按复位按钮。相当于实现了一次硬复位。按下该按钮之后,代码会重新从头开始执行。4 u/ S8 X6 j+ K' V 执行到断点处8 ]4 s$ z' u' F- [. ] 该按钮用来快速执行到断点处,有时候你并不需要观看每步是怎么执行的,而是想快速的执行到程序的某个地方看结果,这个按钮就可以实现这样的功能,前提是你在查看的地方设置了断点。8 E6 v6 l" @3 h( o; A B7 r0 b& d 挂起 此按钮在程序一直执行的时候会变为有效,通过按该按钮,就可以使程序停止下来,进入到单步调试状态。 执行进去/ J, @( x0 w( n' S( m$ z7 Z. g 该按钮用来实现执行到某个函数里面去的功能,在没有函数的情况下,是等同于执行过去按钮的。" X6 p& o, E9 w3 y: j, E" T, b- W 执行过去! x* Z% O2 i: X8 v: p2 T 在碰到有函数的地方,通过该按钮就可以单步执行过这个函数,而不进入这个函数单步执行。 执行出去) S! O: _6 b+ q8 Y 该按钮是在进入了函数单步调试的时候,有时候你可能不必再执行该函数的剩余部分了,通过该按钮就直接一步执行完函数余下的部分,并跳出函数,回到函数被调用的位置。 7 ? ^& f9 u% C6 { 执行到光标处 该按钮可以迅速的使程序运行到光标处,其实是挺像执行到断点处按钮功能,但是两者是有区别的,断点可以有多个,但是光标所在处只有一个。 A2 g! I! x k 汇编窗口 通过该按钮,就可以查看汇编代码,这对分析程序很有用。 $ V8 @7 p0 A4 Y 观看变量/堆栈窗口 该按钮按下,会弹出一个显示变量的窗口,在里面可以查看各种你想要看的变量值,也是很常用的一个调试窗口。4 h E4 c( s5 A" a1 X' B I " C; J# `' m/ X4 R. \" s0 i 串口打印窗口' N& w, e; o5 \9 \+ \$ @3 o 该按钮按下,会弹出一个类似串口调试助手界面的窗口,用来显示从串口打印出来的内容。 , U6 g- Y% y N$ q g6 [6 t2 } 内存查看窗口4 Y3 |) w# k3 Y 该按钮按下,会弹出一个内存查看窗口,可以在里面输入你要查看的内存地址,然后观察这一片内存的变化情况。是很常用的一个调试窗口 % `# u2 s+ m, i6 D* ] 性能分析窗口1 r3 C6 n3 M9 {# X8 k# a) I 按下该按钮,会弹出一个观看各个函数执行时间和所占百分比的窗口,用来分析函数的性能是比较有用的。 6 r E& V' R! Q+ G 逻辑分析窗口 按下该按钮会弹出一个逻辑分析窗口,通过 SETUP 按钮新建一些 IO 口,就可以观察这些 IO 口的电平变化情况,以多种形式显示出来,比较直观。 点击 Setup,新建两个信号 PORTB.5 和 PORTE.5
Display Type 选择 bit/ _; E0 H4 d: T# E( t 8 I% @+ W$ I+ M" ^' `) Y; C
# e. @ B3 G* d. U5 x8 }% y
注意 Gird 要调节到 0.2s 左右比较合适,可以通过 Zoom 里面的 In 按钮来放大波形,通过 Out 按钮来缩小波形,或者按 All 显示全部波形。+ r. s" Y# i" S4 g, F7 _, r! j% Z ————————————————, D" {4 E0 A" B. t! t: m3 d" W. t 版权声明:32码奴 1 F2 n4 `! l0 r7 I4 y/ w |
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版