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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表2 G; v! x5 g* g1 c% Y# B

% K, H% R: ~% ^7 o7 w
8 n) x; J/ F" ?社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验后,可直接下载文档以及程序。也欢迎大家回帖交流。! o6 O$ l) {, L% H  ~8 X6 d, z7 J4 G! Y

/ K7 A# t; J( _: D! ^2 E提示:点击各主题,进入帖子,可下载ST工程师解答详请
7 w# v) s; i* S! x 7 e2 t1 D) \+ E# [
. x: o4 _1 ?  c. p& ^& v8 {
一、通信接口9 Y; f4 e8 F/ C

% A4 d. o+ x; \* x" b9 P1. STM32F2x7_Ethernet(FreeRTOS)驱动更新; B' X. ]2 Q/ O" w' f
. }$ @0 a' e6 s% ]
2. SPI 接口发片选信号导致死机
' h. x" f) @; z2 _1 E6 j! F" u 5 z0 m# l0 V) i$ p
3. USART1不能设定600BPS的波特率" b  @4 ^4 P+ j7 Q, L5 N+ f% c
+ G# t! g* U9 K4 V3 A7 \( Z
4. I2C 接口进入 Busy 状态不能退出; A6 b3 U! w+ V2 [" T
+ v  N1 Y% n* D) k: y
5. 对 Flash操作导致 USARTU接收丢数据0 l! ~' i# q- G0 K% {8 ^5 C

$ B7 L+ k/ E; P% W5 c7 C6. USB接口易损坏% a; _# t" f. O$ R3 v1 \
  c* H7 N' ~) A, X
