你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32官方实战经验分享(2020.7.31更新) 精华  

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
8 q( W$ @) X- U( P
0 o+ B" T+ r" y! U8 A9 j, |" ]# |: c  c) I2 g# K, T
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
5 t! _! U# |- p" f2 i
. m+ S5 m9 K# {4 u/ q. c) F, y# @提示:点击各主题,进入帖子,可下载ST工程师解答详请9 v* B9 C; d8 A2 F) \% S
8 s3 ^: b: {. `( h

4 |7 `( U9 C) n3 X& m+ A- L& R一、通信接口
6 H7 D) _6 V3 _( ? ' m% Y/ J# k; M
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新
! b3 B( }- I# F% `1 u4 \ 6 v$ x# s8 n  m3 [% V3 \" O! H& L
2. SPI 接口发片选信号导致死机# t, d. h2 X" y/ n  i
6 X5 P+ L# I7 u* M! _: Z' m' w
3. USART1不能设定600BPS的波特率
" ]9 z5 G6 u& E6 W7 Y8 p0 |" q& a
! o! k9 o7 \+ z1 F4. I2C 接口进入 Busy 状态不能退出3 K/ C9 E1 |+ N' Z6 E! D

# o, f! i: X5 I7 L& F. _0 T1 w5. 对 Flash操作导致 USARTU接收丢数据
% }, O/ ?5 i* L
& ?0 q$ }. S( w7 X& G7 b6. USB接口易损坏) l# h# ^+ a' ^
# s  f& a# c& `( N+ `& e2 ]! T
7. UART发送数据丢失最后一个字节
$ c) i: h8 v6 W% l  |4 O9 D
/ T. R; ~* K6 }; q2 e, I8. 使用 CCM 导致以太网通信失败* c# A& S% A' l8 s. C9 M1 x$ L4 U
' P: E4 h# n' f' G5 x
9. SPI3 接口没有信号送出
2 i0 L9 Z. L& Y+ S3 o- [ ' _  V/ l& T. S! T' f
10. 时钟延展导致 I2C 通信不可靠
: o$ D* K! D; B 9 t* e) ?4 J7 Z8 I# G+ C
11. M0的USART波特率自动识别问题+ P; _% }. ]4 s$ c2 Z: k
! K; |. l  {3 ?8 L2 N
12. WK15 OTG做U盘主机兼容性提高
; _5 Q- P6 O6 A. C6 B , V% @% V% B: i' G! f+ i
13. 以太网电路设计注意事项
% ~& Y- E) [( \. o8 M0 r2 \ 6 L5 Q" U; q$ i* g7 E* K& Y& A3 f
14. OUG主机库在BULK传输上对NAK的处理6 H3 v& p7 s* }4 b% r+ y9 {

$ [. Y" R+ D6 |6 Y15. 串口断帧检测  B3 f, {9 C6 G: P# u
0 ?) r3 @* g' r
16. VCP例程用于数据传输时丢失数据的处理  n1 n! d, Q" `4 x8 \2 \6 |
: B7 L7 \. w1 g8 f: g( h1 H0 c
17. STM8L051F3P6串口UART数据起始位判断的问题7 x' k7 r4 l$ I$ n8 X

# W6 h# w8 O. H) c! S) @18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号! ^. A. `) R* U3 D5 N3 q$ ?' O" o

; m) y3 L4 X. T7 A0 \! x: Z5 {19. STM8中UART奇偶校验的使用方法
7 d2 [3 p8 G% `9 R* j * y4 P% s) i; e
20. STM32以太网硬件设计——PHY
# F, y% i% u# F5 s2 N( p- H
- f3 m) k7 y' `21. 一个判断I2C总线通信异常原因的方法
% M  p% N1 S- w2 o* l6 o. }% \8 e) i/ N6 i* k$ X
22. USB device库使用说明! N$ W9 G4 N, h' J7 d! K2 `
& |& ~" q# s1 }( D: K( i
23. STM32F103上USB的端点资源
! }, G! s% g) j/ h  `! I7 ~
1 W, H! O" T% q/ m) p, z24. 使用CubeMX生成TCPEchoServer程序+ p3 X4 B6 F$ a+ D) T
( r3 G4 g3 e& t  e0 S2 P7 }
25. SPI接收数据移位
, V% [, t. S* k3 ]$ F' O  B 3 M: t, q. G4 j" k. a2 S1 R
26. STM32F0中Guard Time的设置
5 {  F+ `$ F* [1 v1 c: u& O- ^& k3 u6 \( T- x
27. LwIP内存配置8 }8 J) ^% h2 I. p2 a& e3 f
# O, K) ~, S0 S' n7 g
28. STM32 USB Device的简易验证方法
! v' Y' h; r& n, Z/ ^9 ]- o$ _  ?3 ^9 [- n1 H
29. USART 中断方式接收无响应问题的一种情况及其处理方法
, A0 E# n7 \6 B' y4 h7 W* G, F" Z6 t. |) x" D/ H1 ^) ]
30. STM32 基于 Nucleo板 CAN总线的建立# Q9 Q7 H0 B3 d  ~( a( n* x
; ]! o5 c0 z, D6 L0 D2 w. L$ |$ i
31. STM8 CAN总线的IdMask模式的讲解
5 c( H* I& _0 w& E' b+ ^3 T1 b
: Y7 q( w" ~) v3 i( u$ w32. STM32F746ZG USB 驱动不正常 ) {& u2 N9 k/ k
" ~; B6 s7 d6 f7 G9 }  L( ]
33. MCU在STOP状态下通过UART唤醒分析 % D( }7 `+ r- P5 g, G

  h$ O2 N+ x0 d0 l: _' W% f34. 通过STM32CubeMX生成HID双向通讯工程
: ^1 X! O  [# B% }( r
+ \8 O) Z% `2 ?& P35. 串口工作在DMA模式下有时接收异常
, q2 G2 G: X$ F; B3 i8 m( N
! U' N" I* b$ k$ o* l8 q) I36. STM32 Bootloader中 DFU使用限制
3 \  r& w' \* w7 P% R( U- Q
7 a& c8 \' I& m9 z1 o% G. O37. UART异常错误分析
2 P: b6 v$ ^, \, c
  \& o6 [) O' x1 l5 |38. 基于Cube库无法检测CAN2的接收中断 5 s! u- B; S1 S) j, f
, P5 o8 A. s, \' `- P/ k
39. 基于STM32F7的网络时间同步客户端实现
4 S6 v+ S2 S5 v( Q% F' s) ^0 s$ I2 \# Z! G7 G/ C
40. HID与音频冲突问题
2 ], r1 }* N; _6 p! D4 z0 X. _+ q5 f$ J5 j  {8 m
41. 在进行USB CDC类开发时,无法发送64整数倍的数据
5 u' U# N9 T' f4 Q! N) b0 ]8 [3 u1 _2 H) r2 Z. C- `! W1 ]
42. 从零开始使用CubeMX创建以太网工程" ~/ `) _- |0 e& o
. W$ g2 C8 e, M$ Y
43. STM32F4xxx的I2C总线挂起异常处理
. Y, R- P9 g) a% {; d
/ g" b# A/ g% A44. LPUART唤醒STOP MODE下的MCU1 r( c+ [' t; s
3 \- t% Q" h) B. x: M7 @
45. STM32系列 MCU模拟双盘符 U盘的应用  y8 \! \; E$ R6 o

$ B) y4 ]1 |5 K- Z* N46. CEC输出的数据和数据长度始终不匹配
4 y  O5 X6 U- V4 X$ V) d
9 I, l* J2 v$ x: ^! T" q47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析8 e4 E; d; ~) T$ k6 o
7 @. g: `7 B! X& n8 O: Z5 }8 d
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
5 B! V' b$ H8 f" C- g% O3 Z; r8 z0 F& E  x
49. 增加UART接口应用时的异常分析- r$ t' W, k" V) G2 D  u& k8 D
" P  b) |" ?; x# M
50.UART应用异常案例分析
/ d) X; o6 k, u7 H" P8 Y& W" r/ O, \$ _, p' e
51. I2C配置顺序引发的异常案例
9 K% t/ ~: J4 L3 q' R0 [8 J3 u. V- z
52. STM32 USBD VBUS GPIO9 D! K1 E3 B. b; i

/ S7 z4 H; h# k, ~53. USB传输数据时出现卡顿现象
" E% @2 T# k! w; b6 b1 R, Q$ J9 J- X; L
54. STM32的高速USB信号质量测试实现
" Q' T- E8 Q* s5 U( J+ ^! \( ~: I# M2 o) s! N
55. 基于STM32 I2S的音频应用开发介绍
; F) C" k0 e# Y! h5 Z; l+ i# w: o$ f9 q% ^+ S# U
56. HID_CDC复合设备在WIN10的识别问题  
) h1 F# I" [+ C8 `2 \2 |" y6 B; B2 T( h) v4 s& k9 V0 L
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  
- }( Q  i: l7 U1 w1 T0 N9 i2 \' Q6 G5 p5 u  r  |0 d
58. 一个关于LPUART输出异常的问题分享  . H; R' @, @1 v
% U9 \' i) \7 S  ?& ~
59.通过 DfuSe 工具控制程序跳进 DFU 模式3 l" B8 n: @+ G- n) W6 q' L5 }

: k" p) O; |0 \60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
" J: y  `7 [& n& g8 _
0 v" b! @$ P" D+ J/ s
61.一个因初始化顺序而导致异常的话题 (2019.12.24)
. p7 w; e. ?$ ^7 W7 z

) X# z8 [8 \' V% {62.MC SDK 5.x 中增加位置环 (2020.5.29)
6 r: P% r! `0 G

6 x- t' P9 w8 {63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
  p  t. r* R, W# u8 Z3 O: d7 V* Z( h5 S, E) T+ n
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
( d8 Q3 C- F( H4 M* m2 W/ \5 U" E$ q
二、电源与复位& c0 d1 b. O3 G6 X* [' q! s

% D3 u! B+ I* [6 |. M1. Vbat管脚上的怪现象# O2 k+ u6 k, K( j+ g
% y; e, C+ z& W3 o2 s& M
2. 上电缓慢导致复位不良
( O. F& u( M8 C2 s/ h- m8 v
! Y& R1 c  X6 @8 y, x: u7 H3. 关闭电源还在运行$ c1 a2 _' g: q  j- r+ Q

5 |5 p; ]4 k' l* \4. 使用STM32 实现锂电充电器4 o; A. g9 b  v2 M$ \/ K8 d. t2 C1 d: Y
" \1 L  G- [% x6 s* \% A
5. STM8L152 IDD电流测量# k7 m7 x$ j7 {# a' G. r
3 f5 Z- o0 ~. H: Y
6. STM8连续复位问题! U3 j3 L& F$ W/ H5 T9 N; f: S9 R
1 F1 \. Q3 ]& b. u4 r! R
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
! N8 Y* s; z7 `% o+ M0 V* y( l! F1 b* G: W2 l/ o) y2 U; ]! }- S2 i
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流! q0 R: x3 K! o/ `3 {5 R8 }
# G1 r! g/ ~$ w+ }) G4 D
9. STM32F7与STM32F4的复位序列比较
8 F* x2 K) ?2 o7 R! B- s) D9 b3 I" r0 s5 x# M' `& B
10. STM32F107 复位标志问题 4 k- M% G" S( O
! U* ]; i# H$ b( B- w; r
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  , I( K. e+ F  V5 X( L
* y. Y$ M+ R  F8 {4 z
12. Nucleo_L053不上电也能运行
5 N- t$ u% ~5 t. y: w8 G3 {9 I* R' J2 }. |: `/ X4 M
13. STM32L4中STOP2模式下的漏电流
' Q* ~" t7 ?6 `2 N
: I9 D8 U6 W# E14. 在没有外置晶振时HSE_RDY异常置位
3 x6 D% j/ K; _# y: S. {& L6 m6 e* b# r) R: M5 o* \, Z/ i
15. FLASH被异常改写   (2018.5更新)5 O" K6 x8 Q1 b
( g( P& o( @1 ?1 z' U  P  `7 x
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)$ }$ Q6 ?+ P' [- A
. x! M0 J+ [" V( @2 u0 u8 m
17.一个 STM32 芯片异常复位之案例分析(2020·2.27)2 r1 [' j  r+ a" j1 @

# x& \2 K7 X) N7 S9 r6 V- j3 ?三、IAP和Bootloader& _% r% k4 x& Y2 C6 a" _
) h+ [2 C2 T! c" p0 U" z- `' c
1. Boot Loader与上位机通信不稳定
- G$ R) u# x4 x& S9 p3 T% U9 m  |& l . i, d8 ~8 F! F$ T7 d5 Q
2. IAP+APP 模式下不能启动 RTOS
; a' y/ x2 H% q1 y5 e# L( F   B$ v$ O9 D$ s$ ?5 w+ |: x
3. 从 IAP Loader 向 App 跳转不可靠
: d7 D3 h( F4 p: r3 k
2 [3 K# O* j/ ?3 x5 }: W* w4. STM32 MCU IAP例程跳转到APP代码简要分析6 Q5 ^, m" |+ y( ]( o

! ~& o, d" m' K5. STM32F091从自举程序向应用程序跳转的问题与解决
. o/ P6 K0 @% R3 c- k) u* A3 M. x5 T5 h8 v1 ~9 k, a/ W7 G3 W$ N4 j
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
- Q" |( h0 J* F. g( \9 p, Z! L8 Z6 z1 f( N, L. j. P
7. STM32F0启动模式相关问题探讨
: p" C. B5 [8 h- |! }5 V" O3 O2 N4 b) Z
8.STM32F091空片使用System Bootloader下载代码$ n7 [1 ~+ ?" e: w% `# w- k

- m3 b2 b$ f& ~) l9.STM8L  IAP 应用程序中编程指导
* q$ T: o: D% }* R9 y # E3 }, Y, F1 u; ]/ v9 @+ B. w
10. 如何通过STM32的串口实现简易脱机编程器
3 u6 q& I# Y" B- N( r, L, |, `$ i) ?, D( G- W
11. 一种从用户代码调用系统存储器中Bootloader 的方法  4 K7 D) l3 R* `! ?  h+ X7 P. t

. z9 F- _+ P, @, g  r12. 利用 USB DFU实现 IAP功能$ L2 z* N) r2 F. j
5 ?  g7 G7 H2 }5 V
13. STM32 Bootloader中 DFU使用限制" [1 U! G# L) l: Q9 y# s
' B3 R7 z& q5 e/ w, Y
14. STM32L011x和STM32L021x启动模式注意事项
! Z$ |9 n& @  a4 {% I5 Y7 W9 ~! Y( [; e3 I+ h' w1 {
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
/ ^3 L. o: ?8 W* i' r- ^
: l4 z! ^+ k4 b, y# Q5 N9 J& B- l16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 0 X) b( g& I6 D3 a5 d: m
9 z& p+ L2 O5 T% e
17. 如何使用STM32NUCLEO 板来测试串口Bootloader
. E7 j) @/ L; o, J1 d, }7 c
' O, f3 n/ ^- R6 h- T& W18. 在STM32L011上通过I2C接口实现IAP
' Y7 @/ L* m) G, c: E
- t* j7 h/ ~% \" {" f" b  A. {19. 在IAR中实现通过将程序在SRAM中调试的方法' d* S. o: J6 g& [- T+ j' h, W9 p

$ G4 l' V0 O; |2 S! D20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题4 ?  Z/ M" t' w# T0 L+ [5 K7 Z

; i; ^# |) L' |" H+ f& P) ~- X1 Q21. USB DFU IAP 例程移植的两个话题7 p: T* u. L, ~' D1 ~7 a" `
/ Q+ e( {/ t3 D% O+ \) m) g
22. STM32F769双bank启动( c* m% C% t; M, {/ V) G" R
/ l% ]9 V- s1 B% l  o6 u# R& N( j* ~
23. DFU加载 工具 DfuSeCommand的使用
) B6 [6 B. n$ E) s$ W, K" S
6 t. W% Y, N6 C& E# {0 y  l5 q24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    / \: q( ^- ]3 I1 J) O
; l  y+ Q0 X7 k  w
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)8 u, k( C- ~# x9 ^" c1 s  Z0 F

  N# ^. T7 U1 ^' u. W2 ]26.STM32 Bootloader异常复位案例(2019.4), c; G; ]8 I2 X, T! c- i
, z' x5 y9 z/ K7 y; ?: @& p
四、存储器) |; \* @/ H* m
5 d: M5 b- S, ~6 G$ d
1. 对 Flash操作导致 USARTU接收丢数据
% x2 ]8 o; [) T& `
5 c( d8 j- l  \# f2. 使用外部 SRAM 导致死机2 I3 y9 y5 R5 b

8 H( Q$ c3 k- T* P! K3. SRAM 中的数据丢失- T  g: k4 o" a9 z/ v

* p2 d# c1 k% b0 H4. 干扰环境下 Flash 数据丢失
" Y$ R% J  i: D! S# e
* c9 z# I; {. G& V/ N+ d/ e5. 使用 CCM 导致以太网通信失败' D' w9 c4 f* u( s# s( q  ?

6 L0 ^- k# L& C1 G6. STM32F429使用外扩SDRAM运行程序的方法
! A7 s, z& O# w0 Z+ j8 h$ K ; R/ t! C5 i" [& _  O( F
7. 使用STVP实现对STM32L1系列EEPROM预置数据
5 Q+ N! V8 ?! g" w6 s" m
0 K+ }% o: v) z- e2 Y3 E. g9 A3 W8. FreeRTOS RAM使用情况及优化方法" v& |3 ^6 N* P- Z/ E) W/ D
4 E+ n, W  j4 b! A2 g! I+ K& W
9. 在IAR 6.5下如何将数据存放至flash中
5 s( e) p" m+ p" j* Z  b' L
! r2 r1 C5 ^: e) j10. IAR下如何让程序在RAM中运行
& t8 a: C# W. x: Q - K) m0 J0 \% ]) h% A
11. RAM上电后初始值问题
4 X2 ]% C+ i; a; \6 S3 G% a
; P2 g; b- ?' S+ ~& H6 \4 r" m12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计2 i7 {3 M4 L7 W3 i

: U' |) a, O0 o( h9 Q4 l: R13. LwIP内存配置# _$ A2 B  h/ n0 R

: \( d9 x6 H- E2 E  `; ^/ ?14. STM32F2高低温死机问题% m9 W/ F. Z. b' O" N; K! n

6 n& P9 d4 }( O) ]4 @% L6 c15. 使用STM32F427的CCM RAM时遇到的问题
- w# s) W* s: T) @5 W% |) N' m' F- h8 o3 H
16. 利用QuadSPI外扩串行NOR Flash的实现  8 `1 A+ s/ i# _1 s% E

6 T% }4 ~' s# ^3 {- e' l* H# T' G17. STM32擦除内部FLASH时间过长导致IWDG复位     & x. W" z) u, Y/ L% a( ]4 R

+ a& F7 [; _, T  k( i% t) U! r( u" }

- h4 ^, o9 H% r( e2 L/ [18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)$ `5 [; V; _6 o% p3 z& v: ]
/ j( r- |( A( u* n) @
五、模拟外设
1 X# B* f! A" y+ n2 D& q ) ^/ f9 \" P, T9 v$ K' ~& Y
1. ADC对小信号的转换结果为零
- P+ i4 U" n1 x9 J9 f: g" ] 5 `3 E. S) U8 ?" V
2. ADC键盘读不准
2 d8 i/ z2 X, F. z; k8 j' B
- N+ y. g9 Q$ V2 U: A3. 扫描模式下 ADC 发生通道间串扰+ A8 u: g( g! l+ I& m; A; h& r3 t
2 W, B+ U$ U- o
4. DAC无法输出0V的问题分析解决
. T- z; X& Q& E4 [8 |# a6 A - C: d( b: Y' J
5. DAC无法输出满量程电压的分析解决
0 F: C  U+ B: T& Q* b+ O9 W# d7 X4 L! h" T $ |: d  i" K) d. I
6. STM32F30x 的ADC 采样的傅立叶变换! T/ r& |) r6 w+ B4 u  v, ^2 \
9 `- v% f+ w1 ^' s9 Q; `
7. STM32 F1系列 DAC的示例详解: o3 Z  d5 H7 g$ m
4 w$ h9 E7 R1 Q2 a( z1 n
8. ADC 连续模式采样浮空引脚问题0 i  `8 m  I3 Y/ _; w

, v. R9 ]& s- i# T2 I9. PWM硬件间隔触发ADC
1 c, X, U/ @$ X. ?+ A* O3 L# r$ d1 o. j+ o. B" n% {4 }  K& ?
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
* q) t* Q+ G8 r! m. M  u1 {; f4 ~' L9 l+ W) [" h+ b& z
11. STM32L4 系列中ADC 通道配置上的区别9 p. U2 n: T  _3 \) t4 T
: J1 ]8 T- @! b# ?
12. STM32 ADC模拟看门狗及其应用
  b9 {% T& M  N" n
' m: ~' A8 {& `/ L$ a- C13. STM32L053 comp2 比较电压无效问题 5 S- G$ b) W& M
" C  ]' X; b, |( r
14. 运算放大器OPAMP在STM32L4上的应用
, w8 U* o" h1 U9 Q  D' F
- o$ x, T% f4 W! W15. STM32 OTA例程之ESP8266使用
% j% ^2 r1 _& n) D+ g) M& @3 B( w1 v6 y6 V! t* h7 j
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24). C0 \7 i; f) J+ d' t! X
& S8 z  v0 p) A9 q6 A3 C
六、计数外设; ^% j) q- m: j1 K5 r$ T- b9 Q4 u

