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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表  L. R3 {6 I$ z9 Y; D+ d
% P! V) m3 F8 B- Q4 x- Z
. x. \6 R9 n9 i$ X6 v
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
9 @& d8 D$ ]0 Y) Q" j* j8 {
  G0 E7 t/ ~6 ]# E3 S% C3 j! j提示:点击各主题,进入帖子,可下载ST工程师解答详请
" C  q8 N- u9 q* U
5 q: _% e4 L; ]1 u6 f1 x
5 N& i' K7 X6 i8 l9 X一、通信接口7 O# D, ~8 v6 z. {1 t1 z

0 P2 s# Y9 e8 q7 h. G9 S1. STM32F2x7_Ethernet(FreeRTOS)驱动更新9 f2 s; M9 b8 J( `( o( y
0 c5 r- e5 C) h" ?- U6 z
2. SPI 接口发片选信号导致死机
, C% r  J4 _* b/ y4 }# g% I  F 2 {( y: j& P8 D5 J2 h& F" d
3. USART1不能设定600BPS的波特率0 p+ E2 u7 G" t) u- J7 m+ L9 G+ f

' M- D( K7 V; D5 j% U: f' k$ Y4. I2C 接口进入 Busy 状态不能退出" T: a% _2 p! q" I( n7 t2 p
& Z, |7 q, M& D% c& T& \) x: K
5. 对 Flash操作导致 USARTU接收丢数据
  {1 r2 |) B  F$ u3 D4 O; I 9 ]: a/ A% T- c. j3 G& C
6. USB接口易损坏* {; A- ?$ s; h. Y8 o
/ w, K6 [3 [0 `. v: c
7. UART发送数据丢失最后一个字节
2 A9 _; t/ K/ T# y+ j: e - D8 L1 G) S5 d
8. 使用 CCM 导致以太网通信失败* o. X$ R: g2 L. b  k0 o0 b& Y

0 V! F, J8 }& ]& o; C" m( u( r9. SPI3 接口没有信号送出
6 ^) P) ~# C: ~; p
1 Y6 z/ G% o+ a8 I( ^& o2 P10. 时钟延展导致 I2C 通信不可靠+ E9 o+ y  q" Q* v. E. P

9 B! N) ~" T: T  s6 c11. M0的USART波特率自动识别问题
) Q: Y6 L& m6 C6 N% d8 p* g
5 N& b' y: ]0 p- Q0 z  [# {12. WK15 OTG做U盘主机兼容性提高
% h( U7 |5 G# E8 ^! ]$ _- ~
" H, M: O0 G( Q7 }% O7 I13. 以太网电路设计注意事项" o* D, t3 [) Y
0 o, [( r) q3 f% i
14. OUG主机库在BULK传输上对NAK的处理, x% U; g& H6 ]+ h

" V" j* o1 ]; Y9 B5 ]. `15. 串口断帧检测' W  X. t0 L' ^: C% G9 M
& a& _! c2 ]: ?* Q( W4 j; R
16. VCP例程用于数据传输时丢失数据的处理
. G2 N7 K- D6 D1 L& Q 9 p6 G7 h4 j) M. T/ D# o9 \1 V' h% J
17. STM8L051F3P6串口UART数据起始位判断的问题
; B5 W( D" M0 b; o6 j! D/ \ ( L2 W! ^7 h* t. S6 z$ F% N4 t4 q
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号. |3 p6 z' k- |! y8 S9 l
; J/ `# W, n9 ?  V
19. STM8中UART奇偶校验的使用方法
8 F. W0 w6 d0 W$ _$ t6 T1 W : m( B; n$ V+ ^+ \7 V
20. STM32以太网硬件设计——PHY
' h# S0 T& K! g, N( v$ w4 e  O8 h; i- ~& K1 L9 d
21. 一个判断I2C总线通信异常原因的方法& ~( l( ^/ n# @2 V+ s6 z

4 m, A4 q7 U) H& K22. USB device库使用说明3 X1 }/ E3 ~; d

8 y& ^* M. F! C! d23. STM32F103上USB的端点资源) G/ d+ S2 t" H
* i5 x- k9 L9 b5 @. `( b, x+ \
24. 使用CubeMX生成TCPEchoServer程序/ Q- q/ g9 _* B
6 c; f# X: H0 p0 z' r  Q: c7 ^
25. SPI接收数据移位
' g) ~2 o8 m$ f) T8 e: Y
( }  ~3 u6 `+ r% ^: p6 [26. STM32F0中Guard Time的设置
* z8 W0 i, l! H1 u
: L% x: `. c5 [27. LwIP内存配置. w& \$ B: \& Y1 ]2 T
! O2 t! ^! d* h  M
28. STM32 USB Device的简易验证方法
% A& P4 a# W; f& _. ?# }) c8 B' g+ D9 J5 R3 n8 Y  g
29. USART 中断方式接收无响应问题的一种情况及其处理方法$ I/ N4 w# [6 `& ?, T

1 `& [4 u8 I6 z+ c30. STM32 基于 Nucleo板 CAN总线的建立% J- b1 s" z8 n9 Z; Y$ Z
; R0 v- ^; m7 t, D. W
31. STM8 CAN总线的IdMask模式的讲解% r1 y7 P, x# H9 D, R# y# K
, F! z) {! |/ `" m5 J
32. STM32F746ZG USB 驱动不正常
: o& p+ J$ z7 A; e
* J! d4 S: w  D( m7 N# l& F- e33. MCU在STOP状态下通过UART唤醒分析 6 [" R6 F+ b2 O& {/ j4 x
8 }) ]' _9 _  o( c
34. 通过STM32CubeMX生成HID双向通讯工程 % E1 {# p; U: g5 c
! M( U+ K( l% s, G/ z; T6 m- X8 m
35. 串口工作在DMA模式下有时接收异常
% o' E& O7 D- Y% w, A' o9 r% y. V+ }4 Y4 X( X& o7 n
36. STM32 Bootloader中 DFU使用限制' v* B) Z& }( Y& y9 m

+ h. W7 a3 T  Y) P9 A. i/ P4 t37. UART异常错误分析
3 T  Q$ P5 ~) C' p! G! d+ i5 @! |4 R4 V9 t0 j
38. 基于Cube库无法检测CAN2的接收中断
% M/ z. O( G: ^/ _6 b
$ p' A8 D3 ~: ]# r+ r$ a39. 基于STM32F7的网络时间同步客户端实现 ) J8 }* x% S; M$ }4 {' x
+ n5 B/ H3 G( k2 N
40. HID与音频冲突问题
- b! F% E0 j9 r0 J# z2 C) L% e+ n7 e( V9 }* e8 f
41. 在进行USB CDC类开发时,无法发送64整数倍的数据. H7 U; q6 R# @1 V9 t4 g
# h- ?  T  j8 |1 E: [7 }: k
42. 从零开始使用CubeMX创建以太网工程) O$ Z+ B1 U5 p" Q3 _8 _2 A- k
; I/ N) Y9 e+ v' K" G! W. h
43. STM32F4xxx的I2C总线挂起异常处理
9 }! {% ]! J' \- i1 Z) W2 H1 g& I' g& W* A8 F
44. LPUART唤醒STOP MODE下的MCU0 n% I9 F+ Z6 T) d2 q1 }, }0 ?7 S
: K5 }' M! H; J! }/ F) C& _
45. STM32系列 MCU模拟双盘符 U盘的应用
! r, r! t' P% r
. p1 V* L; G$ w( K8 k/ _46. CEC输出的数据和数据长度始终不匹配
4 d) ?' f( v/ @- h* _6 `  w4 G- l/ G
47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
. o) Y/ Z4 A1 [. \( o
$ p" X! T# o5 s7 h+ `" S+ V; U48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)8 k! R6 H; Q* J! s( i% }! V

, R5 k; H- t! j8 Z% {49. 增加UART接口应用时的异常分析5 Y, p- Q; q' V# d# Q! q. W
1 L. l3 ~8 {  O
50.UART应用异常案例分析
9 G% S6 e1 ]$ R- ?
* X% M2 w- Y: }# D" E51. I2C配置顺序引发的异常案例& f. P4 B5 A! Y8 t2 E, l+ e* ~
. H  r8 ^/ o1 f+ F9 w  M
52. STM32 USBD VBUS GPIO
$ T  w4 X. ^* G* y% j; K' q* l- p0 Y
53. USB传输数据时出现卡顿现象* [' z. H( z0 O1 g
$ E# i3 [% b$ J# {0 W: T6 r  ?
54. STM32的高速USB信号质量测试实现
* ]& F0 Y% O# k) [: P
6 }. |' k: v) j: g5 Z9 N; q3 P55. 基于STM32 I2S的音频应用开发介绍' A4 V3 N, J" }8 s4 v! o- W