7. UART发送数据丢失最后一个字节
' v3 M; {) a/ O4 L; D% r & H* D& R) K$ H' }3 [5 }1 s* l
8. 使用 CCM 导致以太网通信失败
* l1 c3 E6 a6 q; T  V( ? 9 W3 e0 Q  n( h; C
9. SPI3 接口没有信号送出3 L6 B- ~5 A' w. D% l

/ z1 z5 g6 d+ D1 f% Y1 `10. 时钟延展导致 I2C 通信不可靠
6 `  R" [6 H- T* b1 D # @- c* e; d3 c+ k, k
11. M0的USART波特率自动识别问题
0 \$ ^; ^+ k& `4 B. i6 n
" Z& h. K$ I5 P1 O/ W4 b2 |) V12. WK15 OTG做U盘主机兼容性提高
( z+ M$ M5 X- p 4 g1 p! X1 u/ E
13. 以太网电路设计注意事项
5 Z1 R; A8 m/ s. W- L) z7 r
" V: O1 P4 {- v/ X/ ~6 P14. OUG主机库在BULK传输上对NAK的处理0 v! b. k3 n- ]2 q8 ?/ S+ x0 G5 z
6 b+ H1 @. d) r8 L7 i7 H- l7 d
15. 串口断帧检测8 b+ }+ G8 ]- h# E
) T9 k' a! a, v6 r2 M* q
16. VCP例程用于数据传输时丢失数据的处理7 k; A/ ^% X0 N
5 N8 `) T0 o5 t$ h
17. STM8L051F3P6串口UART数据起始位判断的问题7 t* o4 l4 t7 R7 R

- L: S8 K7 Z) U2 A( [( l' n9 y18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号4 e% w: B8 x6 y
: X& u% m6 C6 g# x! X7 K+ E
19. STM8中UART奇偶校验的使用方法
8 k. Z$ }4 N. s+ Q0 S" Q' r! F 1 t# Y7 R  J3 o: V) P0 W( n
20. STM32以太网硬件设计——PHY
* [. j( [& y2 l) i' _5 V+ f4 T
$ J( Z# m# b4 l9 n) F0 c5 T21. 一个判断I2C总线通信异常原因的方法* y- z) ^2 V9 f- l
& k  ~& B; z5 @+ a
22. USB device库使用说明- X) H4 {! z9 r4 n% d

# ?' N* Y+ }& Y23. STM32F103上USB的端点资源
# p  T' E% U4 {2 Z: p7 V
) T- b# i. x4 B& T) f+ i24. 使用CubeMX生成TCPEchoServer程序
% e6 E' D( f# K4 x( Q0 I& U. d4 [. F4 }/ D% g' b# U/ C; g
25. SPI接收数据移位
# i; q  `' v  M $ ]9 Q4 a/ Y! K# `; v
26. STM32F0中Guard Time的设置
# O' u- T/ g. ^) F
! C# \7 f/ v0 }3 c0 m27. LwIP内存配置
$ R' u4 R, V& t+ _) d9 X, M7 b
) N5 O5 N* m2 M+ u) W28. STM32 USB Device的简易验证方法0 M. ~/ A' p7 I# W! `- ~- U

8 V9 z. X0 @9 s' V5 G; \29. USART 中断方式接收无响应问题的一种情况及其处理方法
; J( B2 t5 o- p9 g7 f3 x$ G/ v& o9 u" @. m  A3 T+ Q+ M
30. STM32 基于 Nucleo板 CAN总线的建立* t/ g) K! r5 J* D  t& K

/ M) [" y8 |' G" x7 T' H31. STM8 CAN总线的IdMask模式的讲解
: I' l, q! h. x: x; s
) `# E, o) C1 p  U; _32. STM32F746ZG USB 驱动不正常 # G1 `9 T9 y- Q1 {$ U! {

: \6 Q; S4 S& s# j33. MCU在STOP状态下通过UART唤醒分析
0 l' Y/ `& m: p: r
" ?9 ^7 B8 z7 T8 ]34. 通过STM32CubeMX生成HID双向通讯工程 8 x& X& p$ `' \
3 O, ]7 E; a. K& i2 `
35. 串口工作在DMA模式下有时接收异常 ( ~7 L" L# k3 _! `# N+ s. X8 u
+ H  S  @. @- t3 @2 j& [8 ?
36. STM32 Bootloader中 DFU使用限制; G& h. J* O( j6 a; i8 c! t; L
$ `; _' E2 ?$ j4 K" o
37. UART异常错误分析- V# a( j. {6 r6 {, y

3 H8 R9 p( g. M: y; T38. 基于Cube库无法检测CAN2的接收中断
  Y2 j- L, O" ~% \. m4 K3 Y( i5 J  N  ?! Y( Z% V. c
39. 基于STM32F7的网络时间同步客户端实现
" m4 U* g, `1 J/ E4 t7 P0 c! w1 {
9 D) g$ ?. z, |40. HID与音频冲突问题 ( s7 r: H  k. I/ L& v8 \: \( q

7 H# N1 v& X. A& H# J- x7 Z! l4 G8 P41. 在进行USB CDC类开发时,无法发送64整数倍的数据
  o4 s+ A9 A9 u( k. V9 V' X& `: k4 F; m/ U
42. 从零开始使用CubeMX创建以太网工程4 V0 v& d  [- T/ a

0 i- K6 f8 d" G43. STM32F4xxx的I2C总线挂起异常处理
+ I% X  [  x, k0 \* f: J: I3 q
, c2 r0 I' x7 q3 ^* p$ i; f3 s- [44. LPUART唤醒STOP MODE下的MCU
0 J; C/ N7 `9 B. w8 n) D
2 X. V$ J$ Z7 z  L/ P2 B45. STM32系列 MCU模拟双盘符 U盘的应用, y4 o6 I0 c: \+ u' ~' j

4 ^) K% s/ Q& q- e+ b; z1 [46. CEC输出的数据和数据长度始终不匹配: r+ c+ X+ p  R2 W& c$ D! T3 v6 j

1 S7 K* b7 V( G3 @47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析% i. }1 g, Y3 ]
0 ?- F0 O& v, T9 N. I" g
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
+ `5 b- x. T% i- r! }( P- T
3 F8 D( N2 L+ v7 L( h2 ^49. 增加UART接口应用时的异常分析: q+ s! {* w; O; I& A. F
/ ^  j+ V; c9 ^$ w# Z) v
50.UART应用异常案例分析) v: T( I3 X* P& ]
% X1 o1 V8 R. r! w7 b; k! V
51. I2C配置顺序引发的异常案例  d7 ]/ z8 k- Y! b3 R( y

& |0 N; }3 O4 J9 J3 F% o; ?7 N: ^3 d& ]52. STM32 USBD VBUS GPIO3 k) F+ a. M& P% p3 O

7 B& j# i0 n8 {$ O* C53. USB传输数据时出现卡顿现象* @3 x! B: A2 K2 v$ ~& Y

) y0 x; w9 A5 ?# {3 w9 o54. STM32的高速USB信号质量测试实现' o4 h$ \  H' J% u' J( X. D
* S& [6 |" i4 K
55. 基于STM32 I2S的音频应用开发介绍2 U4 [. p3 m' N  O
# y9 ?/ r8 J/ T3 E1 r
56. HID_CDC复合设备在WIN10的识别问题  
7 |0 V" @& ~! Z, N/ J! C' y" f. r& G, H* ?( M2 I( m
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  2 A# c3 K0 T4 q; x) R  |+ T+ z, [
; P6 j! ]' K* ^! X
58. 一个关于LPUART输出异常的问题分享  
# _  V. I0 d3 G$ j3 S8 m
% E! N* G6 V& H1 w& [: p) w
59.通过 DfuSe 工具控制程序跳进 DFU 模式
% `: H; s: M% J  Q+ g- ?  o: h

6 L/ F$ r" m( ]& `60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
( ]5 d4 x9 J% P8 r) q% L
- p  ^+ e& |9 r- {  X, E1 S
61.一个因初始化顺序而导致异常的话题 (2019.12.24)5 @. T3 ?( @4 `# j2 e6 N0 |

, _& |) T8 u6 W& y62.MC SDK 5.x 中增加位置环 (2020.5.29)) ~$ w/ \  Q! T1 Y  R
4 d$ J" l" n/ ~; ~6 q
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)# m2 _8 h  f4 K5 j% v( c8 @0 m

4 X5 j8 l! @5 ]- \8 x: P2 x& |64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)3 p! a. c& F" u+ l, W/ d

+ V; _4 I. p3 \8 S二、电源与复位
2 `2 Z0 W& n" d: I- q5 g( J# U
3 W/ F& T0 |. ]$ `1. Vbat管脚上的怪现象* M* \/ K: p, o- a. k! n5 ^
4 X7 n  M) U, l7 [$ K# v: ~' \
2. 上电缓慢导致复位不良( M: R4 l% G1 ]' c/ T- g% B

6 j4 Z6 _+ T  @. |5 j7 u" v1 x3. 关闭电源还在运行* }, P+ F+ r) @4 Z

* i* |4 h- K; T, S4. 使用STM32 实现锂电充电器( j. O3 |1 {% A

& M7 P8 q9 o7 T$ A! I& P4 h/ B5. STM8L152 IDD电流测量
0 j5 q6 d0 o  l% y+ W 0 C% L% a+ N% z$ a( V
6. STM8连续复位问题
2 `, ^- n- [3 D& T! d1 ^0 I 2 ^3 J5 s  k. p+ {9 s
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用( \: x5 m' _0 S2 [1 g1 d+ r( B6 K

7 [* Q. \# P" Q  N% C8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
, d" e- u3 n: k8 d" Z# l" V4 N8 K
9. STM32F7与STM32F4的复位序列比较  V( \! B: y6 _# ]
; b1 g$ p# _+ q# R6 ^
10. STM32F107 复位标志问题 / ?6 j% [" Y' m) U- W: z" T7 C
: \' m0 ^; s0 J* u4 m
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  ' I% {  |0 p; @* Z5 B

0 V# \0 f$ |4 i% v$ P& ~2 v4 j' s. f 12. Nucleo_L053不上电也能运行
$ t8 r7 l# `& n- p- k7 C) Z, g# L$ S6 K' |
$ [  J. N7 d1 r- v& V13. STM32L4中STOP2模式下的漏电流
3 x1 A1 b' T& x2 c
# p9 [8 g/ g3 w" a6 \14. 在没有外置晶振时HSE_RDY异常置位9 ^9 B( z5 Q1 }" u/ j4 B, {

& v( u2 w/ \8 I2 \# N. d# y+ W  S15. FLASH被异常改写   (2018.5更新)
) e/ U2 ]' V0 l- K$ U
2 g- ?* u0 k, q+ d16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)
* U& m: F4 |: Z) \- z) r
6 {8 t9 P3 q1 K& R7 o17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
- A7 j" K7 j7 X' o7 U8 o) ]8 f& y5 [- p5 Y" p+ k
三、IAP和Bootloader2 C3 l# l$ D) e0 D6 D! O/ H

2 ]' D' j  A7 e3 ~; ]1. Boot Loader与上位机通信不稳定
0 C8 s) I* c* m 7 G9 r$ Q1 i" t- o* [
2. IAP+APP 模式下不能启动 RTOS
  ^) R+ x$ M" m2 E' D1 b4 B  y8 D
6 Q# {, {4 |0 _6 ?. @! E  b3. 从 IAP Loader 向 App 跳转不可靠
+ o# y1 y8 `0 U' z5 e# D6 K" }; c
# m) I+ W6 C) K5 N# t4. STM32 MCU IAP例程跳转到APP代码简要分析
- C4 v8 P- D0 D' K, i2 m! }# ]5 r
+ U: e! S7 a& r% c5 {$ R7 _5. STM32F091从自举程序向应用程序跳转的问题与解决
- G( z/ H/ h5 P5 J
0 E# w; r+ O7 d2 y# _6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
* Q( O. L7 ?) D1 T. N; {; Z+ o3 Q4 W, N, j
7. STM32F0启动模式相关问题探讨, g: ?% t2 n& m+ y. Y3 \* v

8 x' r# Y  V" G& a; m8 R8.STM32F091空片使用System Bootloader下载代码
; w: `* J/ Y% a4 @4 A: B$ v7 a/ H, I2 |2 L" J: \9 J. r
9.STM8L  IAP 应用程序中编程指导0 l) q  i( _0 V
8 f7 ~6 C$ Z) ?6 i  \' O
10. 如何通过STM32的串口实现简易脱机编程器
0 M9 k5 ]/ r6 u& ]
  M3 D4 r; D# D3 D2 H11. 一种从用户代码调用系统存储器中Bootloader 的方法  
1 t$ B' I0 s5 X, p# D
( U+ g( t4 i" V7 A1 q. O12. 利用 USB DFU实现 IAP功能
' ^& [7 _6 C9 j9 U, w; U2 ?& ?9 l2 ~3 {" h
13. STM32 Bootloader中 DFU使用限制) e0 t. {) _3 H4 w) ~! F

5 t. m6 ]+ P0 j14. STM32L011x和STM32L021x启动模式注意事项
: C3 a: S6 d' y7 B5 Q: b4 K
, r) Q0 A5 A; e* B15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 & y' v) g  X: [8 Z1 l

- r2 |4 B8 W3 X# C+ B2 G16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级
( `8 e' z0 F! E' Y* S0 L- A) k& r& g
% @* Z4 A/ b6 e& p: C1 }+ c' s- ~17. 如何使用STM32NUCLEO 板来测试串口Bootloader
1 a' M# ^0 V! D7 \& D
: i$ Q. O7 ^3 H5 x  W5 U18. 在STM32L011上通过I2C接口实现IAP+ _. W4 K. @) t- K7 t6 R7 g. X1 w5 D
# j5 J1 Q( q. S  F8 J1 g
19. 在IAR中实现通过将程序在SRAM中调试的方法6 w+ x3 L+ F' v* F" Q1 G
5 h) `1 a* i, b& i5 U
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
0 D! G5 g: b+ U& b8 x% d1 a0 P# X8 \# _- c9 v7 p
21. USB DFU IAP 例程移植的两个话题
+ D2 x: @3 i8 A; L) ^2 }3 `$ U0 L7 W2 J4 s- ~% R2 P3 _( G) W
22. STM32F769双bank启动- J9 y, W; l5 P9 [7 @" y; @4 q
+ G9 s/ L# |$ d1 [
23. DFU加载 工具 DfuSeCommand的使用& v; R4 k$ V, {! L

7 z" S* f1 `1 z# a0 ]" o24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
! c3 ~4 i% K1 W- n" X* P1 m9 A! A$ i8 b; ]- s4 X; L9 w8 ~1 `! C
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)& u/ I  f; l! I4 K9 h$ ]! O7 j

/ S7 f! |  Q: t2 z- {* t8 \26.STM32 Bootloader异常复位案例(2019.4)
4 s4 s# A& e5 Z4 k0 b4 j, G) t9 ~; K
四、存储器# U) K; U$ Z' n# X4 B
+ O, |, `$ O. o2 b9 \7 F$ E/ E
1. 对 Flash操作导致 USARTU接收丢数据. ^4 }/ j) X+ a

4 W9 |7 S0 t8 ?0 t2. 使用外部 SRAM 导致死机9 M8 F1 n- J4 n

2 p1 s" b3 h! ]3. SRAM 中的数据丢失
3 H5 E) c1 |- w, D( s: a- ` / `. D, R0 J& B( ]
4. 干扰环境下 Flash 数据丢失
0 A/ a% i- u4 Y- K8 l9 C
, J- I% l/ c1 u7 |; M5. 使用 CCM 导致以太网通信失败
% R( |9 _+ n- P" J6 u 0 Q9 H% P( G: `
6. STM32F429使用外扩SDRAM运行程序的方法
8 E# ]7 P7 q# {8 E
7 Y& O- o7 `* W. q: W& x7. 使用STVP实现对STM32L1系列EEPROM预置数据
- k5 x7 g# K) t9 f% V+ M ; B" n' B6 n" E  A% f8 L  f: C7 a
8. FreeRTOS RAM使用情况及优化方法% E! \$ t  H  C
* f# k! y! K9 G6 l4 P+ c& l+ e; H1 x
9. 在IAR 6.5下如何将数据存放至flash中1 s9 K6 I1 S  q  K3 ~
) E2 t. q8 E0 _  a4 j
10. IAR下如何让程序在RAM中运行
8 ?* z* e$ I3 T9 |& b$ w
% u1 l3 S& P5 y) C5 n/ q, A/ ~, p11. RAM上电后初始值问题" ]" R5 ^9 D4 r5 x- x( o

+ \$ \. M: u0 d' z- Z12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
4 {/ q+ S) M" I
& \1 Y- C; n' {6 m+ v/ T( @13. LwIP内存配置" v5 \- W% f) f0 C6 U# G3 O) S

9 i  I. A7 K9 A. ]' [3 Q/ W14. STM32F2高低温死机问题$ V. D" C9 v) C3 _
! M% ^4 _9 k1 g/ [. T
15. 使用STM32F427的CCM RAM时遇到的问题8 l0 b3 A/ R" f+ ]8 d! E. i

$ T2 h" l+ g8 o$ r! V2 j16. 利用QuadSPI外扩串行NOR Flash的实现  
6 q! q8 M+ |4 ?7 g  d7 w& ~, ]7 B/ I/ r
) p' t) A; v  i7 @17. STM32擦除内部FLASH时间过长导致IWDG复位     
6 O* R, x1 P# x6 n
' J3 G1 ?3 ]4 W' e. b

4 d! }( L# z+ A) G( Y3 M: J! L18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
  x( n4 n1 ]) c5 i8 i0 h8 K/ v& Q* b; I
五、模拟外设% R8 r/ K- `/ ^2 @

% y# Y7 v% y7 t1. ADC对小信号的转换结果为零
) M6 E3 A; t% N + I  }. ]! G' J
2. ADC键盘读不准; X" s& J0 U1 R% }. I. T& z
# t! l9 Z; T  }# Z) @# C& @
3. 扫描模式下 ADC 发生通道间串扰! U) a% _5 Y. }9 M' S: @/ U9 p9 x# x
% |) a+ i: N8 b. m/ [/ j& z
4. DAC无法输出0V的问题分析解决+ F+ ?! k' X2 ^' v7 b
$ T  y. m! B7 m$ e& d, U3 O
5. DAC无法输出满量程电压的分析解决3 T- ~3 u/ ?# @  W4 g$ L
+ ]& n$ E6 {' I; _$ l8 s" U* V
6. STM32F30x 的ADC 采样的傅立叶变换, r  ]9 i# I9 Z

" d0 d% o0 C( u( \7. STM32 F1系列 DAC的示例详解+ K) I" e& p2 w; g9 f
4 z0 Q  Y( |$ S' g9 w" v
8. ADC 连续模式采样浮空引脚问题( X# ]( ], O5 A4 A7 [
. K; t  V; H" U& Z' v! B
9. PWM硬件间隔触发ADC 4 I% y% c1 Y, R

% M# @. D1 N9 j' @10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC8 T# V0 a1 R/ K1 G
. G+ q8 M+ `- S# @2 Q
11. STM32L4 系列中ADC 通道配置上的区别* @* [7 o% r: s. _2 G6 F

: j( n3 L) w# l7 y2 {7 C12. STM32 ADC模拟看门狗及其应用
1 K6 [# v  G; h; f7 N: N% z
+ D; U+ p/ D! Y! |. T4 L13. STM32L053 comp2 比较电压无效问题
& x/ T7 N8 A5 Z% r: M5 }2 v' V9 @& R  [* S% W6 a$ ]. n; D: N0 A. c
14. 运算放大器OPAMP在STM32L4上的应用
  H# W; Z/ \; B7 k6 M: Y7 A
$ A, N1 l$ [5 q% J: u2 x- d15. STM32 OTA例程之ESP8266使用 ; z+ {/ ?; {1 x
' K! t% ?0 @4 {! M; ?
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)3 ^% j# c! `: h' e, W6 p+ j2 m
! Z+ F- z' v2 H: d
六、计数外设
' r1 F7 r- c8 h
2 c: v6 D7 L3 e* Y1. Watch Dog 失效* o' k+ _" O/ e7 g; `

5 _/ ]8 H) c% S5 N: q: {+ W2. RTC计秒不均匀
( E: |4 C7 J' M* z4 Y; J
2 \' T, I. a4 n2 r1 d3. 软件启动模式导致 IWatchDog 失效
# x( S) Q; ]1 @% W* w 9 m  U& s' f9 _
4. STM32F030R8 定时器移植问题/ x+ f0 _, O  y  d6 B
& X5 d: r& ~, I& ^; {
5. STM32F0使用RTC Tamper的几个注意事项
7 {7 B9 _, R" W0 F. i. [' F3 A$ [9 O/ `- u
6. STM32L053可控PWM脉冲方法之DMA6 j  H3 Q$ k3 Z( o9 P

$ k4 X- X: R9 n6 P% u  R: S7. CounterMode,OCMode与OCPolarity关系
$ z1 f8 d: ?3 \/ Z- P* _
% n. p" h' g5 j! q1 S  P% u8. STM32L053可控PWM脉冲方法之DMA, O' X( m* u& R' e! c% P
/ N) `: w! w" o7 L
9. STM32F1通用定时器示例详解—TimeBase
* n$ p6 `# g+ j  ^% h7 A$ h2 l& e6 y8 L: f8 b
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals6 r1 Z& b0 f6 y; s

4 t8 ?6 O7 l6 A3 n1 }11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
% ]1 d* q' L5 I1 d4 }3 ?( Y: C, l$ B+ M  X5 M4 v7 V) ?% w
12. HRTIMER的多种Fault事件联动机制
" k6 t0 ?# j: V) G, h ! n* P7 c! V. P7 s5 N
13. STM32通用定时器 示例详解 —One Pulse- r3 R9 M% B, Q6 a# u- P
: q  t6 B1 j7 ?$ j
14. 如何用LSE校准STM32F4内部RC振荡器( T7 |" i$ O* z; @- F7 T. M

# Y* F$ Y, U  {4 ^0 ]15. 一种使用Timer测试HSI实际值的方法. B+ C/ q: R/ \1 q
" \% t! E6 L! G2 k7 C& \
16. FreeRTOS定时器精度研究
" R; a1 F2 d# [9 {6 H7 j, f% Z' A& B: D' C3 k4 h/ ~0 L7 T6 {$ q) Y% p* d
17. HRTIMER产生多相相移信号2 z! o+ K: `6 L0 e# ]( w" ^, m7 F1 a% ]

. w/ N0 c; q5 f) _  t18. 窗口看门狗启动时异常复位问题
, |- K! m: K1 Y! s  Z- _
0 m2 d8 S! ?* ^) @1 F0 x19. PWM硬件间隔触发ADC% |( U! N: O0 A* S& `

+ Y8 O' O4 z5 Q20. STM32F030低温下RTC不工作
2 i! B8 Q$ J8 J+ M) I  a& W1 h9 V) l. m# x9 w9 [( p
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用     H/ Q  a4 c; m. q* X9 J

: c9 D8 N/ e& l- N$ N% h9 |* M9 ^, {5 N" \22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)6 e6 e4 h" v. x2 q, T) B

1 N. B) L8 `9 g. I6 H7 U4 {' [4 q23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
# A& \* t3 h* e( r+ s. Q6 \
9 l& Y9 d% x  j- s24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
' o& \2 U1 }  |6 t% O
# V0 O5 y3 S4 n# S
25.MC SDK 5.x 中增加位置环 (2020.3.31)$ M! y! q" a& T8 ~8 |; ]2 P

/ T8 k& e5 e- A2 l' ?+ e, U- E2 ]2 \26.STM32高精度定时器PWM输出话题 (2020.4.29)4 g9 w2 I8 w4 X0 z) o* [( T
0 o2 X; i6 P0 ~. f! }1 f5 z4 k# R

% `" f4 J  M+ r2 F; j- s: s, @27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)
2 P5 {  N) i( k0 o

8 v0 A7 Q. G9 e. g七、内核
0 p" R  W- [" O + {) ]- j2 n0 Q( z6 s  P8 @
1. 使用指针函数产生Hard Faul
' ?. t2 w0 i4 \8 x- f" J! P- | 9 x1 r4 z1 R  b) ~! k
2. 调试器不能通过JTAG连接器件% Q0 g0 x1 J/ R; h$ W( N

4 Z2 x" N0 M$ g3. 鬼魅一样的Hard Fault! u# @- R( y4 s

- p& y2 _5 c: |7 y5 C# i9 U8 J4. 进入了已屏蔽的中断[
* F% ^: @' u& d
1 z  x8 {5 \. t: p$ n5. 浮点 DSP 运算效率不高
! e# p% N, C) R: w: X- @% t% f, r# J
6. STM32上RTOS的中断管理
$ v7 @2 y4 v4 P3 {' ^! Q- g: g# C: J1 A; G
7. STM32F7与STM32F4的复位序列比较
  z8 l. h5 H! M9 N7 I9 v1 I6 u# ~1 a+ D3 |) ]/ h. J+ P
8. STM32F30x 的ADC 采样的傅立叶变换# y- t$ _% c6 p1 `( f0 w# ~

1 M0 ]7 T9 y; i  d9. EXTI重复配置两次导致误触发中断的问题
6 q! B' m, R/ M8 C; ?  G6 e# X6 W& T/ j" f$ T8 m
10. STM32F3xx/STM32F4xx使用浮点开方指令' t9 c7 [0 ]2 ]( Z$ {! W2 h
+ G& ^" Z0 Z6 E
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响  `. j8 {7 i% u1 |- X9 O

- \2 @" [% l' L2 Z4 c6 E2 l 12. STM32F7 MPU Cache浅析  
; o8 }- R5 w# j/ r2 g5 R* \' U6 b* a2 {! B+ L9 Z
13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)2 v+ I9 c4 x" }3 k
, K7 }1 F8 P5 {: F+ b
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
8 Q! F8 e. T- x! A! w& h- \9 y  Y
8 [* |3 n/ r) L# r- Q

# \- i& H5 _/ y  F8 H9 W$ N八、系统外设' I* S0 \2 t' |; e" p
( o( A0 ]/ G; v& j: g6 X( q' z
1. PCB 漏电引起 LSE 停振2 z* r8 Q- a- r: e8 x

3 d% [4 M/ N+ d6 k2. 时钟失效后CPU还会正常运行9 e# h# T5 v: F% `2 H5 B1 I
' `, _8 H4 y: E: h6 S
3. STM32F2中DMA的FIFO模式
& r' S3 D6 z" R1 s& F. X
# F* O# j! |$ i4. STM32L053的GPIO翻转速度的测试7 U' H. r( N7 Z
) ~9 y1 |  s% l" I  s9 h* Z! |; Z
5. STM32F4xx PCROP应用
, t8 z3 Z) r$ ~% D# x8 y; J4 M- Q4 E+ C/ {3 ~1 q
6. STM32L053的GPIO翻转速度的测试
7 L$ m) N9 h  _. j/ B8 o8 a( l" k$ r* A: A* U$ r! a  }9 V
7. 如何在IAR中配置CRC参数  e/ }, {; G+ y
' h# \0 L2 k4 _
8. PCROP区域函数无法被调用的问题与解决; S, [0 Y3 D3 @, r  @2 n
! |- B/ _8 N+ \1 R/ }1 q7 D, c4 T8 j( I
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题# l" D2 c/ P+ G

- p8 }4 `/ W$ X. d! O10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
# n5 h$ b' l; G* {* \  {( x% S0 u8 w3 Q) l* L+ `0 `
11. 如何用LSE校准STM32F4内部RC振荡器7 H# p& A% `- v: f& L

# U4 Z4 q2 k  I" t2 ?9 U12. EXTI重复配置两次导致误触发中断的问题  
+ l9 [9 I1 v4 y6 d$ Q$ b7 [3 G/ d' T8 [
13. 时钟安全系统的应用(LES篇)  / K# O2 Z" _5 D
3 N* _. ?4 {+ k- M/ ~
14. 利用DFSDM开发PDM麦克风应用介绍  7 v/ W2 I: R: W1 \. e6 v

, ?1 [! v: u2 T& E15. STM32H7的FMC外设在DCACHE使能时运行不正常 2 ^+ I- w4 d- g! ~+ @3 i0 u% B
! P! F6 u2 O% A0 k% v6 o3 t
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)$ p+ f% H8 w( m' t
7 s1 I/ J9 F7 G" }* i6 U

( B! g9 y7 X5 Y九、标签和收发器4 U+ q+ q. U& h7 n
3 a& ~& e6 C( x- s5 {0 q
1. CR95HF的初始化步骤+ [& s( b0 d" U# x' i; s% N
( }5 }* l3 }8 @9 a. D! M/ P+ `( J

2 M( l  h7 c+ B2 K/ r1 v4 b: H( n" E1 |
; K) u# i3 @3 P* j# V5 k  ^十、生态系统
: |" U( }5 [& r! w6 i4 ^' D+ @ * _+ t8 T3 O7 ]7 M: V0 G2 @
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题" m% R6 A2 w8 x4 [& E5 E

; n8 D, D+ G% X" B2 w: e4 u2 I2. MDK Logic Analyzer 功能在STM32中的实现问题1 I& n) i" _& S( [0 A
( n! D# J1 i  y+ Q3 T  B
3. 在IAR6.5下如何将数据存放至flast中1 F4 ?* H! v' T) t

" b2 y7 o9 m& {! x) m% N4. FatSL移植笔记3 o. H$ n# S' z& y( C8 s2 ~, b& s

+ Q. h* j2 s7 W4 {% P; h* o5. Keil中使用STM32F4xx硬件浮点单元
5 L# ^- R. U5 n, F# V) f
( z7 s8 q' `4 w- r% S6. 如何生成库文件(MDK和IAR)
8 ?1 g) q5 F5 E
, V, l& Z4 r, t+ \+ K7. Nand Flash文件系统解决方案7 q: |) _0 Q% Z0 p0 \
( x) }6 @! L# M/ y) g
8. STVD在调试时弹出“Cannot access configuration database”的解决
) T0 G. ^1 Z3 ?/ p* i: }0 {( P 6 e. I. m" ^) F$ t
9. RTOS低功耗特性的设计原理和实现
$ j+ D. o0 Q' `5 e# ~ ) h5 p2 }$ r0 h* k# c! e; d
10. IAR下使用J-Trace进行指令跟踪
+ [( R/ a. C; `6 L- G9 }6 S8 }" J" s$ H+ j" u8 d& f
11. STM32上RTOS的中断管理9 k  C! ^1 h) n
7 c7 a, _# e. `
12. IAR下如何让程序在RAM中运行8 K# M# @6 _& p4 c. a

0 G1 |& l" f5 c13. 如何在IAR中配置CRC参数
% l& y: c$ Y- k( t4 @" |( I2 x: V
+ s9 {  p5 z5 f, T* Y; z, ~) [14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册9 Y" }( j' P" \* x! I. h
3 ^- ?2 U% K9 v/ t2 L6 ?# |
15. 使用mbed进行STM32开发及STM32F0的时钟问题; H. Z' M0 K$ V9 M4 u! x, b1 B0 g0 \

# U1 u7 }% ^8 O; U9 `  B16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
1 N/ u. X9 A; d0 }* M
3 x* D+ X% P# v6 }17. 多任务系统中的不可重函数使用注意事项  F$ o( O5 k- j( j

* E2 x/ a# Y8 p; ^18. STM32 utility的hot plug功能  F' @8 f$ V! d6 |* D/ c- o, }5 l
1 e) e7 N& G0 U$ \
19. 如何将CoreMark程序移植到STM32上
) ^" a8 P7 E" A
9 |1 q1 _0 l) u( T7 |20. FreeRTOS定时器精度研究/ m4 ^* Z: T! A4 V5 y! Y
# O4 |# c, U/ B4 @" ?1 H
21. 如何使用Eclipse和GCC搭建STM32环境* v# V1 q0 [- S8 d! q& G6 H) l

1 F' i; Z  `, f: |8 w) I22. 如何建立一个基于GIT的STM32库
6 n3 d( Q) ~, c8 m) H5 f% P5 q  Z! b2 z$ _) m
23. 从零开始使用CubeMX创建以太网工程
- H/ H7 ?; ^) {" t# ~
; U  Z1 o$ ^( A5 t, ^$ t24.从STM32Cube库向标准外设库移植FatFs文件系统
5 u# q# B3 R) h" K/ Z8 G
3 e9 r9 K* i; b/ i6 J8 }25. 基于 STemWin的屏幕旋转
! [! y1 X$ W3 Z( h# V2 k; J2 l. r0 M+ t6 o5 y7 i
26. 编译软件 Hex文件烧写
% Z& }6 K; v' v2 g# k( @' x
0 A' u& L' @% ~( V4 w! F8 F27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台 " @  M, q6 s% Q

& u; P2 X$ g0 s) F( [. y6 O5 Z28. USB CDC类入门培训; B6 [5 m/ w! f5 J# q( o9 l

8 m: @% }4 e* J+ k9 O' w) i2 j' R( L" c# o29. USB DFU培训
, y8 P8 U" u6 x' S3 O0 \/ k+ D( ?3 n& Z6 q# S* ^1 S1 _9 `" `9 D
30. 用于量产烧录的拼接Bin文件操作
7 b8 N+ w7 o# E8 n; C3 Y
' s) V* L2 w, G/ e9 r( v7 m31. STM32免费开发环境该用谁4 m) {$ n4 D6 N) d
; g- j4 W: s: ~* }! y! F5 ?
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
5 O$ i0 F% I% }, e) A1 u" N0 W' i6 ~4 ?  B- a- |- {- {2 [
33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)
9 q$ Z) k* a# H( d
7 H+ f, k$ k$ }& u6 J1 J34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  : \4 a; f* S0 B# y
+ T- j0 I8 ~7 |* n$ H
35. STM32 FOTA 例程之 cJSON使用   
6 u( q9 o" b1 ?8 X6 N- [$ |% g, o# M4 q
36. STM32F769DK 云端固件升级例程使用说明 5 [8 O6 F& _% Z7 z9 e3 s
. h+ j% e( C3 b& s
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
/ w: Y9 e2 s9 A$ w" t2 z) y, z1 s
. b3 a& W2 [; j38. 基于 STM32 的阿里云物联网平台方案
# K$ k0 u3 T  }* S, G) ~, V/ e6 G- i7 @
/ K$ N2 `1 H' H/ N" F# C39.AliOS 任务上下文切换原理分析  
- `5 @! V5 k' y: H8 B$ o% }: n
/ D3 o8 P; |! I2 P7 V# `. H40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题    b# ?* W& }* T
9 V$ C0 w# L5 K8 }" J7 Z
41. STM32F769DK 云端固件升级例程软件开发文档  # {3 w; p) P) ^7 Q/ @/ m1 C
3 u- X3 G/ _. c" k
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
! q/ V' Z0 }, @+ u7 M8 [9 Z3 X/ n, h
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
) E" G) f3 K( R* x( x1 u% X$ V
6 o. C/ B% I1 ]# f# g" H3 }44.零基础快速入手STM32MP1 (2019.9.19)
, ^7 w: B9 h# H7 V! I
, D7 ]! ^, C6 L* o/ c& L45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)4 u! c& C# b, s) U
, h( S5 W8 `2 F: C+ R0 q
十一、调试
  o5 C# ?: q" f( J$ a  H: G
) C" h* l7 J% R" C1. 关于STM8S SWIM Error[30006]的分析4 \7 @: h' u9 I1 d
' ^/ T6 ^& ]8 U& s" j
2. STVD在调试时弹出“Cannot access configuration database”的解决0 x+ |& V# ^3 y" ]

" n$ n( I5 f2 K3. IAR下使用J-Trace进行指令跟踪
. d9 w+ m$ T7 I
* n% U  V6 C1 h. t& z! _7 n; l9 ^4. 菊花链 JTAG STM32
; f! c4 {' a7 W3 l* v
0 J+ ^! M  u# N+ o9 I/ L  x5. STM32F411CEUx 能下载程序但不能执行' r' ^- k% s( A2 c

7 Y$ A$ i' R, X1 A6. STM32F103C8T6 程序上电跑飞0 ]' u+ V5 {- n* _+ Z  h4 L

+ Y$ L5 W, ?, T7 S8 J8 `  I/ e  G3 i7. 使用STM32 ST-LINK Utility 设置读保护后不能运行' a. t  H+ w1 [+ Q) P

) R/ z7 Q, D/ w/ R* B7 P6 v8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  ! V: b% s8 S9 |' f2 f" F
1 ~) i' ~/ R5 R- }& w( P3 r
9. SWIM协议的GPIO口模拟
3 G( }) B$ m% q% n- ^  Q5 _- {, X+ C" E2 K1 ~7 J4 W( u- W
10. STM32F091空片使用ST-LINK烧写后复位不能运行用# g3 i: @* m. j8 _
  I' l3 {- B' t$ r7 n- v4 s  Z
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)9 H$ ]6 m; U; A# U/ J2 [

7 Q3 r$ y- t6 v0 Z4 J9 E" q12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)5 m( }8 _8 o6 g% _" T9 R
1 X$ C: m% Y- q7 T; O2 R, O( Z
13. X_Cube_ClassB代码移植 (2019.12.24)! x  `' p% N! ?) j6 U4 m# B
* w7 V5 C' j3 O9 N4 h

8 C# d+ G/ G4 S; T; y14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)6 w/ _+ {/ d7 @, K3 D# R  p& W1 ^

! T& o% V, ^. H: G十二、人机调试* Z" e, G& O7 r8 u

+ r5 F* r6 E, X6 x+ l. D: G, m1. 一步步使用STemWin在STM32上开发一个简单的应用
% J- ?) ?5 m+ J7 K  f) J* V/ X% O# P0 D3 i) T9 h# w
2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
, }; I8 J9 |) z% g* P+ F, U
- j# Q& M" G! F1 W( P3. GUI方案中ALPHA通道处理介绍4 e, c5 d4 w: ^

& `  |- E  b( D9 O9 {4. 基于FMC8080接口8位LCD的STemWin的移植7 h7 B5 V& y: |/ E- E- d; a
$ a  w3 m' ]. {& E
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)* A6 ^  \" O  K. B' Y5 F
. z/ H6 y% x$ l/ t
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)% m$ R) J  s! J$ e& y  p

) |( O5 n" b9 q% P  q7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)2 x4 I6 L) H8 X0 h1 @2 i
9 n, R" g; Y$ i6 O- C) F% E: s
8、STM32L5中如何关闭trustzone (2020.5.12)
" J# d! Z, i: U- w- ?  I
5 x: Y8 T% ?" _1 L% [+ H十三、马达  t' Y6 T( `; J- w
9 y/ G! [$ E1 D& _: Y
1. 电机控制同步电角度测试说明7 k# c5 d2 N. ]7 u' _# j9 [
9 Z7 y' p' r7 u9 q
2 Z# b$ B4 F  Y* ~

  {0 N5 [- O) |% z3 \' e2 ?十四、安全
" ^8 J' e2 I, {4 I' v) O6 f; C
; d0 N  d) Y3 f
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
5 \' D! W# X8 S+ w7 X4 `5 q1 \& h- c2 O6 ?2 A* a2 n: w3 t# h# V- i

% i. u. _4 Y( i6 P% [. {9 |十五、其他& P! p/ F8 r2 V/ t

5 X- F1 b8 Q' E0 ~8 ?6 f1. 跳不出的 while 循环
& V5 ^8 o7 k& M8 M
% z9 v# M4 M& g0 o5 ]( O# m2. 外部IC连接NRST导致MCU内部复位信号失效的问题
2 h; h' Z# I* o* t9 Z - u$ ~. \9 v! @, H9 L6 J
3. 潮湿环境下不工作7 |) @$ p" H6 W" u
$ L: q' ?0 P8 l, _) y
4. PCB 漏电引起 LSE 停振
, |+ P& r- m! K3 Z* r& W) q/ o, m2 R
2 [) ?" Z1 ^3 u# [5. STM8L152 IDD电流测量) G/ M! w3 G. U* q, b
! j, U" e* x& g3 ?6 h6 `& y
6. 使用STM32实现锂电池充电器1 A, L! t$ l! v" t) u* u
' Q; N0 ]3 D, B% Z0 N2 D# B. Q
7. STM32_STM8硬件平台基本检查
& [7 c& k5 b, |6 W5 Y
, H: a+ a8 a, w( y8. 验证STM32F401在STOP模式下的电流
, C$ U4 M5 |) J! A0 Q5 O8 Z
- G3 N% G2 A5 b/ ?" n& T9. P-NUCLEO-IHM001 电机开发板串口调试指南, ]3 ~" K. z* v, \1 n0 S6 ?6 a' p
$ }# e  S1 U: t+ ]* i! K
10. 一种计算CPU使用率的方法及其实现原理
' k3 W6 A0 [2 H  q; X. T, b
" q- }' e  I1 e$ R. G" s  v11. STM32 RTC不更新原因分析9 e8 v$ J" |: |% A! N+ u) V
$ G5 V) G" ~' f4 q5 @4 V3 d( u
12. 关于ST库函数的代码性能对比# W1 y' c7 {, T5 R8 n/ R
8 T: j" }" I# ]) j3 _2 F) W4 X
13. 在IAR中实现通过将程序在SRAM中调试的方法" d* C9 ?* s  O

" x5 G6 y% A4 Y  B# [" [14. M95xxx EEPROM写保护配置& k' T# S9 j) }  d) I9 S7 v1 P
- X8 {6 l& [. G8 @
15. 4SRxx的GPO的属性
* ?% R9 E6 w( ~8 V; ?; P& ^0 l- S* n' W& `7 q1 }
16. CR95HF的初始化步骤 ' _" z- W( t. s& o# s+ e4 F

. T" t- F2 n  e7 t/ `17. 电机控制同步电角度测试说明  
+ e/ w3 ~$ b1 {: y7 ^9 K. W; y7 m  H
18. STM32+BLE通过 Notification与 Android应用程序通信的例程9 N+ Y( ^* G8 }0 `

- m  e8 l6 R: Q! C! b9 {" @' \19. M95xxx EEPROM介绍# y: b  Z1 i( R& U$ a

/ m8 M" Y( u& T7 Z9 b( t: e20. STM32 DFSDM测量温度应用
0 u4 V) x6 g: F$ K6 [+ k/ D6 U
! V& }8 i% l, X0 H& e% E21.代码实现PCROP清除3 R' j! g' |7 M) |; p! p: C

0 E, W& o0 M' t22. 理解与应用MPU的特权与用户模式
) W+ y1 F( `1 x, N' _
) B) f' J9 C$ K. y  d4 L* u, M0 x23. 用于电机控制单电阻采样PWM变形信号产生
; G: b, }( ]) O8 G9 _8 }8 \) f, D0 C1 f  @
24. STM32L低功耗模式唤醒时间测量) W2 a# M# T' R

5 \, C9 [0 I, l* k! P+ [( b& T6 U25. X_CUBE_SPN7程序电机启动抖动问题) p. F1 k8 ?+ R6 u& f
, E# t0 ~/ T, @* z1 |* @5 }
26. 发现STM32防火墙的安全配置2 i# K( z0 C- E; f! O9 }

+ _. i! }) M3 \5 h- @* K% @27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改% f, w: X- A! H$ `
- ^& ]% Z8 s' O+ A
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
. [6 u$ {8 L6 U$ H" a! m# v1 m" k. r; W) U% B, T
温馨提示:
4 ~! X) G4 m5 |6 G9 D
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
5 S( K. d7 H' I5 \8 c5 x
: Q+ E1 h/ s3 c5 D

& X6 W7 Q7 w2 a) j1 t1 @3 z
7 M- s" M, P! r! e4 H7 e8 m+ H$ d8 h' ]5 N1 _
% F3 E3 H2 m2 ]6 |
+ i  |5 z$ v4 N

/ F' C$ ~7 I5 H9 i
& I5 |) v. v$ G9 z) C
5 m' k3 f6 B% d4 F) |* R
& K0 u* c6 ~- c. d! b

评分

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

查看全部评分

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

举报

278个回答
michaeldeng 回答时间:2016-7-26 19:35:55
非常好的帖子,THANKS!
Paderboy 回答时间:2015-5-18 07:01:19
好详细,多谢分享& C8 Q1 n; |9 ^- O; J
5768340 回答时间:2018-1-13 14:42:54
HI  
5 g; b/ |: }$ l0 i   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
+ s/ }7 T- F2 h( j1 f) D3 ^7 m   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************8 ~  q, u' c  n# W
  2. 函数名称:Cdfinger_Bspspi_init0 r. n; V8 F4 i* N! x; n
  3. 函数作用:spi初始化函数3 E" K9 R0 I, R. b
  4. 备注:- @6 s  Q2 ?8 A2 A7 X
  5. ******************************************/+ b5 a* t8 M. u6 t$ P6 o
  6. void Cdfinger_Bspspi_init(void)7 Y8 s( |7 ~; {. S
  7. {) L6 J$ d  Z' O( L7 n0 H9 c
  8.         GPIO_InitTypeDef GPIO_InitStructure;$ O( E, @% @  B. M# O9 H
  9.         SPI_InitTypeDef  SPI_InitStructure;' B# B) K9 d, \- X- N# ~
  10.         DMA_InitTypeDef  DMA_InitStructure;
    . _1 q: a0 ^' `- X9 W4 ~) H6 c
  11.         NVIC_InitTypeDef NVIC_InitStructure;1 v: x. R- P" L: f8 g5 V/ w5 I1 h
  12.   9 Z# E- Z( W* h1 B, f
  13.         int ii =0;* Z  N: K1 D. o( ]1 F& n" }, L
  14.         2 x/ Z& o. Z# X5 y/ X( f% N& V
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    % d; ]0 ~* n+ e, d5 d9 Q# R
  16.         /*!< Enable SPI2 clocks */! A3 d! q0 _8 q/ ~
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);4 v, G* p. A. s
  18.         /*!< Enable GPIO clocks */; F; Q7 d4 [1 `5 {& D7 c3 ^& |
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);1 C) p. G' Q# `2 d
  20.         /*!< Connect SPI pins to AF5 */
    " G6 {& p( q6 H" |' G3 h) k
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    & R/ t  ~9 X( m) p, U. c
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);; K" c" Z" |: w2 s) ?8 y( }% m
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);. c, T# r- H, N  _5 A% d6 {& H
  24. 0 ?0 a4 j$ D, O% Y, N4 U" D7 B7 E
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;3 D# c6 R: x$ y# ^7 ~
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;2 d7 C$ D9 U2 ?! n* d
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;, z# r2 r0 |, d
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;9 f* T& g# O  T0 R1 g$ G
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    : n  x) L* T  F5 |2 ?7 I! S
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);/ U3 I; a% c& x8 H

  31. ) Y/ w6 _2 X0 v2 b' A( Z; l- e
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    " ~' [1 ]0 z9 Z: g; p( ?( H  o+ m
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;" F  X% v2 q8 r& ^1 U
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;: w8 R; x1 B' |) D* x4 ~! j+ P
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    % E; O5 h) k7 y& P
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    9 M. Y6 F# n  ^; a- f) H2 E) j
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);3 G. z: s2 }8 Q0 B1 l: Q
  38.         Cdfinger_BspCs_HIGH();  c2 u$ h9 `' v/ D6 u1 P
  39.         //Cdfinger_Bspdelay_ms(1);
    + K. Q" K+ }4 P, V+ E
  40.   //Cdfinger_BspCs_LOW();
    ( E/ B% e0 s0 }/ Q# w
  41.         SPI_Cmd(SPI2,DISABLE);
    4 G, B0 Y# w, B, f. b
  42.         SPI_DeInit(SPI2);  r* e" G; ~/ ~/ Z; m6 b( }% d
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    + p7 ]+ a0 K. ]( k1 O$ s; H; J7 v
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;- A. l6 ]; A0 d0 w  a1 W
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    4 a3 ~8 Z; ?- {4 d8 P: r; o
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;) g3 b/ ?8 C# h$ ]+ ^/ q
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    # w3 l( m  Q, n$ F) B, n$ l; E, b
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;" R7 \2 _8 ]% i% y2 o8 r; B
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    6 T; K5 H) k1 q+ s
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    . i6 N& M9 n1 w, A( T" k, T
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;" _# b+ Q6 y% P
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    8 j1 L5 o6 R9 Y- z, L! c* O9 F

  53. " P/ Y3 w/ J0 E
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    * m3 P$ v: X5 q
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    # r5 X0 W1 f. Y  v4 v7 c
  56.         DMA_DeInit(DMA1_Stream4);* Y6 \) V- W# f! G" K
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;  Y' O. f7 J% V! f0 q
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);( @3 l& L6 @4 C4 t3 Q# q8 v
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    6 e2 E) @1 Y2 f: U
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;0 G8 [8 Z! h* I: i0 R
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    3 I5 w1 H; c& Z; m, c0 s0 o
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    & ^; X6 i6 |: R1 [/ Q
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    : v7 p1 j+ ?  r/ J
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    ( j5 X& i6 ]7 t, _  c
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;! ?! S8 y4 ~( G( W" C& n1 S
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    ! l0 ]6 [* W: N
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    - \6 F8 }% D7 [6 j& a
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;. y0 w* J" G3 }! C5 U9 @
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    / f( ^: O+ ^$ s3 m- ^
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    - M& a4 k8 P) r  B
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;  K3 A: K& N( b: _0 G6 h
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    ) P5 I& |8 P. ]- w% s+ b1 |7 o, N. A
  73.   3 ~4 x5 {+ d* {! C
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    " ?& W% J2 h* v' C1 C5 f
  75.         DMA_DeInit(DMA1_Stream3);
    ' t- V' G$ F5 \" Z
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;1 G; Z' j% R* v! u: e
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    6 b; D7 x  o/ Q8 D1 u+ T
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    . Q  P3 c7 x  p4 s7 p
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;- C: ^( y) b4 [3 _* J# P
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    3 F% K; w1 M6 A6 e
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;9 A+ f% d) X1 X% Y( E8 @7 U
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;& ?3 e& ^. a4 i
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;+ t9 U( i: }' z0 F% d
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    , E5 V* Q1 F' |/ f
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    5 k. P9 G- D8 I# T
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    " h' }! ]) t& _( ]
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;) z- m7 U% {0 P
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;# g  j: u7 J3 h" ?9 E
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    # l) [% R7 e  P
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;- P; |6 c7 Z; o6 [& ]3 W& Q. o
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    8 L$ i0 o% A5 G6 i
  92.         //Cdfinger_BspCs_HIGH();% J5 ~8 [* c$ u7 R- A- Q+ l. ?$ V
  93.        
    & t4 T8 ^( A3 R- U% X

  94. $ C& {! w: k! T4 |8 h

  95. # M: N, g1 V, J- c" n! V# A
  96.         //发送中断8 c! x7 ~2 Q. `7 x
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/ s4 i* h3 m3 S6 g
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     # r- v  I# Y0 ?9 q: k, Y& Z  h1 F
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    . o; G1 a7 l  c6 g9 S  H+ j: r0 j
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;! i9 U& P6 e2 F; b
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
      D- l3 s: R7 K. Q
  102.         NVIC_Init(&NVIC_InitStructure);
    # [% b4 o3 Q4 A' `7 {+ [, b
  103.         # F3 D+ `- q2 S4 K( a8 z
  104.         //接收中断/ p5 f/ Y/ g5 s: A! H9 F" F
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    # P! M2 z( C) X# ?9 I
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     8 ?5 [7 p/ B. G. x! ^
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    / m) c( e( j! }
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    4 N6 j0 D; E8 y6 M
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    * ?- j$ y# ?& l; |# G* C+ J
  110.         NVIC_Init(&NVIC_InitStructure);
    , R) C7 L5 U! g0 a* R
  111.         SPI_TIModeCmd(SPI2,ENABLE);7 K+ K- u9 p7 b2 L8 B! \
  112.         SPI_Cmd(SPI2, ENABLE);7 U  _+ V# ?+ @. U) R5 I
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);. V! V/ q6 u' W* ]5 t/ R
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    . f# {+ c$ d5 w0 ?7 z* C. m
  115. : N0 N- L% N6 V1 j
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    ) F3 s( O# `( K9 j  f( X
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    , }4 u% D) |" _; f% N/ Q, k- A! I7 M
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    ! N- v( e, j4 _

  119. , x* Q* k! q$ s% N
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    % V! D# q0 w$ H  [0 X' X2 N, B% U" ^
  121.         {
    ' V# {) i, m) r* N
  122.           if(ii%8==0)
    & B" h& u' l  v, O( Y. ?
  123.                 {2 A* S" Z0 g5 [. j7 h" A# J$ a- E+ ?
  124.                                 printf("\r\n");
    5 o- @: I! J; v5 _
  125.                 }
    2 F# r" K( X) ^/ P/ `' \7 w7 |
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    9 [8 `8 C5 `  b% h% m4 x3 Y  s
  127.         }
    + }3 Z, g' S! p" j, Z3 c
  128.         printf("111\r\n");
    % x; @" d7 W" T1 C
  129. }
    ' i3 \4 [8 w, p' \

  130. 1 I: b9 o+ b5 n: X; I
  131. ' f8 c+ H/ q, A6 S) S
  132. void DMA1_Stream4_IRQHandler(void)- `3 q9 ~: ]& K3 j
  133. {, u$ r9 A. q5 T. D$ E9 A
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET): \, [% r4 e6 {' r, O$ `/ }
  135.   {
    ! m& R' w& k  ~% ~8 `( |* w% y+ Z
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));1 b- j/ X4 `" \
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    0 X+ Y; n2 y9 G
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);, f% h( u+ s) c2 h! R3 g. G
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);! C# d+ n$ t, s# d4 ]$ H, Q6 ^4 }: V% i
  140.   }
    # [, }. K. ^, ^. [
  141. }; [8 R" x  H" x6 h% @% M

  142. 6 P7 N4 ]% q; w4 x! o
  143. void DMA1_Stream3_IRQHandler(void)$ X5 _' O% F- e% g
  144. {
    2 Z3 q' G" v! F$ U! L. ?6 \
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    3 q) z) F& U) @3 t/ X; L( G  o
  146.   {
    ( Y% V; Q2 g' m+ f
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    7 E. v+ ^) C. F9 R- ]' }& x0 v
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    : n& [' s, @2 t9 H# b; V
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);+ j" I- P$ ~( o
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
    1 O# R. @; H- z6 v4 F
  151.   }* H6 `" r- e! X+ D
  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 N: S$ C1 `' A7 t
以下是全部代码:# k# K: M  ]- U- C* }8 ?& G$ v
#include&quot;stm32F4xx.h&quot;8 ?  A' D6 k% ^4 r$ o/ e
void RCC_Configuration(void);" B; F# X+ t3 c# w
void GPIO_Configuration(void);
) |3 d# [. [' i2 q" jvoid SPI_Configuration(void);
+ q6 }. ?& v. s3 Evoid Delay(int nCount);: k9 m6 N! V# k& i  I
int main(void): m. a) A* U; `6 _; ]0 U
{  RCC_Configuration();
+ b' j# O. `+ Z9 r% K  GPIO_Configuration();1 d& S8 G6 c. J9 E
  SPI_Configuration();
3 p$ Q! ]8 P# j- i( ]% z5 w' p0 `1 K1 r while(1)7 ]6 \3 B& Z5 }$ P9 [* _
 { int data=0;6 w& x* ^4 ~9 f' D& m! n
  SPI_SendData(SPI1,0x55);
+ b  k6 Q" a9 _+ u, N9 U  O) H  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
  Z3 n: q# \3 r6 F- j  data=SPI_ReceiveData(SPI2);' |* v' X4 {. j5 f: ]
  if(data==0x55)
+ x7 N/ b- ]) ]     {  while(1)2 u6 C% S5 P/ s" V7 N
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
* T4 G, }8 v# V                Delay(0xfffff);
- K, A' O: h, A( q; v0 m  R                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
( O$ e! w8 ?1 A9 V4 F: @6 y# L$ C- A                Delay(0xfffff);
0 D6 z% l, A& @0 O, Y+ M  
" w% n  {; o  f+ D; ~             };* `- a0 o7 V" J" P/ n5 K. q$ b7 o
     }