7 `/ }* |2 A% D/ P1. Watch Dog 失效
0 n5 ^$ S5 X5 B! @/ E8 _
" \! O7 w- S9 ?) w0 }2. RTC计秒不均匀* \$ B" H1 X; Z( ~% B

4 k- K. o. E, W& o1 H3 w, ~* s3. 软件启动模式导致 IWatchDog 失效
; G0 _# M# o' X& G $ [$ x# t  e* H
4. STM32F030R8 定时器移植问题* {3 ]; f( a4 ^6 l

; E* z- M9 y5 I1 _2 T5. STM32F0使用RTC Tamper的几个注意事项
& Q" G1 U+ F- }  ^/ _# P$ i: ?
+ r/ p* h3 h# o. n  o/ y5 m; X6. STM32L053可控PWM脉冲方法之DMA
% ~! h0 D) F& q2 g7 x* F% @2 p
; }; d, ]4 o* ?8 I# j% ^- _7. CounterMode,OCMode与OCPolarity关系4 x( L/ s# D1 z' K/ `
) |7 j; D6 `: @, ]( ?; A3 {$ b
8. STM32L053可控PWM脉冲方法之DMA
2 V) _9 v! u. N, E) s2 s/ L' d
9. STM32F1通用定时器示例详解—TimeBase( ^: |; L9 i. y, J) Q

# ^; h- ~+ r* `, @/ q10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
* p- ~9 X1 t% @; L2 F9 K, n: p0 X( f8 e" M$ u
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
5 P$ P& X5 z6 C% d6 y
; t, p/ W( t& g, K( d2 ~12. HRTIMER的多种Fault事件联动机制
7 x! `% Y% K3 u ; {9 S: W- c- Z# c
13. STM32通用定时器 示例详解 —One Pulse/ `, h# X: r) X, `+ N; [

0 T4 J$ {$ B# f( _, J14. 如何用LSE校准STM32F4内部RC振荡器9 P5 M0 Q5 q& N
2 J# @' h- T) M/ X& |, S, ~/ _4 e# o$ ^
15. 一种使用Timer测试HSI实际值的方法
; A. \, X3 ~: s0 ]1 _' D; _5 x
) W. z) d. S" M/ K16. FreeRTOS定时器精度研究
+ O6 R3 o* g* T& R: ?1 z. m* c8 o6 R
  s8 _0 d& I& |' Y0 D4 e( m17. HRTIMER产生多相相移信号) o2 Q5 f, x7 v9 w, [  ^# u3 n- D
7 N1 }% D0 H: T. l/ R4 j
18. 窗口看门狗启动时异常复位问题: K+ f: \' f! s2 O0 @! `3 [
( E, l* [# [! c) I2 d
19. PWM硬件间隔触发ADC
! z: _3 K0 r/ N5 K& B+ w) \
, b9 H9 N  J& T, e! h. @! h) v20. STM32F030低温下RTC不工作) ]  _( g$ {% y* e  a
, L+ f6 i: w/ L4 o; ]
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
) U6 J2 h6 P5 M0 ~3 v8 p9 @- o
8 v( d$ c" O6 V) H/ j, ?3 q  D" }22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
& e) V+ {1 D: J4 P6 C. F2 R' J4 _+ _( V, i! A! ]
23. 基于STM32定时器实现定制波形的示例 (2019·7·25) : |" ~9 @% i! d0 R' N% o

5 ~: F% v& r% S- O6 B/ p5 D7 o24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
: A1 g9 h/ h. E) f5 k6 ~