6 n) B8 _* U8 D/ g3 n# E; k, R56. HID_CDC复合设备在WIN10的识别问题  
0 a+ y1 ~7 w- L& |/ V4 X4 `3 S& ]
) |" n; Q8 G6 X/ [$ d1 B57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  , ]9 t5 j! j* s# ~3 ]+ R

7 h  b9 f, I$ f& \  |, g* p58. 一个关于LPUART输出异常的问题分享  $ p. j% M& n6 s" ~9 Y
% o# s( o$ S4 j. @& {  N5 |/ n
59.通过 DfuSe 工具控制程序跳进 DFU 模式" K* K5 g9 V, @, ?

. E' F4 P4 y5 O) I9 f; Q60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
! o" M4 y) c5 D2 R$ M5 p
0 j' J! f" M7 [4 t1 T& _' C7 m" A
61.一个因初始化顺序而导致异常的话题 (2019.12.24)
2 Y. B$ s, l' s/ E* l/ z! G
6 d! S4 v0 B9 r- |( s0 ^* j' R
62.MC SDK 5.x 中增加位置环 (2020.5.29)' D; S1 }( Y5 p. Y4 p
% y2 H. F! V' w2 _
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
/ D2 h9 E0 E2 O$ {
9 l" o9 N3 x: ], v7 Z64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
- I# B$ t3 n3 H+ |% O( Q0 p' h: h( N5 n* y
二、电源与复位
/ ^, n! Q7 F2 B, S% e- U. A
0 M) P- ]' k4 q& m) x- q9 \1. Vbat管脚上的怪现象
/ t1 T5 \, u7 f+ M% u
( R; b, L0 Z/ C# V( |2. 上电缓慢导致复位不良
7 P% ~! T  A% Z ' H. s0 y. E: |& v9 \9 }: C
3. 关闭电源还在运行# S; C# {7 _% z9 d% M* B

$ R( o+ l8 H/ I& I8 G2 f4. 使用STM32 实现锂电充电器
* d- c  E7 b0 a0 f6 n 4 M, j$ n+ X. c6 O5 C" u2 G
5. STM8L152 IDD电流测量
) @* T7 l6 C) b# B
7 S) J% y- j( C& P3 T6. STM8连续复位问题
9 e- e: L7 a5 O6 X
* A: z  V, j* Y2 A7 {7. STM32F2电压调节器REGOFF与IRROFF引脚的使用8 N# y& V9 j) k

. F2 C8 U- [+ n& G8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流  f" g0 |. Q0 V  d! H% k8 C; O

9 o( V1 p& Q# R: j( H) H; O9. STM32F7与STM32F4的复位序列比较
4 f* Q( V6 O' ?! C/ a/ h1 B" x$ F1 t  k+ ^' M% c6 [5 N" u+ Q: O, N
10. STM32F107 复位标志问题
; [6 E/ Q: ^) v" V. j# {4 V& Y# ^2 m4 j' j. s  i0 U' f' `. I
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
# @% Y2 b8 x9 n* A. A' N7 \  m' O7 ?3 b$ O3 ]. ^
12. Nucleo_L053不上电也能运行; t9 d3 T7 }( a- r9 S9 n+ U$ w0 C

" |. A; C+ l$ h) }3 {13. STM32L4中STOP2模式下的漏电流
6 O% f, ]6 D. H) D: x/ b
3 m# w" g9 i* c14. 在没有外置晶振时HSE_RDY异常置位. ?" n9 Q# W0 I( R" x' O

- v% q9 U0 g. S9 a" ~5 F15. FLASH被异常改写   (2018.5更新)
, y  ^7 G; }1 X7 \/ T
( `, N, n; q, C4 \2 n' h: z& i: C! g16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)0 H  M4 ?5 H* h/ K6 q

* I' z: u6 {( ]17.一个 STM32 芯片异常复位之案例分析(2020·2.27)3 F' u. y2 G( y; r+ s! @: C# m

0 \8 I. a9 n+ p: [三、IAP和Bootloader
" O) N9 ~  `0 w* w / q  L1 N' I8 l7 y2 W; ^. ^
1. Boot Loader与上位机通信不稳定3 U* u' r1 b1 R' v

2 H, A) A) G: j3 g, ?7 E/ w) j5 W0 d2. IAP+APP 模式下不能启动 RTOS5 Y; t# M* x+ v! T6 m/ {- ^# W

1 v7 u: U- G$ M# j( m9 k0 q! y3. 从 IAP Loader 向 App 跳转不可靠: \/ [& Y/ q) ~$ \' H
2 K; J' [* ~3 u  e  P2 ^6 c" `- y
4. STM32 MCU IAP例程跳转到APP代码简要分析
% y. {2 |3 j+ Z) ?, d0 l  Z9 d6 x4 c3 `" `0 R  D4 q
5. STM32F091从自举程序向应用程序跳转的问题与解决$ f1 _  [0 q' B8 P
# T6 D4 C( }6 x$ B9 w
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码& G/ ~! S2 j0 Y

) w6 z8 A6 N$ r, y) a7. STM32F0启动模式相关问题探讨1 o* G, ^' `( i( i

$ A- Z* d  @# A3 l0 g8.STM32F091空片使用System Bootloader下载代码
5 e- v8 B3 e' q, x2 @1 G. ]
' E, R- W* V  k  H9.STM8L  IAP 应用程序中编程指导
+ @/ t0 ]& z! V: Y: ~% k' K 2 C, f( x& K6 J3 Z4 f
10. 如何通过STM32的串口实现简易脱机编程器( j! c; a5 G- G+ d' f, Y
( G+ {# M$ U+ f: Q( H. {3 V
11. 一种从用户代码调用系统存储器中Bootloader 的方法  
% K0 v; y+ ]1 _; y' J# e3 l. R- I
12. 利用 USB DFU实现 IAP功能& a  E3 d! R4 ]7 v: N) E- i