7 p+ S. ~! I, c     else while(1)
& m# ^7 |' h4 s  V2 M            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);. l1 }/ Q: e3 w; y1 U1 s; ]
               //Delay(0xfffff);
) d1 p- S4 ^9 i  ^$ q               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
2 q5 ?! E/ o& q6 c# @) ]* x3 R               //Delay(0xfffff);1 S7 t4 ]% M/ p( Q' |0 u
   ) k2 A$ E1 F/ @1 G2 ~2 `
            };
' t, q/ k6 f+ q% ~" w; Y# [ }
7 G# w- ?: `# G: v. b: f+ z5 ?}$ _' b/ a7 x; ~/ W
void RCC_Configuration()" n6 r9 N$ H( D& ~% {
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);& y8 k$ t9 {- c- [
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
! a; t- n& E/ P2 ?, f2 T3 [  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   - `! M: E8 r( ^  N% W! K, p
}; [6 T5 U2 V  _* V! G) x( Y% R
void GPIO_Configuration()
( B, t+ t' Q2 o% i3 q( y* c9 j# q{  GPIO_InitTypeDef GPIO_InitStructure;
4 j2 t+ J8 M, F+ h+ @$ d  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;  P4 ?/ R9 @6 T/ n) E
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
* ]4 v! h0 b# w) N5 k7 s, g$ R  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
% I1 c* U7 L  A8 I- g  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
- e4 H7 a: G1 `2 Y. v! w  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;2 H% Q" B1 I/ @( ~* _
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
( A0 i' z4 W) Q* h) V; h  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;, t2 ~- q  p  h! t, c1 e
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;7 B1 p6 |) M  x2 r7 h! P) L& U
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  m& f/ O. @9 A2 ?& \9 |, s, t
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
8 i& Y" D1 q, C3 Q/ O" F/ G' u  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;/ G& b- y1 C! ~# L
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);* P4 x% H4 A2 @7 z1 r; R
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;6 S& ^* G( J/ w
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);1 a8 G; z8 Y$ l
}
% C& l2 r" Z* [2 _4 Y- r! Yvoid SPI_Configuration()
. ^. t9 \; @8 }: o$ w{  SPI_InitTypeDef SPI_InitStructure;
2 V* k" P$ t5 a, |7 }3 x  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);) ^: C) e" {' z6 j4 \+ G) k3 c
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
5 H& ^1 V* R: s* p( D% F* Y+ S- {  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
' H9 t4 P3 @$ r( k6 v  G   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);. r* U1 J2 v0 s) j
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
* R+ g* a# {  b. Q0 P/ d  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);* _4 j% M. P$ c3 I' p
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;+ I/ ]6 h) G: u
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
6 F0 {6 {  m/ T5 E  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;; w% C* `5 F/ g4 F! m: I
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
, X2 V, F, X, L5 l, j  l% }  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;6 d! ^1 c  @5 Z* i1 Q
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
& [5 e$ h# x4 J0 p  u7 Q0 {   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;! m% r- d5 U' x0 V+ q
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
. W* C6 H, {7 F. q" P  SPI_Init(SPI1, &amp;SPI_InitStructure);
2 O% d) d, F6 }  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
; q. ?0 s$ Q" F! f( ~- q$ N- _   SPI_Init(SPI2, &amp;SPI_InitStructure);2 E2 m$ ?6 |- p6 Y% r8 ^: o; A
   SPI_Cmd(SPI1,ENABLE);
7 M5 L0 t6 v4 E; b% o. v4 a8 J   SPI_Cmd(SPI2,ENABLE); ; N$ K7 L7 ]; Z, x- l
}
, M# ?$ N1 ~- j/ |void Delay(int nCount)
. E; m9 t5 T" h; R" `9 }3 c{ int c1=nCount;' i& j: U4 C4 u5 S( S
 int c2=nCount;
  `8 ^9 C5 u- k. f for(;c1&gt;0;c1--)1 t& v$ Q" D) |+ v3 Q. C+ ?) }* V$ p3 `
  {4 F! e8 [) X, I) z
  for(;c2&gt;0;c2--);
9 z* F8 `/ P: e/ y* B2 i$ X+ V };$ u8 u! P" c% N, i2 O: p, t2 O
}  h& [- g3 g3 Y3 `7 v6 Z  y/ m
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
2 e. }$ c8 q5 e- T: m( O楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
) U/ ?) u# a4 J以下是全部代码:
9 ], j, [% Z6 _- H8 i. B#include&quot;stm32F4xx.h&quot;
/ d& m8 Y0 U# k7 @void RCC_Configuration(void);; Y+ ?6 c$ M" y0 N
void GPIO_Configuration(void);' T0 e$ }- S1 X1 M
void SPI_Configuration(void);
) Y7 L" a! l9 I. tvoid Delay(int nCount);5 ^9 j& H; O9 N8 v) N3 ?8 [
int main(void)
% Y! T: k. |! @; L{  RCC_Configuration();
" v, N1 b6 C3 P6 {  GPIO_Configuration();
& a/ ?: |1 ]+ ]& `, t- z* L  \* O  SPI_Configuration();
9 o( Q# `. S8 h* U, _2 _4 N  M while(1)
1 h7 T# f% x- O- v { int data=0;
* b2 m3 _8 z# j# y  SPI_SendData(SPI1,0x55);7 j  W# `6 w% L( Y
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
4 f2 d7 K. d; e5 M! s" o6 y! B  data=SPI_ReceiveData(SPI2);6 J* l9 [7 @" B5 G1 k) v5 y
  if(data==0x55)