- T: {; x& M7 R" \. m25.MC SDK 5.x 中增加位置环 (2020.3.31)
3 o# w$ k! ?; a( w, j
$ Y2 E& O2 i) k( D: V& H
26.STM32高精度定时器PWM输出话题 (2020.4.29)8 |1 _# r" s7 c+ s* ?
: P* a3 [8 s# k. ]9 C
& O& Z1 O" m. F
27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)- W5 O) O: b% n6 o8 R

0 l  J9 F, v) a! M七、内核2 m+ e$ a7 f  S! {3 Z- Q) F+ c6 l
9 |7 i! x7 v7 i: [1 \
1. 使用指针函数产生Hard Faul
. e8 n4 S7 l. V+ c' d$ @  S7 d2 d
3 |- b5 c& }6 G. A1 f2. 调试器不能通过JTAG连接器件
" w6 `8 a5 I4 ~/ u! d3 ?" {
! [+ R- k3 ~8 P' Z# Y3. 鬼魅一样的Hard Fault0 q( r& A, A2 W' L- c

- k5 i4 v) F: R+ Y9 N4. 进入了已屏蔽的中断[
* I/ O) o$ \9 a! Q- a9 g % _3 t9 v3 u2 x3 E% v, u
5. 浮点 DSP 运算效率不高
' y  @/ r) N* `5 _0 C* g- p+ a+ v0 X; ?6 e/ Z3 T; d9 A, a& I
6. STM32上RTOS的中断管理5 ]. |0 f& X' g. i: [1 A- q3 S0 K
) T1 z7 I( e% x+ B5 l5 c
7. STM32F7与STM32F4的复位序列比较4 {, M) |; y; X$ A
1 F; i% {( I$ Y5 x4 B1 f% i) G
8. STM32F30x 的ADC 采样的傅立叶变换8 h3 T! A4 R! Q. L

  c7 u7 M0 k8 q+ X; W9. EXTI重复配置两次导致误触发中断的问题5 q! Y% K1 ~" y
. g8 `6 B  C6 _" S/ }! j
10. STM32F3xx/STM32F4xx使用浮点开方指令
' b0 z- Q+ w% r: ?/ m; \+ T& F
* f  M. v" V2 j* Z- r3 K1 r11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响
! f5 H# @; L3 @* Q/ T! M3 f$ m* F/ r/ b' F9 ^
12. STM32F7 MPU Cache浅析  
! H8 g9 ~2 T) R+ L# e1 k
3 F! g% Y+ r+ `3 c. {; W13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)# \" J" G8 W# [+ e0 a7 `( l, D

" d; u5 ]. A" |# G, w2 d14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
% r6 Q+ a, Z. \$ t+ P% s' e
5 H+ d+ Z7 W; D
6 R; T0 O  p; }8 S
八、系统外设
4 I- q% u, H& z( g2 d1 q9 K 3 Z6 `( h) i' B. m
1. PCB 漏电引起 LSE 停振# D" n. [) r) k4 {( y0 t+ j
/ L; D% ^- f2 W1 q( n9 w, H
2. 时钟失效后CPU还会正常运行
5 |; y0 |% T6 X4 i8 E7 d
% i$ R0 I3 x' y7 A; s3 l6 A3. STM32F2中DMA的FIFO模式, C5 j* ~, w. L+ y% p

" X, B, g8 w* s. ?, E. h9 {4. STM32L053的GPIO翻转速度的测试; P, N! M1 G# @9 ]! ~# l
/ _3 P' `# ^7 k1 G% X
5. STM32F4xx PCROP应用& j5 r  f! b. h9 R  B* j/ W
+ y5 y# F( s& m+ B! Q, l2 r5 A
6. STM32L053的GPIO翻转速度的测试1 W% C3 R- Z* _
  k# O; f/ @' G7 `& y
7. 如何在IAR中配置CRC参数
1 W3 E* W, ~7 u' X# I' T* b
5 A8 \% p0 T4 e7 Q9 j% W) f8. PCROP区域函数无法被调用的问题与解决
* h3 M# P/ C) q& D: y3 O6 b9 K; V
- Q- l& N) S% M" z0 {3 F- n6 m9 b9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
: G4 _4 [7 s8 J7 q4 S: Z: A$ u+ G# z+ M' Y
10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计" A+ c9 O3 E3 U* a% V% W7 g$ _+ e
8 |4 t( [7 @0 a- P0 t2 i0 {7 {6 y
11. 如何用LSE校准STM32F4内部RC振荡器& v- Y+ B: G4 @! T* q% T$ b+ L2 P. V
* z" B* U: h2 J- s
12. EXTI重复配置两次导致误触发中断的问题  
7 e* R. [$ g/ h  L" c1 p! P
1 M! `9 D9 d0 O7 k- \! G13. 时钟安全系统的应用(LES篇)  
) u0 q0 d" v& ~9 G# Q! ^
4 S. ]( W* P0 @' d% C4 @9 C" r
14. 利用DFSDM开发PDM麦克风应用介绍  : }/ W1 S5 i3 }7 ]

- p* L6 E9 ^8 ~9 e15. STM32H7的FMC外设在DCACHE使能时运行不正常
8 r% W* u1 B+ |: S% m0 Q# A5 o& m) o, a! l/ m$ O5 u$ G
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
, d& d: t  x" W1 h7 R; O7 x% C) I$ [# N- l/ E
, o9 \5 @# R( f
九、标签和收发器
: Y7 k/ e9 }$ I7 [, b! i3 O# ]
5 H1 h1 w1 v; Z8 i  f& a" D; m" \) a1. CR95HF的初始化步骤
% e! Q: e2 ]* z; Z( H 9 A0 h8 {0 }# j1 r5 |; I$ u/ w
" Z3 [0 g" l9 O7 m3 m+ Z5 {6 B

- V# P: Y2 r% ?( o十、生态系统& r; w7 G" W1 q8 }' C: f% l# e

7 Y+ g4 ^! B" e% `5 B- |1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
$ [" e3 E# U) ]( C # [' _" K! H* S/ t0 Q! h! e
2. MDK Logic Analyzer 功能在STM32中的实现问题
! N/ S( {3 E9 M$ t$ J: w& j) D ; l% j4 Y! N* |
3. 在IAR6.5下如何将数据存放至flast中
0 I# y% l$ q) U5 Y9 H: w $ f1 G; N: k% h2 o' N, z  |# G
4. FatSL移植笔记  ]4 I# z% T4 ^
3 o6 s0 D! {% g3 M
5. Keil中使用STM32F4xx硬件浮点单元
4 N, C! L2 B0 F* }/ a4 D, v5 l+ _ 6 x3 n0 i9 J9 G# s4 o
6. 如何生成库文件(MDK和IAR)
( U  U8 w9 b, B4 i: v% S ! F4 _1 _7 S! J9 i3 Y! N
7. Nand Flash文件系统解决方案( }# ~& W6 @0 X1 C

8 F+ i2 y6 `% b! l. j) a* b8. STVD在调试时弹出“Cannot access configuration database”的解决4 E! Q6 U& w/ l1 f

- X% i5 a& g8 A) E9. RTOS低功耗特性的设计原理和实现
" T" m( V3 K; Y( v
( i- _- h4 C8 e4 o10. IAR下使用J-Trace进行指令跟踪; c/ t$ R7 V: Q, e  J3 u

1 K4 X7 f, g* }. _5 c( v+ u11. STM32上RTOS的中断管理
7 J2 w; I9 G' s# C- m2 B+ \# \$ |
5 W! F& k4 S% o, g3 A* ]% k3 z12. IAR下如何让程序在RAM中运行
3 w) A" I+ P' a. r
2 n+ J- c. k* _7 w6 M: S  _13. 如何在IAR中配置CRC参数
, D" b2 [- D& x( B" G4 w6 ~0 j& d" _
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
6 l. N( w  ]2 W* C: a/ }& B6 P- H6 ?& l5 X5 a
15. 使用mbed进行STM32开发及STM32F0的时钟问题+ ?7 R& J" f0 m
$ A# `/ r" ^$ v- Z
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
% o0 O  H- o& T& X/ K5 V( `3 z4 L
2 r1 }* S" J; Y" L17. 多任务系统中的不可重函数使用注意事项! }; r, p, L; ^

( R+ d) e- J$ }' [/ ]2 v/ @18. STM32 utility的hot plug功能6 t8 r: X% J; G+ C, P
4 \; Y' L  l, R. e. f$ c& w
19. 如何将CoreMark程序移植到STM32上
; H' ], @! n! {' l
! ?8 a1 Y! p+ _3 q( r7 G9 t! I20. FreeRTOS定时器精度研究
1 k2 ]& ?- A: R5 e9 m* a( g* B. U5 E- z9 [0 q! |! J- g/ O0 J
21. 如何使用Eclipse和GCC搭建STM32环境
" ?; v, v; i4 L+ L! w( u
4 p' U& Y+ D% p5 t22. 如何建立一个基于GIT的STM32库" L  t+ j  r& ]- K1 \5 `
7 |9 h+ Y) _$ L: u* `8 K8 A) }
23. 从零开始使用CubeMX创建以太网工程/ E! B3 x$ j- h
9 d" J, N* s' w2 Y" ?: A0 T
24.从STM32Cube库向标准外设库移植FatFs文件系统% C$ B2 h" S% m! h
% G- [0 }5 E. E/ @3 l. g
25. 基于 STemWin的屏幕旋转
. P; j' M6 |! `8 l& b0 q+ O0 B# e% T) A. u& s
26. 编译软件 Hex文件烧写 $ T3 T0 i5 T/ t, ]$ U
0 P, ?" q: S0 o. [
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台 # ]# K9 f8 ~9 i6 \' h

! A- `- R: r) U0 N9 F9 {! l28. USB CDC类入门培训% g7 N# L2 @2 @% ~1 F3 W! @

# ^: b3 u! w/ Z+ Z* w  R29. USB DFU培训 ' C; l# l5 ]8 ?9 r& ^8 ~8 q
- H/ a. J- n# p1 `$ i/ G( N
30. 用于量产烧录的拼接Bin文件操作
! x, n( g1 V7 q9 U# ~3 r$ ~
! v( f' L$ j* L& p31. STM32免费开发环境该用谁
$ I3 L! s: i4 Y& k
6 v7 F& }" f1 ?. Q. c3 T" ]9 J32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新): q/ ~+ Y8 ~  o9 h% ?7 w% d
! r8 l% p8 _+ H- }* q5 A; I
33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)# X! x0 B/ D1 N% q

6 c: R3 M9 V' d- |7 ]+ i3 h34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
; Y3 z, V: J  u# `9 d- e3 t$ B" @2 J) L0 a" E3 g2 J
35. STM32 FOTA 例程之 cJSON使用   3 c0 E. B4 A# {2 o# m- \5 t* U
+ w# G: D. s; j1 E: _2 J* J
36. STM32F769DK 云端固件升级例程使用说明 ) [  a9 @$ A. ]" V- }3 ?
8 l% e3 E) e$ g: y7 t% M- @
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
8 s, _8 D% O+ t: A+ D5 g5 b' v) O* Y8 U, P$ n! {
38. 基于 STM32 的阿里云物联网平台方案 5 \8 ^9 l0 s( D' d0 e& r3 v2 j

2 C# I6 x4 t' f3 Z( D% B- y( w39.AliOS 任务上下文切换原理分析  
, \3 Q" `& U% ~- r3 ~" o7 Z) u
; n0 j! Y! m) ?7 L40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  ! U: l. m; q" `0 ?- X+ A- [: k
5 p7 K- j4 K6 v" q  p; x
41. STM32F769DK 云端固件升级例程软件开发文档  9 n! z7 _3 Z* v; [: r& B- m: r

3 g3 C' E& s4 V' C  s0 w* H8 t9 \42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)5 m6 P+ F  W& x. g9 }; X6 G
  X/ P+ a+ H' p( s  T. n) m
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)0 k) c  ]2 X2 ^- ?: h' x- p* I, t( Q