: S' h5 b$ b8 Y  n( y; \2 c13. STM32 Bootloader中 DFU使用限制' S( n2 Y9 @: l2 O8 b
$ V+ d) N# z2 d: h2 W7 _' B
14. STM32L011x和STM32L021x启动模式注意事项! _8 p6 H4 l; @- P  g9 d, e
7 ]- [) |# ~$ o8 Y4 N! q2 _; v
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 , }# l: ?8 `2 ?% u& Y" b

) o' F7 g5 m. S; _$ o, t8 \* l& m16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 " s) W" |7 g  c4 j
, k; b' P9 Z7 I& I: G: B* J* `
17. 如何使用STM32NUCLEO 板来测试串口Bootloader, I# c) r/ Y/ \- Y: |
' G  g1 M- ~% v. Y3 \, c) ]$ q
18. 在STM32L011上通过I2C接口实现IAP0 h1 `  ^9 \$ |' Z. m, a; Z" ]
3 R! N# W6 s, H+ C0 l* n
19. 在IAR中实现通过将程序在SRAM中调试的方法3 z, H- `- Q( A- O3 N
/ i3 r& @1 N5 O# E
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
# j- V( \& L) f  K3 X3 E
7 l8 M+ ?4 c/ |9 w8 P7 a21. USB DFU IAP 例程移植的两个话题
+ d+ j4 Y! j; J7 R* I7 F
, F/ G' q7 d0 r2 K- X22. STM32F769双bank启动
7 N% e# U7 t  H% c
9 c* _7 n4 g8 L: P23. DFU加载 工具 DfuSeCommand的使用
: p0 N8 E) i1 F! }, I" |/ l, ?  i& H$ Q! \8 l2 K  K) L
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
) \" P9 w* z+ A% b
& _0 M2 G" @( y5 u- i25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
0 N* o- W+ ^  Y2 {( ~, H
8 O  {# B% e) o" J26.STM32 Bootloader异常复位案例(2019.4)& f8 E2 {  P* S8 r# M* z& \; F
+ A8 W4 V% |1 v" A3 `1 C" x
四、存储器3 X! r: y% \; q+ K

% M& Y1 ]! r7 l, C2 w1. 对 Flash操作导致 USARTU接收丢数据+ |2 v/ B6 Y3 y9 n. x

; k4 g) \6 \" p7 \2. 使用外部 SRAM 导致死机( {0 j, r: q# u9 x: `4 f$ m
) E. X- E/ b% R) \* i! w8 c' t
3. SRAM 中的数据丢失5 u9 @5 {! o9 U
1 t7 E9 p$ u5 ?( l/ O1 x/ O- e
4. 干扰环境下 Flash 数据丢失
& D3 l  q8 [9 P2 E: F( R
' p) X4 K/ U) j, W! T5 J5. 使用 CCM 导致以太网通信失败  A# L4 Y2 U1 S3 R9 R& W
' Y1 s0 N- O! X, @* f+ v. n' [
6. STM32F429使用外扩SDRAM运行程序的方法' h5 ?  ?. g. q, B  V
  E* l. Y& b0 S- U; B
7. 使用STVP实现对STM32L1系列EEPROM预置数据' V" y+ z% B5 @3 I+ x

; h0 C3 v3 \7 y. j9 r( p5 H8. FreeRTOS RAM使用情况及优化方法
: M) Y* J2 U5 K' V1 Q/ ~9 F
4 s: d" B6 X; G, J# N' h) B9. 在IAR 6.5下如何将数据存放至flash中
  ~$ N) Y" Q- Y0 ~) e7 |4 {" \" Y# v( [- A' d
10. IAR下如何让程序在RAM中运行# f' [$ T+ K+ o

% V8 Y6 w9 A  a8 k* K11. RAM上电后初始值问题
# _3 I' `4 M! P, a5 j) g. o8 w) c
; I* F, Y' B! ?0 s) k12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计- G, M5 r7 t  u9 Q1 l1 b% ^+ I

1 _6 ^/ P/ p1 U# [1 b8 |13. LwIP内存配置
, L" U  ]" [9 M" x, o7 a$ V" V  x4 G! f
14. STM32F2高低温死机问题/ |- p- k/ N) K! Z& q) D
/ w+ n. l; o$ ?2 H9 c; h% [
15. 使用STM32F427的CCM RAM时遇到的问题
5 y8 p: c9 y, y. |
/ t$ ?6 A* W  M$ v16. 利用QuadSPI外扩串行NOR Flash的实现  
8 p) f2 I9 E( r- c& ]0 p5 W6 g# e, o- v; R7 l
17. STM32擦除内部FLASH时间过长导致IWDG复位     
$ [5 q$ `8 r8 N* k/ d/ T( Z: P- M
& X( C6 s' h, _9 U. r/ s
4 I5 K" ^% A0 ^9 _* p* V( b  v
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
( g( w& j8 y% M+ C+ d8 ?
# o8 V0 D& W5 n8 V" I五、模拟外设$ E2 q1 y6 O0 e6 y- I) G; _7 W# L
4 b% j* d) ^( X; z- R
1. ADC对小信号的转换结果为零
4 j  N* E# x6 b
! f: [# _8 u" H2. ADC键盘读不准; r% C6 K$ r; k

3 t2 _$ k' S# Y( {$ \3. 扫描模式下 ADC 发生通道间串扰, r3 r$ O# E( l1 |+ C& K% G1 K/ Y
7 C, Y. H5 D$ P  |
4. DAC无法输出0V的问题分析解决0 j" f* i: S" h4 ~. D7 J5 B0 D

$ }- f4 N' x+ W  l2 {0 h5. DAC无法输出满量程电压的分析解决2 o) l# f6 f. L
# |+ t+ L$ F5 C9 H" i
6. STM32F30x 的ADC 采样的傅立叶变换; F/ O: r7 h& l$ P0 t( P+ X% a

+ y( R" U% I1 k/ v7. STM32 F1系列 DAC的示例详解" c: Z) e0 b( K. Q
  p5 f: `6 n" P$ t7 N" j7 j
8. ADC 连续模式采样浮空引脚问题
. ~& c% h4 D3 _. R8 ~! i
  @" r4 R' K# R9. PWM硬件间隔触发ADC ! d; \' y, O1 U7 j; \0 |

% o  d! Y2 \& K4 S$ O! s; z7 z10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
4 i3 e; P9 i/ P' k8 v% N' F3 _' _9 G9 R* K
11. STM32L4 系列中ADC 通道配置上的区别# Y/ @; q6 Q% S* j0 _4 \7 D! r* O
8 h/ ?+ N4 X; \
12. STM32 ADC模拟看门狗及其应用
0 i. C) d0 b, Z$ z: `* r' G9 N/ R3 w& l6 b6 S
13. STM32L053 comp2 比较电压无效问题
( S3 [! K3 V7 u. T. P8 P7 V5 U2 k# X0 r" e+ O  _
14. 运算放大器OPAMP在STM32L4上的应用3 E/ L# I. X( L# h7 r) z4 l

: e" {0 V" L2 i15. STM32 OTA例程之ESP8266使用 2 @$ J: J( C6 B  e7 K4 s+ |
& h! k! Q/ F( W, c
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)
! Z& a; H' r! N5 G0 E
$ L  _8 b/ o1 ?" D7 \" \6 B6 [六、计数外设+ T# @3 Z7 Q- B  e; N5 d3 W7 F
3 O  H" u( {6 e. M3 |3 a  X; |& f/ m
1. Watch Dog 失效& m/ b4 R5 M$ u3 z# m
- s+ @8 x- W5 G" ?
2. RTC计秒不均匀
  K- p% ^! _- P9 | ( V) ?3 s( U- p5 v' [
3. 软件启动模式导致 IWatchDog 失效
' o/ F8 t, E, a, @' p - N+ i0 ~2 @  R9 @# ?7 S& Y7 e. E
4. STM32F030R8 定时器移植问题5 H- J$ V! T1 b5 s9 n

1 }$ S( n% K4 F& v5. STM32F0使用RTC Tamper的几个注意事项; M6 [# G& l0 |

3 H: y% S  P) {/ [6. STM32L053可控PWM脉冲方法之DMA% Q; J8 p1 V. r0 d0 y3 p

$ s9 K5 u3 }+ `" T8 U7. CounterMode,OCMode与OCPolarity关系0 f3 ?5 x' D4 c

$ l1 `9 Z6 s8 s, J8. STM32L053可控PWM脉冲方法之DMA! ^5 Q# E/ {1 W% z" A/ C$ u$ P! `
: W+ {. ]" F5 t" G9 K' B+ v6 D
9. STM32F1通用定时器示例详解—TimeBase
+ ^4 S, j& a0 J" Z- S% G5 w  z- u9 H$ B( P+ j% D1 H0 E' p/ W0 f, {7 s
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
: g5 U( v$ v8 r4 ], x* S: v/ J9 Y4 H; h2 [) t9 `3 O
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生! S* C+ ^# Q$ u' i2 `3 t5 ]6 x  ~4 ~

# r& S; B' i$ Y6 Y* U, O12. HRTIMER的多种Fault事件联动机制- p5 n# ?  e5 C  f
6 n9 J. E! }/ H$ p1 m% h
13. STM32通用定时器 示例详解 —One Pulse' w- K( R. z7 o& Y9 j" J
  J( H4 {$ L3 {* g5 f; r9 s. w
14. 如何用LSE校准STM32F4内部RC振荡器
: `6 |/ p: \' i/ ^& A  ~, W5 C2 Z2 C
  Q: r% u* L9 R- a- X15. 一种使用Timer测试HSI实际值的方法
2 ?; f1 o' k5 {; U1 I. b) b$ s* K# h( n
16. FreeRTOS定时器精度研究% a# \6 d/ m& N: _7 G5 e

7 ?2 O2 @; I2 I2 e5 B% Y8 g17. HRTIMER产生多相相移信号
& r8 T0 v* S8 ~- e4 X( Q1 y7 @- S7 H; f
18. 窗口看门狗启动时异常复位问题
/ F$ \8 Y6 h) ^1 J4 m/ p7 b4 x' Y% b" C& ], j/ G- _, e4 m! o0 C
19. PWM硬件间隔触发ADC" {; p- m& ]. r; X# ~0 J
/ @- ~/ j$ [6 ?9 p7 ~, d' Q3 e) Q/ r
20. STM32F030低温下RTC不工作1 u$ ~2 y3 @( K1 u. M/ n3 [
- G6 h% {. c2 u! m3 f6 S
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   ; j0 j$ B( r$ f" a5 U( D
2 R/ u5 O. \# N
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
4 C& l8 f8 m/ D% r& B1 I
& C: Q% A) N3 F9 s0 C23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
8 N! d* w' {' C4 Y! N+ V' t) }% U9 y* j  Q- y
24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
( E! q" r& o$ K  X+ C

( S$ `. T/ }; k% ^: [! V! [25.MC SDK 5.x 中增加位置环 (2020.3.31); y. A2 k+ @: k" ~" f
% U! ~; ]5 r9 \  Z; F: T
26.STM32高精度定时器PWM输出话题 (2020.4.29)) p: O" p0 c& V' ^# V9 u

8 H, X5 X* C! n0 ^

1 I: P% }5 G2 B/ e/ K; V27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)5 c. X( N6 M4 I' |
* ~2 H$ a& f- U* f
七、内核* q4 T* x! C" e4 F

8 m( i: ~, X( T/ L+ i" K1. 使用指针函数产生Hard Faul
9 M! X" u( s  u1 d
7 Y7 j9 `/ T! e1 \2. 调试器不能通过JTAG连接器件) p1 s) z1 N* i1 W
4 ~8 U" Y9 |* x' U) I
3. 鬼魅一样的Hard Fault
# s0 u/ C0 X! }8 i! H. [ ; t2 t$ R& E1 a4 q1 B2 j. t
4. 进入了已屏蔽的中断[
& Z% g4 R7 A  F) D* X' t& ^$ { ' O$ N7 i" g" Y1 O, S) x4 f
5. 浮点 DSP 运算效率不高5 {1 ?3 S4 o. n) T! e- [, ?1 _; j

, v1 K  R5 [. b# b6. STM32上RTOS的中断管理
7 A1 j# w- r- ^8 `8 k( p2 `' \4 B" u( |
7. STM32F7与STM32F4的复位序列比较
" ?6 S! q! y, b+ W5 m' O% Y8 j- n$ h2 B" {5 |1 L- f
8. STM32F30x 的ADC 采样的傅立叶变换
0 L6 D$ t- S9 m0 b6 _8 {/ E1 X3 U9 w" T0 p) A  T8 V' J
9. EXTI重复配置两次导致误触发中断的问题# X3 y0 t1 {' F& s0 f, p* l

) X) g; G8 b8 x. l) w+ Y6 r10. STM32F3xx/STM32F4xx使用浮点开方指令: E; H  n5 g. ~% W% \9 X

6 ~# p# h1 T' r11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响
/ n, y- g5 x- ^9 }4 v
% Z, h6 M, H' X8 l0 a/ q) Z+ k 12. STM32F7 MPU Cache浅析  
, |: p# Z: v% ^% B/ u' C: {+ p/ b, p
13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)  C9 \) J# M/ o8 D$ N
' {; {5 H7 h9 ]& w
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
- z" s+ ]3 u8 U' S4 E" b* r

  G1 Q0 D* m4 }, p8 ]; t8 b
) f3 B) y# ]8 |; U4 F% d八、系统外设2 z8 S, D4 R  N& H/ ?1 F* Z
+ r) {2 R* i& F* H8 V) d
1. PCB 漏电引起 LSE 停振: M: a) G- \% g0 o1 Y4 c) ~3 c1 s
& ?2 ?/ @, t: a6 b4 U
2. 时钟失效后CPU还会正常运行. u& ^8 ]5 g* y7 L

( M1 ?9 N" n& A( |4 W8 B6 v3. STM32F2中DMA的FIFO模式
0 E) N" R6 u0 V  S: P0 Q* D# G5 y
9 L. Q( o7 F& w5 c- Z, D7 [: b4. STM32L053的GPIO翻转速度的测试
/ n# g3 M) R7 x( k8 X* v/ ^
: k7 B& O; @8 K% {5. STM32F4xx PCROP应用
4 B3 {* o9 ]" l3 p* G! r
! l$ F8 _1 H3 q) A0 J6. STM32L053的GPIO翻转速度的测试
5 f2 Q3 X* F9 ?/ G# k
: j" b& i# Z) q, \% K, `1 T- D2 c7. 如何在IAR中配置CRC参数2 @  [/ y" Z5 t& F+ A' Y

* n7 l4 |9 z& O' r1 T" U8. PCROP区域函数无法被调用的问题与解决/ {/ e; c% ?, o$ x2 @
  l+ w4 A* a) R$ e5 S+ a' O; v) }
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题3 G! ^1 @9 V- ]' K8 q$ a" k$ _: c% e2 [

* V; ?+ R4 Q5 T, x10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计. M5 L1 I: H" Z# v" _/ Y: S

! Q; z1 J, b0 L9 T11. 如何用LSE校准STM32F4内部RC振荡器
, h: l, `' _4 s1 s4 G
7 R9 Z+ |5 ^2 a/ g12. EXTI重复配置两次导致误触发中断的问题  ' U- P$ Y$ v5 ]$ Y# d, b' F
, a, f; O! J$ I- u( ^0 G
13. 时钟安全系统的应用(LES篇)  
. {: X' h7 L1 o# C
; w# _/ t' B) x' z7 O
14. 利用DFSDM开发PDM麦克风应用介绍  
! T9 f( o9 O. D5 \% t
" Y; y! a1 {1 V* c2 Y* r
15. STM32H7的FMC外设在DCACHE使能时运行不正常
, A( J8 P3 c7 A# K$ E2 B( I5 W- r/ x& |$ j2 D# h: s
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)7 `* [* E7 k: E/ d9 F) i

- d$ p1 _# O1 x3 f  Y) Z
9 i/ I  y+ H/ r+ r九、标签和收发器
* u/ B% L- o+ ~# E& U
( z8 E1 z4 A9 ]& I% v- E1 l1. CR95HF的初始化步骤
4 J! N; [  k8 X+ H8 E! _! O9 P1 L 9 ]2 l* N2 M7 D8 J( }

1 A4 o: i& t' [$ W; j) Z8 i5 j
; b' O  }7 h% D  t) a0 b+ n8 y十、生态系统
: q5 H  a1 s! O7 P% f/ ~" s+ X5 r# z- w
2 c& m& K9 n; G8 q% ~3 i1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
: P9 e- a7 n% x( Y" @% }% A: l7 {$ C , Y5 H! B* W$ W: T1 ^1 j! P+ C
2. MDK Logic Analyzer 功能在STM32中的实现问题$ F# r3 Z! B! J+ ]' R+ q# V
) I# w& k& J! V  {- j5 }
3. 在IAR6.5下如何将数据存放至flast中
8 H! h; v; ~. O, N+ V+ t3 x
% F& s1 R; a% g2 i- w) h+ t4. FatSL移植笔记/ a" {8 y+ `" i
: D6 N) ~: T' S5 \  p; \
5. Keil中使用STM32F4xx硬件浮点单元
6 c( W5 k5 n/ D- u- y+ C# R
0 i. D) m1 S. h3 I% f6. 如何生成库文件(MDK和IAR)
& n) C3 K4 q9 S) `2 p& t
; W" U- Q$ u0 ?8 q3 t" L6 f! \9 H0 x7. Nand Flash文件系统解决方案% B8 {5 H2 v# `- b0 Q
( k( q$ t: H4 ~9 V# D" `
8. STVD在调试时弹出“Cannot access configuration database”的解决* t5 ?3 g; x; u2 h
3 w1 L$ V/ v# Y" g' z8 {9 Q# B' F! W
9. RTOS低功耗特性的设计原理和实现
0 X/ V# W' D0 @. y
+ `2 |" H7 M) t7 t1 }" S, j10. IAR下使用J-Trace进行指令跟踪
9 I/ n% c) B4 p" m$ ?9 A
. X1 _$ x9 T. Y/ ^5 d1 ]11. STM32上RTOS的中断管理
: p& q4 _" V7 M! J, G' Q7 |- q9 c( L  ~3 F3 E+ {" @  G+ c
12. IAR下如何让程序在RAM中运行
: U! r% V8 q: ?+ S) Z8 u" ]# Q% S* \  W3 k. l+ X
13. 如何在IAR中配置CRC参数
: U8 s) m2 l& F0 X4 e, H  h
' I- w4 h; ~, R" _* k& x14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册) G4 F" l# f% C" g' \" }
) H2 @4 `! |; I; h: S
15. 使用mbed进行STM32开发及STM32F0的时钟问题
' Z. _6 g& ]7 s- h8 J) U9 |8 }/ Y& l" g- p
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能: b; Z. K4 L+ h4 u

2 W& ]$ C# f7 o17. 多任务系统中的不可重函数使用注意事项2 f9 D5 q8 k. M1 [

2 Q, Z: _0 q, G) m- a8 e' G18. STM32 utility的hot plug功能
* v& k" ]: f, @6 M6 O7 Y% w" m( \/ D8 B
19. 如何将CoreMark程序移植到STM32上& V3 v7 t4 w# c1 e
  k4 O' U! W4 p
20. FreeRTOS定时器精度研究
# ^8 I" X$ D; w5 ]) G/ z) d9 b( z: I9 e" {/ ?
21. 如何使用Eclipse和GCC搭建STM32环境( ~) e1 B' P1 K8 I  ]- u; i

  x4 l. D* L3 P2 u, y7 ?8 B6 D% h7 A22. 如何建立一个基于GIT的STM32库
( F3 Y) [% G2 l& R: k$ Y
/ ?+ y. K5 v+ c8 y) P$ v; O23. 从零开始使用CubeMX创建以太网工程
0 k0 A% z: w1 ~& t4 M/ g7 r$ P$ B* j  P) }! Z
24.从STM32Cube库向标准外设库移植FatFs文件系统
& t" x. D1 D7 e5 Q6 x. ?
. v6 T. f% x. K* Q/ d25. 基于 STemWin的屏幕旋转1 ]* m7 B# ]7 \  v& |" ~$ R
6 A" U- H  Y# V  I3 X3 X* w+ n
26. 编译软件 Hex文件烧写
* y9 \- d4 ?1 {0 A% ^, ^6 m; v/ G6 F0 a1 v8 `
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
1 I7 b6 O0 F& z; B; ]; g3 {* Q, o2 c2 ?; T1 p: T9 S! E
28. USB CDC类入门培训
; C# H5 T% v# b: Y7 b) d( v1 y5 P- I# [; m% ?) n
29. USB DFU培训 1 P& T4 n7 ^6 b0 ^; X$ N. b

, C& E* ]/ M7 k1 K! b& @0 e30. 用于量产烧录的拼接Bin文件操作/ [9 v0 R9 B: ]1 C! s8 f( s' k

. ~. }1 D# S2 v: \1 n/ ?* G2 q31. STM32免费开发环境该用谁3 |) W: s- z  l

* a  H  Q" H" x! g! r32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)& @, e/ Z, ]. L6 e+ ^
  u5 N% f$ a& L- o
33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)8 S* H. \, t$ n
5 W* m0 Z# Z) @6 S8 Y( P
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  , r9 Z- I" j: X* H8 x7 d1 z
  k/ O' f* Q7 a  q3 y; V5 A! B' u
35. STM32 FOTA 例程之 cJSON使用   . y- H& o5 ~* P& m: p
& i. @+ `, u6 E2 ]$ @. k
36. STM32F769DK 云端固件升级例程使用说明
- z( F  a2 ^6 _# K
/ Z# ^. U' a+ j8 g
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
7 L+ b  z) E2 l5 g4 K* a
1 P( L2 I& k1 c3 m5 ]38. 基于 STM32 的阿里云物联网平台方案
, @  q) \% z% X( F. `, M. w; I1 f
6 d- D# w( b4 K" b39.AliOS 任务上下文切换原理分析  4 a- X( f2 o. ~# d- i$ l9 ^

6 P) q2 I/ F+ ?40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
" e/ k5 n. S! p2 m6 p) U! ?2 p$ r, Y/ A$ _% }' \7 W1 J3 I8 f
41. STM32F769DK 云端固件升级例程软件开发文档  6 J4 F0 D$ j( D; ?, F8 z) }

3 ~3 J0 G/ T! J  B$ i42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)# d% d7 U: T5 r8 r1 f
- H% M: T5 r; k" \4 n+ n
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
% z8 i) r- O9 f- L6 |% Y8 L$ B$ O! V# ]- s7 k' M( R2 |
44.零基础快速入手STM32MP1 (2019.9.19), k# Y" s) l% U

' g; T# j9 v) z. ?: N4 S7 r45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)
4 J+ _: w! \# k
1 ]5 M% E6 ?; e+ S9 s4 e5 j十一、调试- i1 i5 H# A1 p' ~. x1 c* W
8 p1 L- t2 _: N# l1 y! p
1. 关于STM8S SWIM Error[30006]的分析
0 I4 t$ W  g/ V1 B % o8 {' t, E+ X4 s, A
2. STVD在调试时弹出“Cannot access configuration database”的解决" o/ V, Z! @+ N8 {2 Y7 Z

, G* g* N, |7 |) s$ r3. IAR下使用J-Trace进行指令跟踪
* K& l! v0 @3 v
; n2 Y5 z' D  C. ]4 Z& v4 F4. 菊花链 JTAG STM32; @& }7 W0 h7 _7 |

/ y: t* G9 K9 l- [. h, R5. STM32F411CEUx 能下载程序但不能执行
" r( V1 R1 _0 a) n+ x8 K% Q8 _$ A0 n
6. STM32F103C8T6 程序上电跑飞
* ?; H5 v9 J  b9 S# X& A' f2 W, V# x: o" U2 M5 R; o8 }
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行9 W: q# I. X5 S; K

; z8 ^' {: R8 _5 A2 o" U- R8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
; J( J0 f2 s: {+ Y
) I5 m( e9 D: J3 e! o- [9. SWIM协议的GPIO口模拟1 |0 Y/ ~8 _9 }; D. _
6 }* y) L& t2 b9 p5 c& Q
10. STM32F091空片使用ST-LINK烧写后复位不能运行用( I8 `) i5 a  ^, C! u7 L' W
9 k8 w; `( X& s# U" _: Z6 F
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新); b7 Z4 N" o% Q# e& l- O
4 v, ]# B9 b* f$ [" v- l
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24): m' I( `7 S3 L
* c- ]/ p/ z- V# @3 Z/ R
13. X_Cube_ClassB代码移植 (2019.12.24)/ {( T. |; u6 J0 M
. I$ k8 C) j! h( H

2 f# s9 v# M1 `14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
; q3 U, m8 D3 f5 Y$ x& N4 k! n' P0 g/ u
十二、人机调试' G9 ]( x( q% \9 s) t- O1 c* v

) z1 \% m% l8 C3 i1 w- i( F1. 一步步使用STemWin在STM32上开发一个简单的应用, i3 q+ f4 d/ z; h* ]3 A
7 L5 N* `0 Q: |3 i+ ~6 W/ }" f
2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
: @1 q8 N( j6 M; K$ n8 B7 G: j  ?2 @) z8 i1 e: o1 i4 x
3. GUI方案中ALPHA通道处理介绍6 r$ `* v2 e6 `* b( m3 E4 z

3 N. s, [+ B5 a4. 基于FMC8080接口8位LCD的STemWin的移植
: O# M# M& ^6 |. c( f, D
0 x$ [% b8 Q( f% |2 v# t5. TouchGFX中Callback模板实现原理 (2019·9·12更新)
& O( Z; U7 K& L& H: W6 O1 U
: x1 H& X' D, A. C! c( y6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
+ G/ u. o, G7 o4 P6 M+ s2 _# S, ]7 [0 s0 `) z1 k& U
7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
+ A: a& D0 j6 e& J) n6 R4 ?. r% `
8、STM32L5中如何关闭trustzone (2020.5.12)
+ n  ]  A9 n$ |9 A! z. i6 ]& \) p" h, r6 ?5 |/ D; o* @
十三、马达
7 y" d* W$ {$ n
! n3 p3 P/ ^" g! V- K) i
1. 电机控制同步电角度测试说明+ m# Y4 M' f9 S3 C2 D
8 y) g( T- I, j

& Y- R6 V2 \! m* l% N' r8 J
' R3 |3 r/ z+ a+ Z) y十四、安全, g4 Q( \  G' i; J4 Y1 W- ?
/ w- W" D2 Y" Z/ ?) m1 \1 w4 k5 ^& `
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
1 |5 }# ~6 V% C4 r: y/ F4 v9 }3 \- ?# q8 n" n2 g
4 R# S0 f# m2 M4 |8 s1 V: J
十五、其他
6 w, h( G1 ^$ H
  J% \4 ~2 c) K' ~9 r