8 e; P) s) r# D     {  while(1)3 A3 x$ i; n- \- ^: ^; _7 L& s
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);; x: G' n* T. R) C: [, z6 t
                Delay(0xfffff);* |" Y* i3 D/ {
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
- Y: ?8 U. x$ Z- M2 _2 G                Delay(0xfffff);6 m* Y% d0 \, m
  
9 M; a  y' W- C- k' t             };
* m( B5 P  |- U- G- a     }
+ _1 n: t% }6 l     else while(1)) Q. f, }, f8 W* B% R' H& F- X( T
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);7 m  @5 I  m  N. y* Y7 o! C# m) P
               //Delay(0xfffff);
3 e  T, M' N4 M               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
( X+ z2 Y' G) q# \( z- q               //Delay(0xfffff);
8 E% a4 k, i9 ^) F6 i% N- ^  @# D   6 ~0 a6 j' ?! ~
            };
5 {/ Y7 o  L/ t }" d- s1 v- I) B9 w2 @: g' F
}
: \6 G, i  L0 t! ?" Bvoid RCC_Configuration()2 W, U( l* T0 H: @( l; g0 g
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);, A4 r7 S- w! u2 ]2 F
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);6 q: \  n% [; ]2 n
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
4 p* v% q( O. f" ]- F}) n1 U4 q" t/ ?( U. P
void GPIO_Configuration()- ^: S' F+ \( P8 X; @. t9 {0 T
{  GPIO_InitTypeDef GPIO_InitStructure;
# ]' }- G( t) o4 d' i3 m  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
( G& S* N9 W$ [+ R9 P  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
/ y" `) t) ~* A9 w  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
7 n$ Z8 L$ L$ R+ m. e, f4 I  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  u% ?8 c9 T) \6 G/ y( ?. V6 o
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;9 U/ H# K' y& ]/ \# e! R; ^9 z* P
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);6 B" |, B$ O% ]& J. Y, _2 N, Y
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;4 \- }1 c+ H  Y8 K6 t1 u3 Y
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;- z$ O8 K8 e6 l7 _
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
. H% d" B* n; E0 @  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;3 i& v( m& {! j1 f/ _
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
1 I% z9 N9 M3 o0 B0 }  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
: _/ S/ I" L' y8 e  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  z9 N, }& L3 K. Q  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
3 M- ]" R4 ]% V+ ?$ }3 }* U}. o! W7 l# k; t; q8 W; G) {
void SPI_Configuration()
/ O; ~+ d- h: C$ x3 M' k{  SPI_InitTypeDef SPI_InitStructure;& ?0 k; W6 A0 {+ U6 c
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);1 K  G6 }0 f6 V5 g8 N+ `2 s" \; R
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
) r, X, E/ v, ^8 a  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
9 `, @, B. i; K   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);8 G  ^5 |7 y! _8 ]+ L8 H6 I: t" K
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);/ r5 M7 A; N5 V
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);6 A1 }/ {, u- J5 x
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
0 X9 T, U" c' g4 a; P9 D* w4 b  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
. I3 V$ \  N4 g* z/ S1 }  W  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;! M3 n1 d. ^8 R+ p
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;9 s3 W% v, A6 j1 q8 f0 y* v. e2 R4 ^+ @
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
- v: X" ~3 a9 @  T  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
9 T0 Z0 u, ]+ P: J( L* L9 P: O, `' {; r   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;3 M# ^$ U& v# i# r( y
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
( L4 j4 w8 g# G8 z3 w1 p  SPI_Init(SPI1, &amp;SPI_InitStructure);
( ^5 t# z* Q- {) V, s/ D  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;) {7 j* G2 N# s! t$ j, F
   SPI_Init(SPI2, &amp;SPI_InitStructure);
3 [' _  L, r3 L  B) b/ t   SPI_Cmd(SPI1,ENABLE);
" X9 z3 r! R/ t* U   SPI_Cmd(SPI2,ENABLE); $ X6 U1 l5 V2 \: V+ c$ p; x
}
$ U9 _0 Z+ `$ ~6 zvoid Delay(int nCount)
* u$ J, A5 m) Q: H{ int c1=nCount;. I5 g5 r( f3 G& m% r  A
 int c2=nCount;
" M: n- Y; Z! e8 q for(;c1&gt;0;c1--)
: F  J/ ]2 v* x: F) z  {* `9 y" f+ s1 e% y
  for(;c2&gt;0;c2--);4 D0 ~2 ?! ~/ [
 };8 h8 Y5 B2 I, ^! Y
}7 @  N3 ?! _7 E7 ?
先谢谢了~~
& f4 w- S4 F' q. }$ b4 s 
2 Q& u, i: V4 T5 J/ U5 P3 K5 |2 T0 j- z* d. v! X8 N# g8 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发表:
. R2 h& N! z( g- ~2 M7 y 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
4 |+ Q. g9 _: U8 I$ ?" n 
  P2 n( Z: e9 F8 ]
/ o' w# x. ~8 d" F: l' Q多谢支持!!
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 运算效率不高

  2 ^4 ]: S: u" f
鬼魅一样的Hard Fault! g5 n6 k8 P1 g8 G! n, e9 o
 
+ ^! r( U# Q) C# K$ s该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。' v/ F1 U9 s' d# d# O* z
 
' S/ n0 [) H( M; ^4 m咋解决?
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版