2 ]' O, L/ F/ I44.零基础快速入手STM32MP1 (2019.9.19)5 j6 m9 Y; \. X+ R! Y( H1 x* F
" [+ K3 H/ }% `( o# _$ |, N
45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)( w; R7 M, a  P7 O

! q0 K5 }; B: Z十一、调试5 l' h5 w9 c# `; ?4 f  ?
( T4 c) R5 W6 A8 b8 `# u6 Q6 m' _/ {
1. 关于STM8S SWIM Error[30006]的分析! N9 F8 j$ }+ X* Q! K
9 ^" o7 B+ `; s) ?; W9 P0 [" o4 O
2. STVD在调试时弹出“Cannot access configuration database”的解决
/ l4 c4 }; q2 e$ M- S; c# K, R! q3 W 3 V5 B2 r3 p2 \/ W5 m, p. k" P. ?
3. IAR下使用J-Trace进行指令跟踪. \1 A! N& n. r& f9 I
$ \5 ^/ x! F. d0 f, z5 x0 U0 @. \
4. 菊花链 JTAG STM329 [4 B7 Z+ n, t) Q, o$ ?8 a2 d

/ R! E* w8 Q/ ~: @2 u  f: X5. STM32F411CEUx 能下载程序但不能执行
+ e: r( o8 @. A( g9 |/ o( E6 h
% u$ V* C/ p1 S8 }: d6. STM32F103C8T6 程序上电跑飞2 A1 v7 m% V7 K: e1 r8 C4 ?
) N6 u, Y% z, K% A% V, k- [! w; I
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行  P$ p  d% W2 x4 A+ k0 w# v* Q
+ r  v, q3 n* I# T/ L
8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  ) Y( `# l+ {  r& X$ N
9 L* Y8 D  l' `5 e7 k- y
9. SWIM协议的GPIO口模拟
6 `7 M; w( O2 U/ k2 Q
9 X' ?; X" m! y) `( }7 ~10. STM32F091空片使用ST-LINK烧写后复位不能运行用. T. r$ m' ?3 J$ g. w1 `
# r/ m( C: h! I
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)# H  v+ S: z6 w! B

' r# N0 ]+ Z2 ]9 `: r12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)
8 k; y$ a  M% R6 D, f  c
) Y- d( w2 r7 [2 z; s  p13. X_Cube_ClassB代码移植 (2019.12.24)
. y# o4 j) i! B/ f& C  P; R2 b1 z) ?1 Y  F8 y; D

" `/ s3 g4 {1 z! ]4 P14.Keil中烧写STM32F750内部Flash方法 (2019.12.24); o3 H- H/ e: |6 j# ^: y! z4 b  F
8 I& P  y; K* g9 ?1 N  r. ?
十二、人机调试: @7 y$ t& M' k8 b

$ x  V% }0 b% p1. 一步步使用STemWin在STM32上开发一个简单的应用: V( t8 @0 u! f8 U  L. {8 c
# v4 r+ r* G# i# W" k
2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计  y" S1 H8 G) {" |% m' f

7 A9 w/ x; L( v) O: I1 e1 n3. GUI方案中ALPHA通道处理介绍$ H! i* X/ f2 z8 S# ~

% T% O/ H! _" {* W4. 基于FMC8080接口8位LCD的STemWin的移植
, s+ J; S' J) N7 l, ?
% w: \8 n+ T: M1 N5. TouchGFX中Callback模板实现原理 (2019·9·12更新)3 D# w1 D4 c) ^2 ^! U
+ J: P6 ^8 p& U( k/ X
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
9 S2 j& u# P; |7 p# t0 Z+ B
7 ?9 z: B5 }7 W# s7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)) d" ]! m$ s) B- O' N

) O* D  F+ a+ P: ~+ ]; H  g3 Q5 D- \8、STM32L5中如何关闭trustzone (2020.5.12)9 k/ J6 y) v: G# j2 }5 g6 |% m
8 Y% ]; o* L# ]
十三、马达5 y6 c& C3 v9 U: D
& y+ v4 R& _' z. w" h
1. 电机控制同步电角度测试说明+ i1 g* Z( B/ F# R. e) z( z

$ f$ n0 v  N+ o, B, s$ p
) [2 m, a& w6 {% |+ J+ }
% H/ }. P5 g( W: K8 B十四、安全# o- C2 e) f& O/ m
: y' d8 A# v0 V- j
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
- A7 `1 q- N$ H! {  J! V- V' X% v1 w6 A

& y( S% @% i8 z4 [2 P6 n! m十五、其他  }$ x* {& Q3 I  b3 S2 i5 _: Q
) C: q" H# @# Z! g. y9 z$ j
1. 跳不出的 while 循环- c* w& e5 L7 `6 @. P9 c6 L; {6 i

  S: @* x+ m$ B9 Z- r2. 外部IC连接NRST导致MCU内部复位信号失效的问题
$ G; e' D" s% g" V0 y
! i. ]$ c) Y! L0 t  J. p3. 潮湿环境下不工作: H, g$ B! z* M; _