1. 跳不出的 while 循环" @+ h9 Z6 h. w4 p4 B8 ^
1 \  {; S* K" Y, P; Y0 _
2. 外部IC连接NRST导致MCU内部复位信号失效的问题6 u6 H# H7 K% H, Z: \) _" s
% y) L/ O  P* N7 G( v1 F) Q- r
3. 潮湿环境下不工作
* |4 Z$ @7 `; |! E; }& h) d/ Y
" a5 [& X; b, _1 n) S9 |! P" W3 |4. PCB 漏电引起 LSE 停振* X: K: u( _7 A1 F" ]6 x- u3 K& J
. \. P( p- }, a) K- \5 Y
5. STM8L152 IDD电流测量7 E& t, h5 Z+ _- A; x0 @

/ }; Q5 a4 R2 g6. 使用STM32实现锂电池充电器
+ ^  |; V6 F. d' N% `8 a" r. `& G3 w/ Z % q$ g% p9 E7 Y: B" ^- ]$ J4 w
7. STM32_STM8硬件平台基本检查
! G* C6 q. B9 ?7 }% p; A. e1 N
, D0 Z( w. v: r+ g5 y7 w8. 验证STM32F401在STOP模式下的电流
1 w7 s, G3 V3 _% T5 |0 k
; x1 O, w7 R* S- n  |6 s, n9. P-NUCLEO-IHM001 电机开发板串口调试指南1 ^3 v2 ^7 o) a% S