! B- U( s: P& \: d, F4 k3 b+ M4. PCB 漏电引起 LSE 停振" t- G) k3 q# d. \$ L6 N

, d+ I" i, X% E5. STM8L152 IDD电流测量
3 T4 y. _! [/ A" ^& a * v0 F. ]3 ~8 y: [5 r
6. 使用STM32实现锂电池充电器; F/ F, z7 T3 F4 \9 p4 X) M& |9 _; X
# d9 j& j1 r7 K9 p- l
7. STM32_STM8硬件平台基本检查7 x) h+ [3 z; f; j
/ N  T) w2 g2 r- o! `
8. 验证STM32F401在STOP模式下的电流
& K0 O$ R) s0 A4 o6 {. R- C4 V4 x# C+ Y+ n" H
9. P-NUCLEO-IHM001 电机开发板串口调试指南% f; J3 k* H0 ^# w  r) U

% s2 M. j* X' ~3 \2 A0 ?: u" M/ L3 M10. 一种计算CPU使用率的方法及其实现原理
7 w! ~3 h) X  Y$ ]3 g9 \$ _# Q" Q; F
11. STM32 RTC不更新原因分析" `9 J8 |4 L5 V2 ^& b  K

9 b, ^* D; r5 r; r; w4 h12. 关于ST库函数的代码性能对比  H+ B* G. t- T- N* o

/ R* d. H% }5 r' f, _* K+ C13. 在IAR中实现通过将程序在SRAM中调试的方法5 b8 \1 G- K6 J$ b2 ?; c
, V3 P$ E( \5 v. e
14. M95xxx EEPROM写保护配置9 r& K7 O* ]' L  u

5 \+ G$ |$ y8 r5 B" y% T15. 4SRxx的GPO的属性
- l) _2 h3 u& n
* A/ r4 I! v, H* J3 j/ D16. CR95HF的初始化步骤
) D, Q4 D& O: k) |. T8 u! i5 w9 G# S. _+ M0 v) f( k; U
17. 电机控制同步电角度测试说明  
, n2 m9 u+ o; P1 {8 _4 B9 i; Z/ R- [) E& u' Q" r( `/ T
18. STM32+BLE通过 Notification与 Android应用程序通信的例程4 O+ M9 n2 G  A& ?' Z: [4 a
& s7 o5 t; N! q- G/ Q0 ]) O, @! B
19. M95xxx EEPROM介绍
8 B. X. j8 v# V% H/ n8 f- L5 ]
! L2 N- S3 x' U- g! S; V# Q/ m20. STM32 DFSDM测量温度应用
1 b1 u+ Q- {! o& U9 h
  \' H( ?/ f2 ?. F21.代码实现PCROP清除, F; _7 U4 _" p) a* V, K
! J! u6 V8 D/ C# j
22. 理解与应用MPU的特权与用户模式
' N0 r" O* r( a+ S, K2 l( z/ i  ]0 d- E
23. 用于电机控制单电阻采样PWM变形信号产生
2 ~  c- j/ d; S, T, z  Q' q! M
/ t2 b+ c! q9 U* B" H24. STM32L低功耗模式唤醒时间测量% Y( Y. K$ ?& y' P. S7 c
  U& a; n; W6 Y* Y- h& ^, b
25. X_CUBE_SPN7程序电机启动抖动问题
- ^* f) c( f* Y7 {# U0 q" t, q9 D- H/ k. E3 l2 J1 T
26. 发现STM32防火墙的安全配置1 Q# R, O6 @8 v& F: A4 F
& J& Y+ E" h8 P7 s0 _: J. I9 l; z
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改* A2 P# r/ O( ?, r2 ?; C
9 t! C0 D1 b$ c. J* w9 j  A/ M
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
9 E& b8 a( Y) }5 u" e' g1 Y8 B5 _: n& ^! M
温馨提示:
! g) U% y1 ~9 b5 j# l* s  B0 {) O
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
* m  O5 o3 V) h3 o1 t

/ H9 ~! ?% \4 B+ e( z# p7 A3 T$ k8 u% K( s9 B; l5 g& E

$ P* ?, }7 K8 d  w/ R
/ p  l& A2 Z# w, V! U$ U6 ]0 S4 a* w
: g, c+ c; ]: Y1 n, C. j; o

, G7 r0 ~: ^1 k$ o6 p' Y0 g
/ R8 [( m2 ^! w' m6 [. }% G* Q3 h: |1 Y4 ]0 x
. Q5 b3 `% {3 e; v! I8 ?3 _

评分

参与人数 6 ST金币 +6 收起 理由
t525 + 1 很给力!
dsctsam + 1 很给力! 赞一个!
北极熊 + 1 赞一个!
wangziwei111 + 1
tian0yan + 1 很给力!
电子星辰 + 1 很给力!

查看全部评分

11 收藏 156 评论278 发布时间:2014-1-23 14:58

举报

278个回答
michaeldeng 回答时间:2016-7-26 19:35:55
非常好的帖子,THANKS!
Paderboy 回答时间:2015-5-18 07:01:19
好详细,多谢分享
$ a& E" d- K/ c* ]( V, D+ s
5768340 回答时间:2018-1-13 14:42:54
HI  % |7 e" \2 m/ _8 ^8 a" t
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:; j" G7 T7 q; n5 k' m+ S
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    ( Z# A! D( t+ [. i
  2. 函数名称:Cdfinger_Bspspi_init- D: V5 y$ A* \" x( E0 `0 T0 L& S1 _
  3. 函数作用:spi初始化函数
      r. W, ~' ?8 ^- n
  4. 备注:
    0 Y8 y: o6 z  I# k5 A3 k) D
  5. ******************************************/& j& O5 W5 B) B0 ?7 g
  6. void Cdfinger_Bspspi_init(void); _8 l6 w% P, }  L4 `6 F
  7. {' P) f/ {0 d& d* Z
  8.         GPIO_InitTypeDef GPIO_InitStructure;5 n! ^" q, |- T- Y
  9.         SPI_InitTypeDef  SPI_InitStructure;# r0 f. I: Q1 u+ k4 m' ]& T
  10.         DMA_InitTypeDef  DMA_InitStructure;
    8 F2 Q, f) n* u
  11.         NVIC_InitTypeDef NVIC_InitStructure;8 h3 S% u) O" b6 p
  12.   
    - [' Q4 d/ J, P1 }* U: l
  13.         int ii =0;
    6 E- w4 [" D, g  [$ V0 b
  14.         5 D  P# a* `; w* C( |2 S# T& p) A
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    / r; h+ S2 U3 C7 S' T
  16.         /*!< Enable SPI2 clocks */
    * C3 @# M. b; J) @8 J
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);! K: K3 u* d# y$ t/ T6 w) i
  18.         /*!< Enable GPIO clocks */2 W4 H  b9 G% r$ m: O
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    + ]5 Q0 e) R% L- V% M6 ]
  20.         /*!< Connect SPI pins to AF5 */* \+ D  \* c  r! w
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    ) a& O5 q# m" @# Y
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);0 n9 T! U, i1 L! K3 j0 Y+ {8 b
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    4 [3 V' {/ N9 L* T+ {
  24. & r' H5 Q6 g4 g3 d( ]* k
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;% @, Q5 B7 |4 C$ r1 k
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    , S* ?# ]4 r4 j  ?" M  Y+ B7 F, ?
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;* v: p# a- H+ p$ S! E
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    + E1 t, N8 U) w  S, z* V9 G3 |
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  x4 i6 c& U" i( U
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);, G; X" \* F3 H% M8 X# R; E* y
  31. ( {* z' w! M1 }' k8 g* d/ [
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;1 n0 O! H' P4 F- l
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    * Y) v0 e* }8 G: _, g
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    % R6 B5 e0 g" K  W) n" F2 S
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 I( e. y  G9 W- P  g9 g6 i6 Q7 \( J
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    8 x3 v6 X* d. c8 v: g
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);, ^; V9 Z" j  `3 C6 g6 Y1 T
  38.         Cdfinger_BspCs_HIGH();2 N# X+ V2 M8 x6 X$ k  A' o. d  a
  39.         //Cdfinger_Bspdelay_ms(1);
    " l3 Q' Z& T; K* T
  40.   //Cdfinger_BspCs_LOW();" N) o4 F/ Q  g
  41.         SPI_Cmd(SPI2,DISABLE);
    1 C! r. ~, N# q1 E  E, ^
  42.         SPI_DeInit(SPI2);
    , }  F/ W1 ?! M) c
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;1 z+ P0 i0 `+ u
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    $ d3 q" f+ ~, u1 x: o
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    - K1 M3 J7 g  i3 I" m
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    3 \: A; `- T0 @' b# j$ ~/ _! K
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;' w4 T' `" x2 J  P) U* U1 @  v
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    # @1 P' u, L! [' ^
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    3 P: O; L! j  v. w
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;6 f, h: ~1 o  @! {* C
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    # R$ C! C  [( M1 r; ^/ ]: o
  52.         SPI_Init(SPI2, &SPI_InitStructure);  t( O' Q7 G$ w- z) a5 I: X. G1 {9 I
  53. ' e( q' ]8 Y0 u
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);0 `7 f. S% Z9 M/ e( G2 P( ~/ M
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/9 d) V, }6 t2 c% d% a! i
  56.         DMA_DeInit(DMA1_Stream4);1 Q* w" F- _% [$ v( O$ S/ G1 K
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;3 a4 z( u4 V  A- D6 X; p  g7 E
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);. w2 D0 {1 x1 s/ y4 d
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    0 c& C/ i6 V, [5 X- v" O5 L# q
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;5 k1 r& d8 Y2 k& c
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    2 f, @3 i9 D* y- J8 s6 [' |* z( M
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;$ H  T5 \4 Z/ z* X1 b. W
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;! u9 t9 o" e$ b5 q
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;7 H; p: @9 b7 T# M
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    9 H7 C) y. V$ W( S% ]
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    ' U4 E1 g1 M# I# w6 Y, ~2 W, T4 i# y# h
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;3 s0 f$ ?# Z0 P4 D) t; c
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    + ]% i+ N- O; b! @3 W5 ?
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;  F2 w& k& E+ ]  \+ E- P! m6 o4 L
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;: c2 N& T' b8 j* G1 x: ?) x2 Z
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    % n/ w' s. l+ m' i& x. a6 K/ q# W
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    ; i# g: j% [6 h
  73.   
    ) J1 X& ~4 L1 k0 f
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    2 N9 @# Q4 ]8 ]2 w7 P! }
  75.         DMA_DeInit(DMA1_Stream3);
    " G$ Q, g, t4 I# v
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    / e- i5 h9 K  Q* z7 [/ C& J; I* x3 `0 m
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    8 ^- T4 |1 V. o  _% c# X2 G9 \
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    ; n0 s! A3 B$ y3 q$ T) C; s
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;. B' s/ f2 t/ t' o6 D
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    . C6 h4 ^$ `0 G
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;3 b: O* ~. v2 p8 ?- \" @
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;7 T; X. O# T: p  @/ s, F, v% J
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    5 H- t( H7 p) l
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
      X/ K+ @# T0 J0 h* }# x; Z
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    0 l8 \4 N, U& X
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;' K3 J: L1 S- t. j5 r' ?
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;* {/ h6 t% ^! B3 l: T) W
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;+ d% j- A- [: A7 {: E) K3 Q2 a; p* |' I
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;! J' E( g# i. X/ T6 \6 @$ `. M  B
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    " C( R3 ^- Q5 c
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);, p8 s$ [3 f, S3 x% Y# d
  92.         //Cdfinger_BspCs_HIGH();
    7 ^! v/ N9 a" I9 P- Y+ A# _
  93.        
      w2 f; S8 j1 P+ T! C, b
  94. ( ?$ P. v# N! j/ O6 g

  95. 1 V3 _9 e% Z& Y* }  w
  96.         //发送中断
    * m5 g0 I$ V9 G  v" t( F& c
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);+ b' f- Y$ }3 D5 Y, m# _
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    $ C. G( }1 A- E8 e
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;# J, r  v- k( c$ S' G& F
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    ) b  ^5 Q* `  E9 y% Q% j* ]8 r( s' w
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;9 t0 ?# [" i5 E, s- I
  102.         NVIC_Init(&NVIC_InitStructure);
    ' ]8 l. _* V. j' I
  103.         8 e% n' w9 y% t3 r! H
  104.         //接收中断2 d" p. n) \* G6 n5 t8 p
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    ; r% g; w' l( ]
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     ) s7 r: G1 [  s3 L& R
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    4 g; }+ f- f1 A0 |' f! ?
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;- b7 c/ Y$ `' D  W9 @
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    # A, @3 B) G' a& I- w; A: o( M1 x% s
  110.         NVIC_Init(&NVIC_InitStructure);% o7 M! ?  _0 ]
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    8 E3 ]' g* y2 [
  112.         SPI_Cmd(SPI2, ENABLE);+ {% Q: h4 b* ^& h7 q& R
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    ! c) G/ R$ F. ?: R: L
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);' @) ^% a, D9 t2 g) t" V# C+ a, M* C

  115. , z# s6 R  Z& \# X5 m1 k9 h' G
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    + j% k: U. V) w( t
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);1 S$ x% ^& T1 Z
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);  W1 T' `8 |3 i9 x9 z
  119. ' i' v! l; S1 ]
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    ( h  K4 d+ x+ T7 N; @* O
  121.         {
    5 ^3 p) Y& c' |/ y
  122.           if(ii%8==0)
    $ B0 B2 P) Q% V) m3 H" i, \2 S
  123.                 {7 s$ g: L! O+ g) ~& w
  124.                                 printf("\r\n");
    " x, N2 K0 W  e
  125.                 }
    $ i0 f. n( ~3 q
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    + L  Y" w+ o8 b: m. _. |, ?0 [! T1 E" H
  127.         }
    7 E- Z- ~& L. i
  128.         printf("111\r\n");
    . o6 M2 c! G. j8 h6 o# m5 \
  129. }1 o/ R  X3 I$ X; ?/ V

  130. 6 v* p' V3 S- Q3 P

  131. * T. x2 k7 I+ c
  132. void DMA1_Stream4_IRQHandler(void). G; _7 k% u; {7 \: S* R
  133. {
    * L4 _7 B& y* A5 l6 s" H( [
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
    4 D" c* E7 C. r% @5 U2 G
  135.   {
    ' O6 a# I' A! Z8 j) V' @- ?' t
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    / f$ i; L% Y0 o' @1 ~& x
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    - y/ U+ }$ q8 j& Z: H+ r5 O! k9 q
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    6 w7 d6 Z' {6 e+ a; p
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
    ' }( _" i' q% g% b- x* T; h, X
  140.   }
    9 S: N  S2 ^8 ]" V# d  w/ i
  141. }# G5 h9 f4 r; L+ T3 G: O, `6 }
  142. 5 p" S- c# V. C5 T% X( L+ N
  143. void DMA1_Stream3_IRQHandler(void). S4 p5 F! v- @. I- P- x
  144. {
    0 H5 p  s" o: _9 n9 q1 k
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    : ]5 y! M8 y( K1 ], t) K
  146.   {9 J; Z0 n+ m' a/ {' L) Q3 |
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    9 o4 x7 {- y4 \5 @( V* Q/ ]
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);4 ~  l6 _8 e' O6 _- N
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);( I" K; b# U1 o4 Y8 B
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);. P6 _  ^; s- U! q: m
  151.   }
    + N4 x/ M  m' }% Z! I: T
  152. }