0 ~. M$ K% \% T9 R( }10. 一种计算CPU使用率的方法及其实现原理
2 L' @3 i$ `6 _$ y1 c6 I# z5 b" e6 R6 S$ x+ {, A
11. STM32 RTC不更新原因分析5 P: i# @6 M2 b) Q7 G
* t8 a' {4 t0 u& {
12. 关于ST库函数的代码性能对比" U7 C  {. B/ v1 t" t# }" ]1 ]

* S& W' |! w) q  ]6 q- ]13. 在IAR中实现通过将程序在SRAM中调试的方法
- ~! B, a4 U% }3 x# _. {! o/ m+ Y7 p2 [6 [. R" z2 C% K
14. M95xxx EEPROM写保护配置+ b- o$ ~8 {/ s! n
; j" o8 ?9 |  X4 K4 N, M
15. 4SRxx的GPO的属性# H8 ]* Q& L3 V. I! }

1 D( d' _% t4 u& G7 D! B16. CR95HF的初始化步骤
4 d* W$ W4 |3 j% y) ]
- D6 }) H7 }& M; R$ J) Z, r' q17. 电机控制同步电角度测试说明  % y. B. x( v) p& r; s# Y
1 P) Q- j" H* G2 Z
18. STM32+BLE通过 Notification与 Android应用程序通信的例程& G4 m8 ^9 s6 Z% ]