复制代码
lovelifett 回答时间:2014-1-23 15:10:56

回复:【ST MCU实战经验】栏目开通!官方解答应用问题,欢迎下载!

楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信3 _9 ^! Z' {+ m2 j6 r% ^1 Y! J9 B
以下是全部代码:# P; d: f0 ]) M# ~& d% J
#include&quot;stm32F4xx.h&quot;
/ f# |; z0 F9 Y  y6 O2 }void RCC_Configuration(void);
$ B/ |) ~: y" e6 b2 W8 C( svoid GPIO_Configuration(void);
5 w% y7 I* e- p# S$ k' ]4 Y% F1 {void SPI_Configuration(void);2 M! l/ ?+ g5 c' V) }$ K8 m
void Delay(int nCount);
! I* X" a; t4 f; F8 Q- _int main(void). S! x1 M9 W+ u$ C
{  RCC_Configuration();! z; [0 x9 N/ q% B* I
  GPIO_Configuration();
2 x6 Q8 z7 |9 u  SPI_Configuration();; X9 O2 j, V6 B9 }/ P
 while(1)
" C: ~) T; o/ {- { { int data=0;0 U6 S, T3 c3 b4 n' a! o9 ^: G
  SPI_SendData(SPI1,0x55);( P1 y* c8 {/ }! S) `5 W; H
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); : m0 L5 j! \1 U8 v3 Q
  data=SPI_ReceiveData(SPI2);, O  G- J. a' c* Z7 M; |7 E
  if(data==0x55)
) C( w- a) @+ i0 K. i! x     {  while(1)
' H2 ?2 `4 {5 k$ W             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
) Z6 _* X: P; ~. M5 m                Delay(0xfffff);$ Z# A9 n7 f( I1 T- z1 G- Q
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
' M+ H% V+ T* R5 O, h9 ?( E- y                Delay(0xfffff);+ T: F1 U# C6 N/ _/ Z
   7 f% y1 S5 }/ `& Y6 W
             };
8 C) \5 \* L' X2 c- x/ ^. X     }0 R0 [3 U9 z, W* K8 T7 R
     else while(1)- t- L2 l/ @+ K. M0 {8 t& Z
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
- L% ~$ R) g7 i               //Delay(0xfffff);
3 ?  k& @; W/ T3 B$ _               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);) y+ J1 o9 c5 O. }9 W+ [+ K3 S
               //Delay(0xfffff);# ~3 r4 U& _( |/ P. t) ~
   % Q8 n1 C/ t3 r
            };/ ]! ~  ?  I# g
 }' [4 g8 w7 h4 d* {3 S1 \6 h
}
: p9 G! ^2 E7 f& ?void RCC_Configuration()
4 V6 n. z: B) y/ t# M{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);! w8 H' o" @: g5 G9 T, z2 ?- z
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);9 a( t& ~9 k, |' C; v- T( y) U
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
, d" k" k. F- ]6 m* M}# d% Q3 k/ r) Q8 ?  W
void GPIO_Configuration()' N! m' ^& k* {( v2 H6 P. T3 V) m+ x6 b
{  GPIO_InitTypeDef GPIO_InitStructure;
7 _9 _1 _3 o& Y5 l0 s! n1 D' w  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
" }/ c9 F( i* J' ~/ Q2 e' B  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
  {% o; p, @; o) @  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
/ p( Y4 Y* E+ @3 ~+ M  W# k: R  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;$ G7 y4 T( J1 E# X( z4 q2 }: V
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;" }. N5 t$ A* h; @# u2 _6 X4 T% }
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);5 F) J  x- J3 f* u5 Z; V
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;2 m7 ]: ~: |4 N; K
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
, R4 b" p7 A$ s% i" X2 o- ]6 t7 O  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
+ Y' R+ G) h& D4 C5 g, D  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
9 Y8 P' M9 D; H: n* v  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
' V7 o4 a& x$ s& S  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);' N3 J8 _' X1 E' _0 q% R6 ^) O7 z
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
2 f, ]) h+ z4 `/ g! w  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
6 y; G6 e. ^" V  D/ i4 S0 U* x% ?8 A}+ d* t4 T# w0 W5 h. c6 t2 @
void SPI_Configuration()
, T+ h; y/ n4 o7 Q: ?1 V! V{  SPI_InitTypeDef SPI_InitStructure;
+ ~& v" V$ ]( d9 G; p7 H  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
% Z: X/ c$ J! R  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);2 N6 {/ V0 U8 v+ B" S. I2 T
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);, A5 X  m( C  ~; y
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
9 n2 Z" I2 e0 R1 \- {" N, `9 Z  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);+ n' j" E: k+ s+ j: S3 l' q6 D- D
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);5 V4 O3 {" v, L% a# L0 K* Y& d
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
, t4 Y2 l  [% ?3 `+ [  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
! H: b7 {9 r0 Q' n3 F7 P  i  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;& F% A% s3 f3 {7 Z
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;1 Z. P2 i2 {. V5 v; i4 ?* a' j
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;0 v" c; W- e7 D' H. d) |
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
5 l! G7 \8 ]# E1 W0 f$ V   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;! M% |0 l& u( ^
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
. Z* S$ x. f$ \  SPI_Init(SPI1, &amp;SPI_InitStructure);- K8 X) U  v3 H; O7 z
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;7 f' R4 V8 v' `+ R
   SPI_Init(SPI2, &amp;SPI_InitStructure);& \' j5 _9 g+ U7 ?
   SPI_Cmd(SPI1,ENABLE);' j; a$ k1 y" l  a
   SPI_Cmd(SPI2,ENABLE); 
7 e/ I- |( k8 S}' x1 ^# i5 X) K7 C# M- \
void Delay(int nCount)
. m% a, R* R0 x" s3 }6 R7 e{ int c1=nCount;  |" z$ d" n1 y) }. p: s) H! s$ f
 int c2=nCount;9 a8 T- H- Q- s- ?7 N: @3 J' {) T, A
 for(;c1&gt;0;c1--)
) W  z' d- x; _4 }  {
0 M5 G; O9 E9 X+ T  for(;c2&gt;0;c2--);
2 |+ F( w9 H& F };
7 w# N: m! |- p" c' J}
2 x! J9 m8 a, ^- l* K* S先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!

回复第 2 楼 于2014-01-23 15:10:56发表:
% o- z3 `4 q* [# L* ~楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信0 e- R% A, i9 `; C
以下是全部代码:+ A: |6 _; A3 V
#include&quot;stm32F4xx.h&quot;
  t: G6 H% r: N6 o  N7 Cvoid RCC_Configuration(void);; j5 M: \$ C7 r* K
void GPIO_Configuration(void);. {. Y- a+ W( R
void SPI_Configuration(void);
- a5 Y1 L' h0 R/ ~  B' g. ovoid Delay(int nCount);! y! O1 c! m3 y  q* V
int main(void)
/ ^5 b4 d# ^3 U- n' |' H$ B{  RCC_Configuration();* p* _" ~% Q0 o0 m3 I. j8 e
  GPIO_Configuration();+ o) [) q- p) v, f8 _. x* u/ Z. E
  SPI_Configuration();$ \: H! r" \* u6 u
 while(1)
5 w! Y. w3 j5 E5 _  E9 v { int data=0;
$ {1 D$ h: V. x$ x4 A- O  y) @  SPI_SendData(SPI1,0x55);. L8 I. I0 r8 q  Z5 {/ P1 a
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
7 [. Q$ X0 a5 n4 G5 ^7 W  data=SPI_ReceiveData(SPI2);( ~5 v4 ?% N+ k
  if(data==0x55)
7 O3 f& m' T' ]9 [- A! D     {  while(1)
9 P* `* d7 t# t3 l- T             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);2 n  D) I" u: E' @4 @/ m/ k
                Delay(0xfffff);* d* D/ n5 D! K0 c; y6 l4 T
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);: ^$ _2 h) ?+ Q# l1 C8 W
                Delay(0xfffff);5 ]. k5 r& F% O, @7 B' v4 a
   - E# t0 |, l' T* f
             };6 \; o1 ^% i- {. e, n' Z& T
     }
0 j2 a( `+ }/ T4 x# a3 q     else while(1)  n/ }. c" f0 }- I1 K, X
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);. ?$ G& t& e! r
               //Delay(0xfffff);
1 p) E2 Q( A0 f6 \* o. v* H: E               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);; d; o/ c9 d+ `% t' z4 ^) U- F5 t4 K
               //Delay(0xfffff);
6 F$ D: z# {( w7 l' @7 r   # X5 s$ P9 x' t" U4 Z0 x+ y
            };
3 h0 C: v  B3 u/ f% C }/ A. x1 o7 N2 F, }
}$ Z/ g8 W& u! m% L7 ^; L$ [: G
void RCC_Configuration()# F1 ~/ P) w' N0 J0 h
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
( n" Y5 F& Y: P: E  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);7 E! H# i1 M' z
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
  T  v3 E3 m& Q}3 _. j6 u, L/ X4 k% s# y
void GPIO_Configuration()
4 ]9 a' R/ g3 R5 Y{  GPIO_InitTypeDef GPIO_InitStructure;
$ D8 L6 E" o- S1 v$ V$ X  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;6 ]$ N6 X+ m' o9 x6 ?
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
+ T' M: W- u; r! ^  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;. o* S5 f/ I1 O0 B% a, P* E! E
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;% e: s. k5 V6 ~. ]6 g2 y
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
1 R  \. v* P" v  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
& u( E) P1 L! ]3 W+ B  O2 b  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
" W; X! `' r& k" t! C! S+ O. z" R  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
5 {  V7 U4 e( F4 ?  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
" z; E. b/ E" v& h: m4 ]  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;. h- g8 S6 T5 i, q0 N' y
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
8 V! U6 G# C8 M. C6 P1 Z- C9 k1 X  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
6 m7 s& N( c# u4 G$ m% q8 D  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;; u3 {3 R- Y2 d* Z6 d
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);3 `0 M( Y0 L. _$ Z
}
, i* o7 L! x6 v4 b! I& nvoid SPI_Configuration()
( c5 k) P; f% m; e. u1 A3 X{  SPI_InitTypeDef SPI_InitStructure;/ S; }; `  \2 P2 ^! r* B
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);7 e- Q; R: x$ P! q- {9 \$ Y" S
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);. T( r  @6 A. @- l5 v7 l- k! V
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);5 `/ M- e7 W/ C  n
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);& J9 N: c+ q8 r) E. T4 L/ G
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
( X, v6 l( |- y# _4 _+ s  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
" \( L4 T' {: S: Q% p! o7 _  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
0 w+ Z$ @$ k/ w- C+ Z& G/ B  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
# R6 o8 z+ Z: p! Q  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
1 }; h9 }% ~- F7 Q9 L; Z- u1 _( O6 x  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
. Z5 ^. j6 Y/ I) W$ i+ F: W  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;, V" K2 h; ]9 O0 r
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;# S) T* F: B6 [7 |! f: r8 b
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;$ G0 e* N' c+ P/ Z% o5 O
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
, P9 s) r6 c# a8 q8 J5 p5 b  SPI_Init(SPI1, &amp;SPI_InitStructure);
) ~' V  m$ C( S% k0 u& m5 Q  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
# ?2 o. L3 x# _2 j0 e) I   SPI_Init(SPI2, &amp;SPI_InitStructure);1 Q1 i: A  U0 K& U. \. _) v- C
   SPI_Cmd(SPI1,ENABLE);- Z* L; H( E; F. x- a) y( B
   SPI_Cmd(SPI2,ENABLE); ! `, m( j3 f- @7 N# s! L  j. S
}' R! S; d' a; c+ f* y
void Delay(int nCount)
. o( _4 a( m6 U  t1 r  W# T/ ^{ int c1=nCount;
$ a- j! I4 \: _' s; e" J3 ?' V int c2=nCount;
( b7 g/ D* R1 l. ^ for(;c1&gt;0;c1--)5 |2 L  F5 A- K4 q
  {1 ]. V' R, o+ x$ O5 e8 \& o) j. W0 `
  for(;c2&gt;0;c2--);& j$ U# u1 l  j0 \% z  _( z
 };( {: s+ q$ y; l) Z* y% Y, u* h
}7 @* M) m& N' J- t9 X
先谢谢了~~
! a  H# o! R+ Q9 ` 
+ _8 `: `( S3 n' M
4 H8 L4 `+ v) X6 k9 c2 A楼上的问题,看我帖子给出的提示哦~
lkl0305 回答时间:2014-1-24 09:53:43

RE:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!

非常详细,具有参考价值,支持
21GPRS 回答时间:2014-2-14 11:37:16

回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!

 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
沐紫 回答时间:2014-2-26 17:13:44

回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!

回复第 5 楼 于2014-02-14 11:37:16发表:
7 B  ^  l) j, n0 I6 T 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。3 H- t7 G$ G0 i; q1 F: T3 m
 
+ W' i- j( t7 U$ B0 g% X- V' L; f7 l
1 W$ u3 m1 f) V& y$ K多谢支持!!
abner88 回答时间:2014-3-9 13:43:20

RE:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!

ST社区做的确实很好 版块引导很好 资料分区也好
stm32f103vc 回答时间:2014-4-3 18:52:58

RE:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常好的帖子,希望可以及时汇总更新,收藏了
renqinglei 回答时间:2014-4-4 18:00:50

回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常不错哦,支持下
renqinglei 回答时间:2014-4-4 18:00:51

回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常不错哦,支持下
Jack·Owen 回答时间:2014-4-13 08:09:50

RE:【ST工程师 MCU实战经验30篇】之鬼魅一样的Hard Fault

都是精品。大大的支持
gougouyx 回答时间:2014-4-16 14:40:33

RE:【ST工程师 MCU实战经验50篇】之鬼魅一样的Hard Fault

谢谢汇总,
anan555 回答时间:2014-5-7 17:49:29

回复:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高

  
8 X2 i$ x% G* X# J% f鬼魅一样的Hard Fault9 ~3 F# C5 s& @2 g" z
 / s- U# v; I# P' I4 ^( b
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。5 o  d% p' l5 P* b# s# Q+ j( K, Y
 8 u$ F& a5 t3 n8 b" P' S- [; b3 y
咋解决?
chunlei233 回答时间:2014-5-7 19:50:50

RE:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高

哪有这么多问题啊 只能说是所编的程序有问题
steven陈 回答时间:2014-5-7 22:07:20

RE:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高

DSP是MCU的短板啊

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版