6 ?) g5 q. ^3 c( u) X19. M95xxx EEPROM介绍; I, b3 X. I! {0 L# s2 W
% }6 a4 }+ m8 P  J7 b6 b* c
20. STM32 DFSDM测量温度应用
) i, e! a) r9 X/ }) j: h* y
1 @, t0 z* ]+ q: }21.代码实现PCROP清除
1 v# C) z4 Q  k5 K- {' E0 x" ?2 R4 R) E0 G5 v3 W- L. q1 T( S
22. 理解与应用MPU的特权与用户模式! o! _5 X! a, V+ L: L+ k6 a

' @( v8 G% P) \3 Z23. 用于电机控制单电阻采样PWM变形信号产生
9 O5 p" z& Z6 x! Y6 o9 @1 _8 a. p5 w( ~( o2 W+ u# R" }
24. STM32L低功耗模式唤醒时间测量8 G. i6 r5 T% S( \. W9 R9 B
. U" T# l3 u; C8 A# i, c" @
25. X_CUBE_SPN7程序电机启动抖动问题$ R" o; o6 M3 e, h

  U9 ^/ t# Y# U" k; T26. 发现STM32防火墙的安全配置7 y- u9 F( W% G) j" r+ C

/ m. e0 F. M! Y27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改# X! y9 t( @% R9 }

4 p/ v* v) z: E9 r$ P/ v28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新), g( E4 g7 c0 p( ?! T

7 J1 k! @* e( v& i
温馨提示:

7 @2 L$ x8 ^  R- _# c3 l! ^) d
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

; G6 H! ~# n+ _5 x5 B' a% k
$ b2 u- O. s$ [6 \" a/ n/ q) o# b
) G7 Q9 b, g! c3 u# x  C, r9 O1 i0 n3 O

: e( B4 N& ^3 Y# \- G- X  W
* {! [2 E! q% A' u
, K, E7 w) Z7 d5 o2 l. [! J
5 m: r& U' @, p" h, Z4 {+ F" k( H
0 x* i& n# F! e
  p/ ]8 `- D! T
( X9 f- Y$ H) j8 ~4 M  j

评分

参与人数 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
好详细,多谢分享* I4 l, v: h0 o3 K' C: D
5768340 回答时间:2018-1-13 14:42:54
HI    B7 ?  a$ [7 R
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:" Z# O! [! c2 h, C; t
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    ' K4 @' A& P* A3 t. S  K% T' ~
  2. 函数名称:Cdfinger_Bspspi_init2 {6 B/ U$ Y' Z. O' k
  3. 函数作用:spi初始化函数
    5 o( y. y" c9 c7 G( L0 L6 W! `5 Z
  4. 备注:; e% v1 U( y, D
  5. ******************************************/
    0 N2 \+ @) g& f% C
  6. void Cdfinger_Bspspi_init(void)! g; u0 O$ ~/ x5 `: f' y# {, I5 j
  7. {
    1 a! R! [# t7 M
  8.         GPIO_InitTypeDef GPIO_InitStructure;$ [& w9 T' p8 w# f; O: e
  9.         SPI_InitTypeDef  SPI_InitStructure;5 f6 _1 o3 X1 L6 M) T7 x& q
  10.         DMA_InitTypeDef  DMA_InitStructure;
    $ t! n/ d5 f# e& Q; j4 o; N$ i4 P
  11.         NVIC_InitTypeDef NVIC_InitStructure;1 f" k1 D2 Q3 d- K( g! h7 W4 d
  12.   9 s/ K2 i5 m) N7 f: J
  13.         int ii =0;9 a! F6 Y8 s! P: E7 j
  14.         / P5 w. D  Q$ l  {" I2 g+ |
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);% l/ @/ w' y2 W$ O: a: S5 o/ u
  16.         /*!< Enable SPI2 clocks *// S. g3 S3 `' f7 ~! q" W
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);. [# J6 A1 w9 ~2 T
  18.         /*!< Enable GPIO clocks */! r- y: i4 ~$ I; N
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);" X/ Z* B9 B( x: ?2 S
  20.         /*!< Connect SPI pins to AF5 *// K. T5 N- k5 G7 |
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);4 E: Y$ j# J2 R) A8 _5 F1 g" S3 I4 l
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);. Y4 s( ]  l; E5 x, H4 T. g
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    & q4 x  m/ E0 {8 p1 ]
  24. 1 t3 k  `# ~1 _  ]. k
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    $ Y. M3 T# E, x; r: z+ G
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    / `" c$ G- }  P0 G1 T6 v4 P
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    0 L! W1 Z7 c# X1 }" m
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;4 L( w# H! h7 T& q! l! `, y
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;4 q8 b/ C" ~% c2 q8 t5 c
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    , P/ J+ H5 Q# E% Y6 n

  31. ) m& o3 t" o  H
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    ! c& [% ?/ k6 f& }6 w- T
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
      E+ `0 a+ r8 [! I5 J
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ! [2 H: P/ \# ]8 V' e/ ]8 n( \+ F
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;$ p) A8 Z2 f7 J4 _' N0 }  _
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;7 n3 _$ X- a$ }( x
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    8 L) j& ~2 ~' r. M# j- x. C
  38.         Cdfinger_BspCs_HIGH();
    ; B) r0 X* r+ W* d! L
  39.         //Cdfinger_Bspdelay_ms(1);) Z: K4 n: B% }/ v
  40.   //Cdfinger_BspCs_LOW();. }; |, q" E  I2 u  z+ O
  41.         SPI_Cmd(SPI2,DISABLE);
    * R$ S  Y" R! k
  42.         SPI_DeInit(SPI2);
      M0 k1 T0 i0 g4 w  e
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    2 J, a3 \! e3 n" n, ?. f* y
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;2 K  u; J: w( e
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    " r& w, \% Y" X# o: S
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;2 E6 T' B- n! n  C9 }3 w4 E  t+ X
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    1 c0 q% i% B- N* f7 g" U
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    / R. n: b4 p( q" d6 V$ N4 A
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    " B: G/ E3 _2 B
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;! E- g) U! q) v9 |) ^
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;6 @+ C4 A+ u3 t4 g" R
  52.         SPI_Init(SPI2, &SPI_InitStructure);& n5 q' D2 ]: k, U2 p+ D* p( {

  53. / g# P4 d! Y9 n/ X/ c8 x' {
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    * o1 a, f) c6 G% S6 n
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    6 ]* K1 ]4 q5 {! L0 r5 Z, D! x
  56.         DMA_DeInit(DMA1_Stream4);
    ! X7 c5 S2 |. O  y; X. Q- }
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;/ j( R& H6 H; j* K# a) H
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    . f" u( A) V* x/ |: {
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];: {+ D/ f. Q* D* [
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    9 D9 L9 q' Q% m4 f$ z, J1 q' j
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    0 M% E5 U! o6 p2 S
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;$ i0 M, n. w# X& K
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;; `) e7 g/ r7 e, ?+ l
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    3 O/ Q1 O% q& O5 y8 U5 |
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;; C: I) J9 Y* Y5 e
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;/ ]0 c, n5 N. ^' k+ G/ a6 o
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    5 K( J. @$ b& m( b) A5 o( Y- n  O% T
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    1 z) w8 n) j8 `1 M( D, l: F
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    0 d3 M( f' s. z' n: u
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;- t9 C3 |8 @7 S& T
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    ! I( j) Y' l1 q+ [4 S
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    ) p* o1 r- [" E8 P0 h* k4 g( E8 [# O
  73.   
    $ I' Y5 C* ~, F1 x4 L
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/+ L8 ^% c9 I% k1 P9 y
  75.         DMA_DeInit(DMA1_Stream3);
    / _# t/ l0 _7 [
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;! n' T( W- O" t9 {: N" b
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    - L! J9 G/ C, _# ~6 Z9 a
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    , q: Z" I3 x: o) w5 r
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    / |# P- Z* Z$ [& j6 t! s
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    3 Z6 E4 y0 z3 y8 D
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    & s5 [% n! m6 ]# D% o' ?) F* z
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    , Z# n. c0 i, i6 r6 {
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    $ M# I5 |, |; ~0 a" G: o
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;; r' Z9 k% R9 V! E+ ^
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;- m% _1 q% V8 a# G: s
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;+ [" @' a8 }, y
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;4 x) j# c/ M5 _4 T5 s' x8 h
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    3 f* [1 f% T% c
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    , h& Z# _0 H8 b9 ^* h8 X3 |9 v
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    5 Z7 D6 B5 T7 n! D- u' c" g9 l
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    0 I' n5 m! @1 X; o  k2 a. u/ F- O
  92.         //Cdfinger_BspCs_HIGH();8 p' Z1 e9 x0 \& ?, R5 [* Y9 o0 T
  93.         8 \1 D% x5 Y: D  r. O. `# l

  94. * z0 U2 U7 W9 d' m7 w, \' E/ a
  95. , ?2 F! F$ [& i& w/ q
  96.         //发送中断
    3 y  m6 y  |" d! x6 {
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
      ]# V* L3 K2 r  ~. f2 J
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     # |; ]8 V5 h- P4 j* o
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    " o+ Q: Y( `2 J
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    * ^9 K& i2 B4 w# d0 ]/ Y8 w4 [; C* [
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ' U& R/ `# s$ ?9 N0 O3 p
  102.         NVIC_Init(&NVIC_InitStructure);& I7 g, C- m' t
  103.         2 C( z, j" t$ B( p' ~2 V; M
  104.         //接收中断
    - V# K8 c/ y6 H" g) ?6 a8 }
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);8 o' G* U& O3 P+ J7 N5 N
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    7 ~. O0 Z+ k- u$ ]3 H
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;7 z4 i7 n% |( _7 u8 E& E. X. c
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    . P6 ?; \: Y/ R+ U4 o
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ) `. g3 _- ~5 B- h
  110.         NVIC_Init(&NVIC_InitStructure);
    : E6 A" q4 F' P5 M
  111.         SPI_TIModeCmd(SPI2,ENABLE);4 i  E; a* A, l9 Q
  112.         SPI_Cmd(SPI2, ENABLE);' _  p# u# m" C) V! v% W3 b% R. R
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    . b1 ^7 s* Q$ f! O$ r8 C' `
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    : V+ X8 c; M# n+ f# |, j* Y1 `

  115. 3 I' z9 c: l( t. q, }+ u
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    # U( J3 i/ K: [/ {0 h; A
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    6 ?  r( W& C$ f
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    & g0 ?! h/ [$ A$ D* W( O
  119. 8 C! z8 {! R5 ~1 B2 S2 e% Q: b
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    ) W" F, e* U5 Q9 L# g( V+ z! x
  121.         {
    ! r- j6 D* n. W% Y3 w8 V: C, _$ r
  122.           if(ii%8==0)
    0 W9 x, a0 i# p9 T2 B" C7 y: Y
  123.                 {
    4 U. O- D9 x" o/ T/ d" f( \
  124.                                 printf("\r\n");
    # J- F' u- w! @
  125.                 }
      E" j, y/ ?; D( k) h( d* `5 L
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);7 \8 `" S0 L6 M+ B2 R
  127.         }
    3 x/ L, M4 x& r
  128.         printf("111\r\n");" c; c* l* ?: i9 x( O
  129. }
    ( d* r8 S% ?% g7 ^7 `" e% I
  130. ) W1 x% f, {9 P2 X) p0 }# p+ m
  131. " Y  H. t6 `, s9 L# ^
  132. void DMA1_Stream4_IRQHandler(void)1 h$ M9 k4 H; p  X
  133. {1 B" R/ H* I7 W
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)6 B$ r, j1 r& w/ Q+ `( ~  j6 S2 g0 L
  135.   {8 L4 c7 o2 q% \6 C8 l5 q; ^# y
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));* n/ T6 @* B3 u" P
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    6 C; t* p, a  s. V. E
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    2 q1 J9 X/ Y  [3 G3 i( |5 [
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);% [2 u8 J6 w7 N# w4 u
  140.   }' m; n; ^' @9 y9 [
  141. }: K4 d+ I; y; n

  142. 7 c1 ?# k9 Z8 w! c
  143. void DMA1_Stream3_IRQHandler(void): k# `6 c+ U' A  O$ ^( ^+ L6 y
  144. {
    & D; }7 s% ^- F" S# k: Z
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)- N) Y9 T4 p% c" j/ Z$ u
  146.   {
      z5 F3 w! b9 t
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));1 \0 }, }- P% M+ r
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    & `( T5 B# Y8 o- C
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);  O3 |- K7 \# k! H
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
    8 g* ~, T4 U" z5 X
  151.   }
    7 _. n, S, Q; G
  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的波特率是不是必须为相同的,才能正确通信9 x. S. e. V* p- X  a( _
以下是全部代码:
0 ^; k, p- Y1 G7 u#include&quot;stm32F4xx.h&quot;0 ?" t4 r7 e- ]* Q- S% O
void RCC_Configuration(void);
3 W7 s" m# s  Xvoid GPIO_Configuration(void);
1 D- l& J6 R; G2 K2 g* ]void SPI_Configuration(void);
1 R2 `" j# A- o. V) ?$ X; q6 `void Delay(int nCount);* u, g/ i$ E0 k; M0 F9 w
int main(void); `) {: y! y) ~, \
{  RCC_Configuration();
. g0 G6 O4 E" I/ l  GPIO_Configuration();
% {. r- S6 U9 l8 w; A  c  SPI_Configuration();$ [; l' N+ z; K8 `: {5 I+ c
 while(1)# H( B7 A9 ^9 _: K' u# A3 _- Z
 { int data=0;5 ?+ ?( V. E0 p8 E# z
  SPI_SendData(SPI1,0x55);6 Z' g) c% Q' Q. n* ~
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
! I) e8 N- m& ]) U9 s  data=SPI_ReceiveData(SPI2);3 s3 Q; g' z2 v9 B2 \8 M2 @8 t
  if(data==0x55)6 v: [) a* k. o+ t! V7 F8 [
     {  while(1)
, R- S, Y, @+ C2 R# N0 Q             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
( {! z& A" u+ B8 H7 @                Delay(0xfffff);
' `& _7 u# @2 k; ?' O                GPIO_ResetBits(GPIOA,GPIO_Pin_4);, E( a. s9 V2 }) v! x
                Delay(0xfffff);  `$ l* w7 C+ [+ O8 m6 r
   ' @7 n# I4 Q7 H# S0 o
             };
6 `2 s# Q5 r7 m/ U     }
5 a6 w4 {9 b% V7 Z; M% D     else while(1)
6 ~9 g0 U( E' O5 ~            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);& t% L* v0 Z/ E: R; A
               //Delay(0xfffff);- t5 C9 K3 L: q$ _9 v9 o
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);; F. `* |" ?) E! f7 u) f( @9 P! g
               //Delay(0xfffff);
7 u, ^2 t1 i2 [. s* Z4 {6 k   " z2 x* }6 ~( t4 d0 b
            };
. C3 m) P1 S3 i8 H2 \ }# A7 i7 X8 [, F
}. v+ j1 O8 }3 F+ e. L: G
void RCC_Configuration()" p1 s2 Z' O) v' O, V- J
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  ^3 K0 z! r  h; S. D2 [
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
9 S5 p$ R; w2 Y1 T: H$ e8 I  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
2 d* y9 E& a, l) F}' a7 L- ^/ A# X  b
void GPIO_Configuration()9 w) n; I5 \9 a# t
{  GPIO_InitTypeDef GPIO_InitStructure;, e& ?5 z8 z6 k3 K1 ~& [0 [$ d
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
: Q% b: ]% Y2 i  s( x  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
/ U( U, _( C* L8 Q- M$ _  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;6 z) k# w3 v$ p' q4 V( i: H
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;6 u0 f/ C" t) M6 Z! V6 \
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;; R* [# Z, j2 @3 x$ l: ?
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);+ m* d: r! b9 c* S- @" C* m' t
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;2 S6 C  ]/ \- p5 _+ X0 h$ k
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;8 a" \5 t$ b9 p6 t: S
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;" Z# T  v' {% c2 \/ M, v; f2 \
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
( J9 a. s9 L+ u4 t9 Q. ?  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
5 ~% w( X- P/ u5 {+ M2 D  E5 u2 B  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
5 {( e2 Y7 z& [; E0 b2 P  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;/ C0 \) E: U. O9 r
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
3 Y, l& O/ w: r  U}
5 t0 A& H/ @# S" wvoid SPI_Configuration()
8 n) z/ K( n5 E# r) ^2 U7 U$ d{  SPI_InitTypeDef SPI_InitStructure;* y& h" W8 |3 `" f# e( ^
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
+ E7 d# \1 o1 Q2 h  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);/ _, i) k: l1 y
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
& `. h9 d! i" K. j   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);: @5 h# }# }- d3 T/ d9 M
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);" E8 q* V7 r' ~
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
8 s" H' G( r* W1 ^4 c# v  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;1 r) J# i; A& J3 J* K
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
( I# ?6 w+ {% y  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
; l- [8 v/ \% j8 s2 k( {: }  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;7 G6 n0 V/ h6 {8 O9 c' }
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
$ ?$ T( p. D+ c) [1 }; I  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  G- j/ Y& S: I   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;/ o/ p7 n5 I2 e( y! ~& ?; R$ s$ g
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
1 m9 C% i' @5 ]) \3 Y) l! D1 R  SPI_Init(SPI1, &amp;SPI_InitStructure);. t9 O5 ^2 |" G4 o2 n5 n- T
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;$ Z' T. ?, G7 d& ~6 Y5 _- m
   SPI_Init(SPI2, &amp;SPI_InitStructure);
5 T0 |! w$ \! P; f   SPI_Cmd(SPI1,ENABLE);
1 z: t: n1 y0 M. }   SPI_Cmd(SPI2,ENABLE); 2 s- j! j2 t* H' A+ \- ?8 ^
}7 ~: ~* O; B7 X2 ^1 v
void Delay(int nCount)  ^+ p1 b8 c4 F3 s) y
{ int c1=nCount;5 {% O) w4 g' K. [
 int c2=nCount;5 L! g) O. s5 l+ @+ b; l  ?
 for(;c1&gt;0;c1--)4 g/ O! B; O6 U' b* a* S
  {$ m* P2 P/ s0 l  S  _) A
  for(;c2&gt;0;c2--);- Q+ W+ ?+ X6 E1 `
 };
1 O/ }8 Q# s3 Z( o}
) q8 r( V7 Y/ `+ O; P; ^& m4 ?1 l8 \# I4 d先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
. E) Z& c+ e* o/ E& }5 Y) [; F楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信. M3 I" m- u# I5 N
以下是全部代码:  M1 H! z  z3 J6 |0 P
#include&quot;stm32F4xx.h&quot;
, i( n+ V* T) [2 a$ t( ^) C9 O* F/ wvoid RCC_Configuration(void);% M8 z' P; }5 x# `) y. u7 h
void GPIO_Configuration(void);
) L# H+ B/ S4 fvoid SPI_Configuration(void);) q1 s2 U; g5 @6 ?/ l" f' G3 `
void Delay(int nCount);5 Z3 a- U7 T6 H/ t
int main(void)* _% {% v) p( r, x; Q
{  RCC_Configuration();
6 V* C; x; Y$ `7 n- J, J$ l  GPIO_Configuration();2 W* O* ]6 E$ c5 f; b; w. {
  SPI_Configuration();# q: ]( W7 M& n0 A8 f2 B
 while(1)
1 @1 j! [# E; p/ l$ r) X { int data=0;" {1 C& y% u+ t, j, ?
  SPI_SendData(SPI1,0x55);( @4 M3 Z; R9 n. Y+ J% I; d+ L6 d
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
4 V. _' U5 k" x0 ~% y  data=SPI_ReceiveData(SPI2);
) K$ ~3 ]% ^+ S+ J' C  if(data==0x55)* g! q! t1 ]* p* N. C' k: g
     {  while(1)
# k7 y! |. W2 y* W; V( c& h2 `             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
2 `; O  V: V8 q# g6 t                Delay(0xfffff);
0 \6 P" ^$ r' ]0 T                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
9 A* I: _" e- \, V0 X" M# ?! ~                Delay(0xfffff);7 d' f; O3 n. ?+ ?, i
   ; t, [# {3 l* y- W, W$ P' o
             };
; w+ m+ u& f  E     }
* y4 K' G$ A+ S, m* H; o* e     else while(1)
5 o% l9 M  w( G1 Z) I# H            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);; s; f  u" i5 n1 ]; Y
               //Delay(0xfffff);
  L4 U! E% j$ J" V9 L               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);! j3 d9 F7 I0 A3 }$ g$ d
               //Delay(0xfffff);
; h4 V+ m# F- E$ I% c1 r2 S  
: X7 T: z% W+ k& [5 s            };% L% O4 ]2 C% g
 }# j+ B# W! _: z( W9 j9 V. M" y
}
; m8 u- s( a& {) D" W5 Wvoid RCC_Configuration()
* d/ V7 p: k- {# w+ Z- _- s: \{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
* h7 p5 @' Y4 B7 H2 x8 M  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
/ p/ A8 P% b$ a, W  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   % k% ?( s+ B6 v- {
}
* S) a% H; N  h7 A: O  Kvoid GPIO_Configuration()
  M& Z! e6 B2 r+ U{  GPIO_InitTypeDef GPIO_InitStructure;0 s; y- o8 \: y, L7 E* \  a
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;4 _& J3 q" O; ]9 y6 n
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;. z! l0 W9 W. B9 O
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
' i: q/ j; }7 ^  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
( F4 u; Z7 C5 R: S: m  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
# }0 F: C9 r! H9 i, Z6 W  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
+ D: |; i' f! I( ?" r9 O1 I; k6 H  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;/ t. W* Q; I% p1 R5 v" u- h. n$ z
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;) ^" c, P" r. M
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
0 N2 V1 w' g5 [( }. M  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;! O" v. m5 r% |) l" l8 y
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;& h$ H( \# J6 j7 H
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);+ _' t  `1 E2 V( t$ p/ q: |* h7 v
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;: r+ G3 g0 ?4 a" @5 S
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
% r5 x' i; u, D" _}
6 H5 F2 ?* b$ K, mvoid SPI_Configuration()
+ `" t& \6 {9 f: D: h/ |$ |6 n9 S{  SPI_InitTypeDef SPI_InitStructure;+ z! w0 W3 v- H6 E3 m% I
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
* O! P2 _. y0 H; w% P5 K) c  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);* D' G) K& y7 u
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);; |# x$ x+ {5 s: A
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);$ X- ~' r. L% ?1 P1 x( l; W
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);$ Z  E/ e# ^  [+ y5 V
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);0 _. |* S$ t7 g0 p0 y( }5 `
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;3 h. {- ~+ p4 e: q# q0 M4 N
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;6 X4 o: J- y' u) N. o. ^2 f
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
5 A! ^9 i: l, ~! n$ P1 Z5 W1 Z  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
! u' R. {4 \: D- m' Y  ]$ |  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;1 r0 N' n0 x; Y  I
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;# V; K9 [7 J' z, K- p
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
- R8 Z: `, t( H3 Z; e$ d   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
3 c7 H$ E) p4 P; ]4 [5 g  SPI_Init(SPI1, &amp;SPI_InitStructure);
$ U( y3 v5 A: L: U" J  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
2 t5 M: ^2 u% i   SPI_Init(SPI2, &amp;SPI_InitStructure);9 Y+ u3 H5 i* \$ l1 A- _2 e
   SPI_Cmd(SPI1,ENABLE);& D* k+ C! E" U0 X
   SPI_Cmd(SPI2,ENABLE); ; Q" x9 b2 l4 [. A
}; i4 I# c: t- `. Z4 r6 V/ ]! F4 |
void Delay(int nCount)4 e  C: N2 `* d: e6 E% b9 ]3 S6 N
{ int c1=nCount;
3 e# s( d9 p) g) i+ t5 t8 D# D+ K int c2=nCount;
! V0 K5 Y$ U9 D: J! _ for(;c1&gt;0;c1--)* }2 H& y$ V: s" y, R: F
  {, L  G" }$ ^  ]/ ~2 N( l- K
  for(;c2&gt;0;c2--);0 Q' {2 }* r2 P
 };
" X% Q# }! C6 E0 z' k3 s}/ {# Q! C% p5 k2 J7 l9 ~( h8 b3 H
先谢谢了~~
, ^; p! b: ~. F4 `; Z* B: _ 
0 g, N: P/ _& y/ C- u+ x7 i
! i4 C' s$ }" c楼上的问题,看我帖子给出的提示哦~
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发表:; {# Z/ ]/ B5 a/ s
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。6 ~+ [3 K5 N% D
 & }* |) _1 M/ n' c0 V

, i& m3 u& I  H- ^多谢支持!!
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 运算效率不高

  
, w% Z; @) H0 G' `" e4 N5 n% v3 p鬼魅一样的Hard Fault$ t/ c" q) Q5 O- _
 , F  e) ^+ o5 H
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
7 {: ]6 X8 v$ H) w 
5 m$ b9 k7 c% R3 N7 P( b2 h2 l5 s咋解决?
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 手机版