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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
/ C' u6 Q9 u# S2 W$ ]( }5 z1 l0 J' r3 L# P4 q( [) m3 f& E

4 Z7 F" T* Y( g社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。+ w; Y' m" O) l" J

7 \% [2 J+ m! Z2 l, X/ t提示:点击各主题,进入帖子,可下载ST工程师解答详请
% o+ V3 y6 ]0 I* P " ~6 F# Z+ ?% F+ q# T

3 @) ?6 U7 P; I" W) t一、通信接口! g7 q4 R8 t* J$ [: O3 ?

5 B9 @- K. h  s5 [$ h1. STM32F2x7_Ethernet(FreeRTOS)驱动更新
, y# b+ g! o. h9 D9 L9 t, }: L2 E
0 ?: U" ]: z$ [; Q( o" R; }2. SPI 接口发片选信号导致死机; @  @/ C# a$ @7 U+ ]/ u9 ~) ]' {
7 k: m3 |, m! Z* F
3. USART1不能设定600BPS的波特率
+ J5 p: B% _# M
- K2 A( A2 Q  w  H$ I4. I2C 接口进入 Busy 状态不能退出
, d, n( Y! \+ L1 O, @0 u  J . H2 ~( F" v. l! K
5. 对 Flash操作导致 USARTU接收丢数据; |! l4 A& y) Z) {/ W0 C
! r  f* O7 u; @1 m
6. USB接口易损坏
- |4 ^9 P$ @  y& `
# |* X+ n, E$ g( Y& Q7. UART发送数据丢失最后一个字节4 V* L) ]# f" R* H( r3 y
+ b' b8 g/ ~- m9 W
8. 使用 CCM 导致以太网通信失败
3 a. u: ^7 H* T7 X0 s & y1 Q2 M0 B2 D) J' J
9. SPI3 接口没有信号送出* W# _1 O6 q+ _" S1 J+ b' M0 z

+ v7 c5 c+ N2 N- k10. 时钟延展导致 I2C 通信不可靠
+ ?, [/ n. d4 R; @- h- T# f9 h3 H0 S
& K9 O" A  a: G* W: J11. M0的USART波特率自动识别问题
: E* P) G, a4 J0 J' L/ W
6 @% p* s. b. a0 e12. WK15 OTG做U盘主机兼容性提高* m. ?1 s# ^0 }4 s4 a% h- N$ K5 e" Q

6 v2 X0 Z  |5 I3 l13. 以太网电路设计注意事项5 g8 Q/ @( D* M; C

  f8 R3 O8 O. d% Q$ R7 U7 N14. OUG主机库在BULK传输上对NAK的处理
% e, R9 s) ^+ O5 R# M! s. V# a ) |( x" s) K- B0 s
15. 串口断帧检测  b+ X! w7 w% C- r6 i' c

: R& j- o# B1 T+ V% E) p$ v  f16. VCP例程用于数据传输时丢失数据的处理
2 L* F( a* Q0 m5 Y6 S3 F$ T  V
) X& y  z! G  D8 r9 [5 q8 K3 j- ?17. STM8L051F3P6串口UART数据起始位判断的问题' v- d/ r, _" ?. u, p3 |: j
; w% N! K) V, t# N5 k6 i
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号% E2 n9 E( A' y9 R5 f( i& m
/ r* h" d1 g: X" V. f! ]
19. STM8中UART奇偶校验的使用方法6 h% L! V) V, ~" d
2 d9 d5 ^. v9 f# S; _' c+ u
20. STM32以太网硬件设计——PHY
8 R1 B) P( v3 f4 B9 k3 i$ b1 V1 M7 G6 g, X  g$ w( `
21. 一个判断I2C总线通信异常原因的方法
* P& a7 ~% t! K. n" n0 S5 k
) G: m* C* G+ c' t1 ?22. USB device库使用说明; o# V6 J4 K7 Y% O

, g" V! s6 F  f7 f4 p" O23. STM32F103上USB的端点资源+ ?9 d& A6 R( }  O9 c# ^
! z2 c& o* v" i. m/ }$ Y
24. 使用CubeMX生成TCPEchoServer程序# N2 I' h3 Y5 x% ~
9 }7 _3 S0 o$ j6 T; L
25. SPI接收数据移位2 e: H' a# W9 ^" ^5 T

& b, i+ O' n% F  g26. STM32F0中Guard Time的设置
/ v0 W( E" ~! ~1 y5 Z
* C7 j6 V. p1 l27. LwIP内存配置
) e' R9 _# {6 K1 F
3 m7 g9 H  Z( W$ q' k. a; D28. STM32 USB Device的简易验证方法* b9 a* @6 g4 g; O
) V* i/ N/ U2 I& p" X4 c( x
29. USART 中断方式接收无响应问题的一种情况及其处理方法
8 ?  M- b" S/ o& K" A  y
; t1 e" {" v+ @) v# }- y& h  F" ~30. STM32 基于 Nucleo板 CAN总线的建立* F5 W% `; S. Q  L: Q/ q

2 r" {9 a9 f1 t! I, m& L6 ~31. STM8 CAN总线的IdMask模式的讲解. ]9 Y5 b1 S* m; q
+ O% c" D4 ^- g& P6 V$ h9 O% }
32. STM32F746ZG USB 驱动不正常
* [. q- C' |4 H! K2 G% N4 u6 U8 V) T1 C( T( m7 A
33. MCU在STOP状态下通过UART唤醒分析 , u; @, u4 k3 [; C( w

6 O. E6 Q6 |& r8 a4 ~5 ^34. 通过STM32CubeMX生成HID双向通讯工程 ( X0 X" V# E! e  j& @& k2 q
# |) N( p% Z8 a# ]* f8 f
35. 串口工作在DMA模式下有时接收异常 , C1 O  }# ?2 }0 Z6 A5 s$ F
7 e( B" U: v- k9 @) c
36. STM32 Bootloader中 DFU使用限制
6 Z7 n8 `) _. o& p! g' r+ b4 @, b# D" b  s  N, P4 z, {/ K% `1 O
37. UART异常错误分析
2 Q0 \& p8 b7 t1 Y  Z* n1 d
% @' W3 d4 v7 v% j/ U* W38. 基于Cube库无法检测CAN2的接收中断 ) u9 E4 L$ V- I0 a$ k% V  B: Q/ j
! W; M% D6 H8 C- Y4 h" [2 T6 x
39. 基于STM32F7的网络时间同步客户端实现 ) {' e# V+ E* I
5 W% L# \! z4 j* H* T7 H$ _
40. HID与音频冲突问题
" n2 X. i' \4 j1 R# ~( j$ n% f. D* ]4 j( I. O7 a
41. 在进行USB CDC类开发时,无法发送64整数倍的数据, ]% X, r2 R* R  [2 Q

& p; |# y( o5 k! M2 Q. B: y$ C- P42. 从零开始使用CubeMX创建以太网工程
9 I& P( s$ y! N6 l/ R7 o+ N, N! B. A8 p7 M' F! k( @- X8 l2 `
43. STM32F4xxx的I2C总线挂起异常处理
  p& {# }9 N' r+ D- K+ d, k, ]7 J' ]1 z, z
44. LPUART唤醒STOP MODE下的MCU1 I2 x/ U2 Q" @+ s7 z
) `$ u* q1 B; i
45. STM32系列 MCU模拟双盘符 U盘的应用4 {0 Z  C; |/ y* d
8 P! R* L7 i. U( l9 V
46. CEC输出的数据和数据长度始终不匹配
4 s) A$ |, N% P: h; u* E' V. R& G
47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析/ ~" `. v9 F2 H  ?

, r) S$ c  f' ?$ u48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
) ~, W8 r( y* g- o. y3 X: K& r- q$ X  W
49. 增加UART接口应用时的异常分析
) |0 E8 D0 N$ f4 o+ l- h# i3 k8 l2 P; O8 G1 b6 w5 u
50.UART应用异常案例分析
) c4 v+ R3 E" y5 c8 O0 ]
. o/ n" N$ _! Q. {51. I2C配置顺序引发的异常案例
) g  b5 u. ?( U) @/ m
  L- @# e8 {2 G; ?52. STM32 USBD VBUS GPIO3 K  g; \# j( F) N' M( ?
( I* Y  z  I8 S# ^* y
53. USB传输数据时出现卡顿现象
! U' j0 o2 T; E. y: ]. B- f
9 `$ l( v9 i7 d  X1 a* m8 G% j! _, g54. STM32的高速USB信号质量测试实现; u& H0 Q5 q6 X  V5 K

, Z  f0 T5 t* f- \4 V55. 基于STM32 I2S的音频应用开发介绍
4 w" N- s, n- h+ \, ]! C% M9 a* O7 E/ [4 ]# f6 N
56. HID_CDC复合设备在WIN10的识别问题  
& c! q( ^7 q4 K4 Z/ z) z5 y# @4 h7 C# g( b0 Q; z
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  ; u; ^8 x$ w- l% H6 X, N

2 S4 \8 d. K) W$ |( m1 J58. 一个关于LPUART输出异常的问题分享  & ?: `7 v6 {. Y  ?9 b9 e0 ~
$ i# v% b1 N$ w5 x! t+ K$ a
59.通过 DfuSe 工具控制程序跳进 DFU 模式, i' Q  P  r5 Y7 |5 g+ ^
9 d) W1 }- A) I, v/ \" k' j. ~
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)4 L8 H/ H) e# I% F7 E  j& @

2 y  G4 A8 T7 [5 t' |61.一个因初始化顺序而导致异常的话题 (2019.12.24)& A: L4 n) x+ Q1 e5 x9 [% P! _

; T+ g+ D2 E' j$ x62.MC SDK 5.x 中增加位置环 (2020.5.29), P; h8 @) V& Y% G
) D* H" o: a& r0 v+ f
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
, |  [3 L8 t4 G$ K. G. w2 L; j% x8 J9 x
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)$ _. L# m% n( K0 B+ u3 U

$ I: \$ P$ H" a( h& _& K二、电源与复位
6 i9 ?, b4 f: n  q- P6 {1 G
3 w# \& z/ b) d1. Vbat管脚上的怪现象
: z* l# ~1 [% @1 U% |5 a1 C
% S- h0 Q$ a% K9 i* s6 M2. 上电缓慢导致复位不良3 O& ^5 [+ ~1 W# T- l5 L7 Q

# }7 Y. s' p8 Q6 J7 P3. 关闭电源还在运行) v+ `0 j. \. N: @
) D4 F0 m% ^1 _
4. 使用STM32 实现锂电充电器
" a: K4 \  v! Z. T, W" M9 k$ w
, ?3 F2 ?. r6 r1 |% _5. STM8L152 IDD电流测量
) N! M; l; D9 b6 \, p
# D. `2 @  d9 z- P' y6. STM8连续复位问题
9 x1 |3 r7 |, j5 Y / i2 X" i$ j7 v2 F
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用( l& }# E* N& r' S  D

7 M" A1 J+ n9 t8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流5 }$ e3 z% X2 g0 @; Y. c" s
/ g" ~. C6 O' z& p- D
9. STM32F7与STM32F4的复位序列比较. i: g9 b( r) W( F) @' v1 U9 X  P/ N

  W' l* C6 g( t" g, p5 B10. STM32F107 复位标志问题 : i; d- f& _( o5 A' U" D3 \

" M1 ]: k" ~  N# V11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  6 d9 s1 I0 `+ o) F
. s7 F+ E# w6 t/ e6 B  |4 `
12. Nucleo_L053不上电也能运行2 f' _( ], ]) N: w& h& t+ s3 \
4 G5 m* }8 }9 V5 M& Z
13. STM32L4中STOP2模式下的漏电流
6 [2 @$ H( a5 O7 _2 g0 f- b5 R* O" f" B  B# q
14. 在没有外置晶振时HSE_RDY异常置位% L8 k  ?- u2 e8 g3 \& X. w

) j+ p) \0 ]( Y) S0 \15. FLASH被异常改写   (2018.5更新)
% ]9 Q% K1 B0 Q* ~! C+ [
7 C) e# Q/ g: W5 [) P0 L16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)5 c. Q' l. K# e( b9 f

7 @* i1 [' B6 U9 l9 V17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
3 [+ [. f) l2 ~# D
' u% Q" U' a3 A+ |三、IAP和Bootloader
2 e2 M  N/ V* l4 W# D  Q$ | ) L8 j8 d+ B, [* D
1. Boot Loader与上位机通信不稳定
  M6 I6 c- n5 M/ _1 C$ X  b8 ~ # B. ]2 E; X( C9 Z
2. IAP+APP 模式下不能启动 RTOS
0 l( b; z' r7 N% P, ]- w & p% u$ s3 w0 U, f0 B+ L
3. 从 IAP Loader 向 App 跳转不可靠
: |7 `5 B7 {8 ?  ~, k # ]: b5 D9 j6 p" ~9 ^3 K
4. STM32 MCU IAP例程跳转到APP代码简要分析
- E. R7 e9 ^  j
' S) u/ J; W2 a0 F5. STM32F091从自举程序向应用程序跳转的问题与解决
$ @1 N% s; e0 g: w. W  c& f0 G
* t. N( u9 t6 }9 M  t6. STM32F09x不使用BOOT脚实现System Bootloader升级代码/ k5 B( g- H! R9 @8 \8 G
, s: k; [  U. {! r
7. STM32F0启动模式相关问题探讨
9 _& ^+ Z8 o: W; p* o5 Y
+ g( }5 s% R( x1 X) D8.STM32F091空片使用System Bootloader下载代码
8 E+ x$ m, E1 e) E' t* d8 b3 ?9 G& o8 p: n: G
9.STM8L  IAP 应用程序中编程指导
/ L7 G6 ^0 s$ ]# ]! E' y5 @ - w5 G4 j4 g4 N- p
10. 如何通过STM32的串口实现简易脱机编程器
* K# I" t1 E; B8 K2 ~
# q0 |/ S$ G; L9 l11. 一种从用户代码调用系统存储器中Bootloader 的方法  
$ C0 M5 n7 _6 g& \
# A( c! Z. h( j9 p' m& T12. 利用 USB DFU实现 IAP功能
# a, p% F# y: c% C8 \# _. L7 N- x/ I2 a" ~& \; X
13. STM32 Bootloader中 DFU使用限制
+ x  n' ^3 B2 [: @9 Q+ H) |" w, D, u
14. STM32L011x和STM32L021x启动模式注意事项
  D- L) w9 D. N  ?; X4 a, N9 @+ m' I4 Q
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
4 ^5 R, U+ k5 y- k" o
3 m* V3 C, x' \5 O% W. s16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级
' [2 w$ ~: J! w' \+ H1 |4 e+ h( _! X* `" R7 D4 I+ Z# w* P
17. 如何使用STM32NUCLEO 板来测试串口Bootloader
1 }' u7 P9 ^; k4 X
/ D' O' T8 k; Q- W: }6 [' l. S18. 在STM32L011上通过I2C接口实现IAP
8 @% {+ t% W0 U( k2 h9 h% q) f3 T+ Z5 i3 L* |2 T6 `" u% P
19. 在IAR中实现通过将程序在SRAM中调试的方法% x% a7 U! C0 U0 }6 Z( \; |9 t/ P

7 X9 C# l5 |+ _( J" J+ m20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
- o4 M  w3 M) u0 t: e  d' k: X. A) l7 K: u' S0 v; A
21. USB DFU IAP 例程移植的两个话题
, J  j% d- G  K3 L' j3 x, K& ?& l
; I3 X! v9 D4 G7 r( s22. STM32F769双bank启动
- |6 b" P: M9 C( G1 f
/ J- x: c  }. z23. DFU加载 工具 DfuSeCommand的使用
, H2 M* x" c1 F0 N: @( \4 {" M: T: d. s- u1 ^% W3 X* L3 U( D
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    . W  B" O& q* ~

& A) B8 v; i4 p) s25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
; x1 _1 Q3 p7 c4 e8 f# R4 c% g# U0 f/ E* c
26.STM32 Bootloader异常复位案例(2019.4)% P( S4 Y0 S  E6 |! G
* X/ Q/ C1 d; V8 T( m3 ?& f
四、存储器
* G0 i, c6 Y8 m$ w) L
) }3 g* L9 A( O/ y7 D- F1. 对 Flash操作导致 USARTU接收丢数据9 k; s% Q4 S+ T  `8 D

8 R  C! M, R& I: i; B1 H4 S2. 使用外部 SRAM 导致死机+ B) v8 Y( Z$ g. X. ]4 U9 J) P
; n$ s5 h+ l+ r2 }% Y+ b2 o, [: `5 O
3. SRAM 中的数据丢失$ u" [2 G; e& \  v8 ~

7 V5 u3 W7 Z% J6 s2 ~! j8 W4. 干扰环境下 Flash 数据丢失
) [, g" g& v6 C! @+ g- L- w3 [ . v: I. S( R" B, p" ^
5. 使用 CCM 导致以太网通信失败
& @- A2 P7 |7 a) T8 [- o3 Q" ~ - y% N/ q. v" H, R; l7 n
6. STM32F429使用外扩SDRAM运行程序的方法7 P) [4 O! t+ k
  ?# ~3 d: \' z% [5 N9 S* b8 A
7. 使用STVP实现对STM32L1系列EEPROM预置数据
# h1 }3 F" u1 K4 h5 f! `) u) @1 I * k. f0 b9 U$ ]. O' V
8. FreeRTOS RAM使用情况及优化方法
' U  {, D$ h- k6 y+ B" L& U2 p
: w$ m$ n; r. n; {3 @5 k7 Z* ]9. 在IAR 6.5下如何将数据存放至flash中
2 v" k3 @. _1 x9 W3 A, B4 _) r( M/ A5 A5 }* e# e; S8 j
10. IAR下如何让程序在RAM中运行
4 n/ V' b4 Y9 O9 j* z8 B
! o% U' g# J. {3 l* h, C3 y11. RAM上电后初始值问题
. ]  _5 d" y4 w
* `7 ?# e# ?3 X6 v) @6 @12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计' S% _5 I6 b  q
  T$ T: g) S/ v# K* o# s* R( }
13. LwIP内存配置+ N1 _, K- R$ x

# H8 \9 x, M8 j! Q4 W. T& f14. STM32F2高低温死机问题
8 U0 H) ~, Z' q0 g7 R2 l
  a! f6 s( v, q/ \. Y$ |5 k8 o% S15. 使用STM32F427的CCM RAM时遇到的问题5 k& C, q% Q1 \" [; T9 b
* B; x+ y- p  u: `- ?1 ?
16. 利用QuadSPI外扩串行NOR Flash的实现  
/ V& ?4 I: ]4 y+ |. N' N' v  a
1 d' k0 I2 x2 O* X: J! c% H7 A17. STM32擦除内部FLASH时间过长导致IWDG复位     
: K" w1 L* R9 |. K- ?+ g( Y, ]! q. N; N* m2 `( I
" Q( H' {7 L! S: j- N2 J. ~
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
* l) V) S' {6 e! k7 J! U
$ [6 A3 k" }6 [五、模拟外设! C, r! H; u5 l

/ ~& f  Z2 f1 w1. ADC对小信号的转换结果为零0 }1 o' H7 z: P7 x2 Y3 k% l
2 R; L$ k1 n# F% O( ]
2. ADC键盘读不准! ?" r$ p* C+ Q- D3 p  j# `5 d8 E% }

/ ~  o) R! ^4 [* f3. 扫描模式下 ADC 发生通道间串扰
. }3 X1 m5 R3 N5 L   K+ f  z; T- `0 r' E* m9 P+ p( H
4. DAC无法输出0V的问题分析解决0 X  K8 S: Y; y

8 V0 V8 H7 p: L. y5 Y$ ]5. DAC无法输出满量程电压的分析解决
7 V' z8 ^8 V$ c2 Y 9 z  M) W" `, c, W
6. STM32F30x 的ADC 采样的傅立叶变换
$ x; h& y+ C1 C. A" S  B: w
+ a' [* v1 v7 k& A5 {5 e3 _7. STM32 F1系列 DAC的示例详解+ R& S. ]! ^7 U3 W% W  w
) ?' u, k3 R. g( ]' }
8. ADC 连续模式采样浮空引脚问题  Y3 v. r$ t, O9 S

9 z7 Y8 b! M% j& j, y8 A# C9. PWM硬件间隔触发ADC
5 z8 M0 |3 d' [% ?9 I/ o. N
: x8 t0 q  w$ f1 t/ {  r& g# p10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC0 M+ f$ R: I3 H0 e% D1 I
; `6 P+ G# ~2 W; j+ I& k* y* e: r
11. STM32L4 系列中ADC 通道配置上的区别0 k* K, V9 ]7 [/ p6 s, K! e

8 ^. c+ z4 l* A8 \12. STM32 ADC模拟看门狗及其应用
, @6 |# Z2 e. R  y4 j! \" Q/ p  j" B4 s0 g; N" L0 X; d( j. ~
13. STM32L053 comp2 比较电压无效问题
# E8 Y7 t' ]' \/ {
( X* N% ^6 L6 ?( }1 V  r; `! N: i3 o14. 运算放大器OPAMP在STM32L4上的应用
- I# N8 y3 n+ u) X# Y
( i& [4 ]% R: v, S15. STM32 OTA例程之ESP8266使用
1 C" D: n* M8 K& S$ N
, u- D* n3 K! `' n. Q* t16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)% a) t2 p" Q3 B; Y/ J& n: b

+ j: y; A  }0 O" m- P: a& r六、计数外设! ^9 [- }& }7 H( M" }

$ |- L9 _1 X7 [0 @, v' W3 ^5 p1. Watch Dog 失效
% I: A5 K8 P, W: ?$ g5 x
) D0 o/ r; L1 k2. RTC计秒不均匀
: g: @2 i$ t: a! p: W* h) t
! N  |$ k3 K$ z/ N2 T, f3. 软件启动模式导致 IWatchDog 失效
9 e+ N  }$ B9 Y7 W2 w! V" e# v7 w 7 W4 {5 x5 U- p' T: b; T
4. STM32F030R8 定时器移植问题: D6 W; ]' F# O$ P+ z- R

  k/ D; }. e+ [1 |5. STM32F0使用RTC Tamper的几个注意事项) \9 U5 v; m7 F
$ T, y2 }) D1 Y' N6 |
6. STM32L053可控PWM脉冲方法之DMA. {3 u/ L' L/ E# X% O' }2 {1 j

& e$ v# d- L! t" N9 ^0 ^! h% j7. CounterMode,OCMode与OCPolarity关系
( W$ C8 h: B. W+ v) @* v! l% w
; X7 _1 z9 R& Y8. STM32L053可控PWM脉冲方法之DMA& e% h% c9 Y& @0 W2 K
, s& `" c" L- _# m! I
9. STM32F1通用定时器示例详解—TimeBase5 T! B# E4 y- t6 z8 c
+ R. u  {9 S7 e% ~: W
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals! r, I% w- q7 t; x% w7 M
" ~* Z* \" q4 T+ b, D7 I7 u: F" F
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
- }3 r7 L5 T4 ?3 {2 v2 X" U, J, z4 M8 q
12. HRTIMER的多种Fault事件联动机制
! S$ t* _1 D, t$ {5 ]2 p
1 m4 _6 ?  _3 Q" v13. STM32通用定时器 示例详解 —One Pulse& g7 k/ x: f5 b1 k7 e  _

8 @% Z; s6 O( Q# G4 w3 ], |, U14. 如何用LSE校准STM32F4内部RC振荡器
! I0 g! P& D  ]7 Z: O% D* `$ J; E2 q( Z
15. 一种使用Timer测试HSI实际值的方法
& o& ~' l# {7 D$ t& X9 ~9 c& }
16. FreeRTOS定时器精度研究
" X6 j/ u( x2 J; a( I
( C9 q* m  {  y. o" T& S17. HRTIMER产生多相相移信号
0 }- |: f5 F, p2 Z- Z5 Y" V7 S! Z: E' O8 L' @0 i; ]
18. 窗口看门狗启动时异常复位问题
$ Y3 o! ?$ c: D- ]5 N
: n6 T! r2 l$ X: d% }5 R* n) l19. PWM硬件间隔触发ADC2 D8 W/ |( g: |5 C
; Z1 |" W, {+ p0 V. W" }  c0 e1 v
20. STM32F030低温下RTC不工作
+ [- G+ z4 }3 n" Y) J! k7 K7 \! W. m* y8 c' l/ L/ v) f1 P. s# s" n7 L
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
! y& ]. S- E$ O5 L3 m7 _
- B# l4 B- W6 j. |. ]. o9 u22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
! V' X# [, C- _8 @
/ r( n& Z6 J1 g7 F, L3 N23. 基于STM32定时器实现定制波形的示例 (2019·7·25) . k6 l  p. j+ {
$ S% ^: `) ]. W6 C- @
24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)" R9 |; R  s2 ?# }6 N8 f% g8 Z
% }: Z7 [; @. K6 ^
25.MC SDK 5.x 中增加位置环 (2020.3.31); u) T* v% e+ J' B2 E; h
6 q/ {' e9 c4 Q" _4 G0 v: q' N
26.STM32高精度定时器PWM输出话题 (2020.4.29)
" z* W3 Y! s9 C/ G0 `! u4 R* ?/ t, X7 j6 j9 _+ c5 l

( S' ^. C4 l' K6 o; z& n) _1 t, s27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)
# H8 f( q# X6 `0 n
, Y2 I( Z7 K: C; s0 b
七、内核7 K3 \% j. q8 U. B9 F+ E
- M, @- e# t) ~' w* Y
1. 使用指针函数产生Hard Faul
7 r% \/ V/ m, J' W4 T  B! }0 m + L5 M* o$ R* A% T: p
2. 调试器不能通过JTAG连接器件
. p# e3 t: W0 ~; P: k- }3 x* j4 s ' c  ?8 N" u) ?. _" j
3. 鬼魅一样的Hard Fault
" u* [8 W" k9 \5 ^! Z# I
. u* Z6 t) _8 \" Z( p, p: W9 @4. 进入了已屏蔽的中断[0 O8 O4 J2 N- _1 r3 a. K
) X& _5 p, I' |& [9 u  b# {& ]
5. 浮点 DSP 运算效率不高
# r5 l; y% d- R% V( N  F; W
2 c  ~' O; T4 L2 `2 Q# T+ z6. STM32上RTOS的中断管理
: n! J' O6 ^7 i" U8 ^
; n$ C! ~6 M5 y" x( a. N7. STM32F7与STM32F4的复位序列比较
6 t% I: v+ W  ?1 z  z& A0 f5 ?& u+ }9 t
8. STM32F30x 的ADC 采样的傅立叶变换" t, K4 b, E0 A7 |) |% J

0 D7 o2 S, ?( \: r/ V  x+ o9. EXTI重复配置两次导致误触发中断的问题& f. `/ z" n2 U1 p, W2 a9 @9 q
6 Q5 R, L% t( B3 x+ i
10. STM32F3xx/STM32F4xx使用浮点开方指令
# ?' q, U* G* a$ H1 k% p- e6 v' J. C4 @- I
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响6 a. G# T- X  q( N2 p5 b( h- e
0 A9 ]. C7 N  O& m, c7 o% y7 _  i
12. STM32F7 MPU Cache浅析  
8 Z2 k6 f0 B/ _& n3 O1 i1 ?% V7 J
2 h4 W5 z2 L. O% e1 ~3 i0 V' d13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)" u1 ^- y* \4 n' w
4 S7 P1 h8 o6 D0 x
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
9 f6 d& l) J5 A# c" M7 n' i
; s, Z/ ], C: x: a. v  T

0 {- f  M& H" ~. T4 C# }) d# A八、系统外设
0 h4 A* U' a: M6 c! ?# j9 ~ 0 }/ s5 v$ m8 h0 D# A+ q! r
1. PCB 漏电引起 LSE 停振
  U( M; A+ b* K! S( a9 j
* Q2 v4 R% R9 p! R, {7 d, l  ]2. 时钟失效后CPU还会正常运行
& \( f/ _. T" z% _4 x
5 Z) H$ f4 n$ P/ |3. STM32F2中DMA的FIFO模式
; d  G& N2 k: e6 B1 j, x: X4 T6 |* P4 O( y
4. STM32L053的GPIO翻转速度的测试4 N9 j" j* }, f, |9 y

: U- U5 q2 t. B5. STM32F4xx PCROP应用
4 E/ g; U& p- e, O2 G
! V7 k. Q3 H, Y% a. Q6. STM32L053的GPIO翻转速度的测试
- J( y3 S) @7 s+ \5 Y9 w& \
2 a+ k% I. M5 s5 p6 u8 W" M. B7. 如何在IAR中配置CRC参数$ o, N; \' i' k5 }& j

2 i5 w6 Y7 R2 I! G0 w3 i" F8. PCROP区域函数无法被调用的问题与解决
( T- x6 K* c' ^4 t& x* v/ C
' s1 L  P( E9 D8 q7 b# A9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题9 ]' [' H- C% R
/ v3 w( y2 [' A2 R* t
10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计. o/ a6 @% P5 E4 j
7 N. [1 M! w2 B6 G6 o7 p3 _9 J
11. 如何用LSE校准STM32F4内部RC振荡器
6 o5 \$ `% ]* z! I7 F' ?  [
: x9 C1 I5 \0 Z0 E12. EXTI重复配置两次导致误触发中断的问题  9 @) [+ c* h" r  A
# z- V6 D* A4 m& c# f* R
13. 时钟安全系统的应用(LES篇)  
4 S7 m; d# Y3 p/ N0 S9 p

7 K. {/ v+ h1 Y" Q
14. 利用DFSDM开发PDM麦克风应用介绍  
" Q8 D* D3 ]3 A! C2 N9 M! ]8 F4 _

7 ~& b4 L4 ]2 I) g8 e15. STM32H7的FMC外设在DCACHE使能时运行不正常 1 W# o& e8 q: D: W% A( ^
' \. G# ]7 i$ w# U' B3 E9 ^+ r
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
3 k  |1 f' a# T+ a, r' Y
4 i4 ?3 g4 R( s3 J! \
1 T! U! X2 Q4 V1 g9 E) j+ T九、标签和收发器. [1 N* x  W7 `7 B4 Z
2 [4 F, Z! }1 u2 d
1. CR95HF的初始化步骤
+ u4 G! {. L0 W3 E9 B/ H   t. u. s0 _9 [8 ~- }& N- b- X% ~

" V6 W# P$ L7 T6 g
& f3 {8 }* ~. P( e" z: ^十、生态系统
/ @/ B1 y; T/ ]; ` ' M: z% |3 @, I1 J9 v
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
( r+ q8 f0 Y2 [* Y2 U , e) b6 s  X1 v" r# A
2. MDK Logic Analyzer 功能在STM32中的实现问题5 C5 }0 D8 U  e0 S( u0 D: e# s. r
9 I9 _# r! j( ]9 ?4 {0 B
3. 在IAR6.5下如何将数据存放至flast中
! o& j; C. b- S
- ?/ k5 @, ?% c4. FatSL移植笔记
& \  X2 F' [5 w( K
# O. d3 s3 W% N& O* V# |0 L5. Keil中使用STM32F4xx硬件浮点单元
' j, F/ v# U8 T
: Y; d% F; {7 X  d4 ~6. 如何生成库文件(MDK和IAR)
" f, `1 u0 E; S
# z0 q1 `9 B2 \+ d6 f+ s8 [/ t7. Nand Flash文件系统解决方案
2 u5 k# E; c- C5 A7 t; @9 _2 i % L, @3 [9 J1 w2 V7 i
8. STVD在调试时弹出“Cannot access configuration database”的解决2 V: \, X/ z1 b- L

/ s1 f0 {2 q3 K' n) |) n6 C0 E9. RTOS低功耗特性的设计原理和实现* _* Q2 c6 ]) q4 n0 z4 p
. s  a8 ^( }9 E  _! ?) L
10. IAR下使用J-Trace进行指令跟踪1 N. w1 Q+ b$ x  Z# n; U
6 R0 ^1 {; p+ u* E# d( `
11. STM32上RTOS的中断管理
7 N, D6 Y# {7 U; K+ ~* |
( V4 Q! D" H" Z  X3 e6 ^* g12. IAR下如何让程序在RAM中运行0 T  b# z7 y" j
! K$ n+ G) n9 N9 I
13. 如何在IAR中配置CRC参数! B5 j9 }. s8 T
( h/ r* e. W2 Q
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
3 X; t& m7 [, D$ c5 ]4 h' h; v' U, a' i' l
15. 使用mbed进行STM32开发及STM32F0的时钟问题
$ C& H5 Q3 f! l2 q6 S7 _2 d! M8 G) G( t; w
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
; D" a6 @/ c/ T/ \( n$ U! L' P ; H+ s5 Y7 b- \. O* H1 h9 ^
17. 多任务系统中的不可重函数使用注意事项9 F: z6 E/ D% }/ e% ?+ S

0 A1 a+ ?6 x; v18. STM32 utility的hot plug功能+ i( I3 P5 S7 o

* ?5 _) i2 M. k$ \3 _" }& Y9 d19. 如何将CoreMark程序移植到STM32上
9 i% W# [; [/ P! w: i+ t: G, [( e; Z. C3 x2 R
20. FreeRTOS定时器精度研究
7 \5 |+ W- _7 J1 c8 ~# }. m4 \3 T: J6 _! S3 Z* \! S
21. 如何使用Eclipse和GCC搭建STM32环境( D- N6 R$ v1 K: u% \
$ V9 a7 T0 B- @1 V3 s+ b+ U
22. 如何建立一个基于GIT的STM32库  L& V. q4 I' j+ y' u( t4 Y( v

* U  I! R, T+ I) R& f# Z; L23. 从零开始使用CubeMX创建以太网工程8 E2 e0 M4 w2 x/ Y
2 p1 h$ W2 W2 J& i
24.从STM32Cube库向标准外设库移植FatFs文件系统
: v0 t1 a1 B5 g; t6 u9 }' k* [! i! Q5 ~
25. 基于 STemWin的屏幕旋转, P* l; ~% p/ [5 \* W. e) _+ ^

& v  d4 @" F! d; ~, q26. 编译软件 Hex文件烧写 ' @! Q  Q& A/ t# v3 z* P$ r. L
! J/ h6 S. r7 N9 x1 t, l
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
0 H/ _# r$ s8 }5 n  R4 M. P! g" @3 y+ O1 `8 D- G5 t+ z0 y7 ?
28. USB CDC类入门培训% c% }/ h6 ?% V9 A2 `0 D
& }6 u; _; ~, s" l
29. USB DFU培训 * A7 d) h, H2 W3 b: [  a% T
' U/ I! O' K0 `7 H- j2 ]
30. 用于量产烧录的拼接Bin文件操作/ t# X# R4 }% }. B" A. }

: n" b( Z; g. A5 _  i  a31. STM32免费开发环境该用谁0 j" b& h+ a1 I* I& [# I+ v2 J

7 {( Z( D; R% A% K: {32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新); H; L5 M9 N5 C: f% B. t! @. [( u
- _+ z6 v) @; I9 Q
33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)# L; v' d$ [! G" N* @& `
) C# j6 v# e6 X) I8 ]: h% a3 N: Z1 V6 u
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  8 L8 `0 g; E/ v3 E* {3 b
: s: a8 g7 X, M% r! k/ ]8 |
35. STM32 FOTA 例程之 cJSON使用   
; @) a2 d6 P1 s! r9 N1 \& T0 C. `  a' x2 z4 o+ U# ]- d# I% M
36. STM32F769DK 云端固件升级例程使用说明 , N, J7 z3 L. d  i
9 R) o: k& E6 ]& ^
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
8 H) m6 z( s5 m5 l! D- l2 S, B6 ]& X
38. 基于 STM32 的阿里云物联网平台方案
. \  q, k, m' z8 q, I/ C7 H
* M7 ~% |) a$ {3 P8 f39.AliOS 任务上下文切换原理分析  : o" f0 k- Z" s! j! _/ n5 \& ]7 F
! t* j0 K5 m. ^: k; R1 m$ n2 ^
40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  8 g4 D1 @( s7 e! L$ D3 H
2 v/ A8 y* a0 N3 C0 M! w# U; e, M9 q
41. STM32F769DK 云端固件升级例程软件开发文档  
# y* Q8 {9 V6 W0 y. {. j; W

9 t# ]' \; ]# _: I( j42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)( b9 h% r, B# Z% R! y0 z5 H# t) a

# d, ]4 B% q* [- Y43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)1 g. X! Y' l4 F8 |6 m! i
" X6 R! n" E4 o6 ?! x
44.零基础快速入手STM32MP1 (2019.9.19)
( ?' v/ {* P2 ?
$ H, B+ Z- i3 e4 R* }8 o) h# |45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)
4 |, W7 ]* `6 J$ z$ d
/ x' _# F' M* F2 {十一、调试
2 l- C: h6 {: ^' d9 P& a( s0 v' Y
) X( u: X* O' g# K5 m4 \6 H6 T1. 关于STM8S SWIM Error[30006]的分析
! R, Y$ L! c) |( E( O# B # M2 c0 a+ R. t* F* n
2. STVD在调试时弹出“Cannot access configuration database”的解决$ X9 {% \5 M2 e/ ~3 m

2 f6 I$ Y6 Y0 @) \7 m: r5 H3. IAR下使用J-Trace进行指令跟踪
4 i0 M) C( \4 E# |
' y5 y$ r* u4 D3 b0 R4. 菊花链 JTAG STM32
9 q7 M* H- k& u% \4 m! m. g. J, M7 \+ Q4 |
5. STM32F411CEUx 能下载程序但不能执行- N" L1 f) }9 U5 D: V

, g. D, w; e* Q1 w- l6. STM32F103C8T6 程序上电跑飞/ c$ O0 q; [6 C; U6 b0 a3 X0 _4 E$ X

. r6 i6 Y& b. O3 p( B7. 使用STM32 ST-LINK Utility 设置读保护后不能运行  I- F! h3 F( [4 ?* F, O
- m7 |3 t& M3 Y( r' v
8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
/ `; M" Z6 I, ^
& _  v% p4 u9 t# ]- T1 O8 p9. SWIM协议的GPIO口模拟1 {1 {) b& A+ b, ?2 e

$ Y/ n7 M* {6 F10. STM32F091空片使用ST-LINK烧写后复位不能运行用4 Y, N! D$ _6 j9 N

8 F% B- R$ q# B) ^" H11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
) C/ I) t& S; ~, x( {7 b% }% j
! i3 H( Z4 ?4 ~: C% v! {12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)
8 I9 _! H: e% o6 b) L  }% c# q3 Y
; _: Y% c7 L1 c6 Q, N- M' ?13. X_Cube_ClassB代码移植 (2019.12.24); h- Q( ]* G6 P( h( e/ l
) G* l+ g( o5 ?1 m% I

, z% M; S1 q' e2 s+ U  v3 {14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
- s- _- p$ t7 C& `1 g% @9 p5 o! l% u1 j3 ~: i: p! }
十二、人机调试# Z& \# D7 ^, O7 i% o# M$ O+ z

; Y0 a7 E7 \; }1. 一步步使用STemWin在STM32上开发一个简单的应用; x* |% B- J: R: V. j
+ x6 R/ w' M& c0 o5 k6 k- p
2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
8 T. m) @3 E: V3 c: ^8 y
5 G+ M2 ~. y$ O9 J4 \. }8 o3. GUI方案中ALPHA通道处理介绍
$ ?" w1 B0 v1 }/ K- t5 y& E& L
$ T/ W5 K9 K+ W5 c: u  v( B. z- U" p4. 基于FMC8080接口8位LCD的STemWin的移植
1 i9 @9 \8 P- v+ O/ H/ P5 H  i* O* a3 ?- k
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)8 W- G& |0 T2 P5 h  s
( q. g9 u! w; D% Y5 C' o# A7 d
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)4 }- N1 M1 v( K( ?+ E2 \

6 V2 ]) z! C; N0 Q4 ~7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)  R$ Z# C2 P. {. c$ r

) u5 v- q6 L# B2 v8、STM32L5中如何关闭trustzone (2020.5.12)8 m! r; L- a- n! i' k& D

+ Y4 k  u5 y- C2 c# J十三、马达  \* D  @( q3 J9 S4 `+ ^

- z% m9 L6 G7 I& h
1. 电机控制同步电角度测试说明
4 P2 H& v9 E4 j+ Z: ?$ v. I6 S: s  e$ |% \. s* m1 X) B
, _5 w& @$ n; A$ b* [; `
; @8 {" }2 L7 }3 V
十四、安全* m5 J- J* @$ y
. h) m" C8 g( s) N, r" B8 d1 s6 M
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)8 K% w: ~! v% B: c% H* [. n1 z

) X. r9 U! @5 {: H5 B! a: x' |: N' N8 M6 ~' r
十五、其他6 O8 j( z- o  q; c4 z* M2 P

, ^; u  |5 f9 L) X* q2 B1. 跳不出的 while 循环& E4 P3 b" w# a
# [5 w) x) y1 s: P, c) R
2. 外部IC连接NRST导致MCU内部复位信号失效的问题
/ O9 H  l$ F  @6 c 6 j3 `& u/ R5 z
3. 潮湿环境下不工作" U! \! W. r. N

: W4 L7 o/ F8 K0 X9 Q5 s. k# M2 r4. PCB 漏电引起 LSE 停振0 K; i& c% D% M3 A3 C- l* u
7 ~7 ^4 |2 W, y1 L# H( s: ?
5. STM8L152 IDD电流测量
+ q- F. S3 k4 X' g( {) W- f* I
# ^  L+ O- K$ U* Z6. 使用STM32实现锂电池充电器4 G8 X% d, _) f; o! s; T

; O3 S& X& p. n- `9 f$ O( e7. STM32_STM8硬件平台基本检查7 t) b$ A/ d4 A. w
; ~, x$ e7 Y2 I9 C5 U" `
8. 验证STM32F401在STOP模式下的电流5 L5 F3 V! D- J* W2 k

% R1 a1 @, I1 |" M9. P-NUCLEO-IHM001 电机开发板串口调试指南  ^' J! \( r9 u

# j$ _7 E5 r5 V. B10. 一种计算CPU使用率的方法及其实现原理# `+ N5 S! H0 c' x% I- r% ^5 o4 e

" ~/ v# [8 S* P3 O0 O/ q; |) k* G11. STM32 RTC不更新原因分析
- L. ]( y" @" n! _! U
% D0 A, ]  i# z0 F& d) n/ q12. 关于ST库函数的代码性能对比
- y7 f' m& ?# h7 }
5 y/ l# \3 q" P/ B% ]13. 在IAR中实现通过将程序在SRAM中调试的方法. ^, h3 Q( |! G& T6 }
) u2 V& ~! G5 D2 @4 f; ~. R4 a
14. M95xxx EEPROM写保护配置
; U" r: N: v# \' g) H$ {8 S, c, {8 B: l
15. 4SRxx的GPO的属性
% Z' `5 p. d. ?% ^
& ]: m2 |: e" Q16. CR95HF的初始化步骤 6 }: P" y  T3 @2 I/ N; _, N
( [+ |% {1 }: q; \4 h
17. 电机控制同步电角度测试说明  " V1 h) A& @2 v
, v' X& T# s) n, `0 Y
18. STM32+BLE通过 Notification与 Android应用程序通信的例程! u# F( k8 |9 x
5 u8 M4 B/ |2 e  X) f  \
19. M95xxx EEPROM介绍
9 ~4 |: g( u3 H- W' p8 u% W
& v( j1 v6 E/ i3 X& u20. STM32 DFSDM测量温度应用 9 z0 y, E3 I8 _/ h1 X* k

+ M3 @. d8 ^% A1 n5 W$ J# C% g21.代码实现PCROP清除
- a- I6 _4 [$ i' \$ T& T) M% }0 k+ R! D0 f1 `# ?  E1 \% w
22. 理解与应用MPU的特权与用户模式4 |) Q, c: K7 ^" s0 F  }& O' R
- @2 T  _4 A0 t0 O# ^, E, D
23. 用于电机控制单电阻采样PWM变形信号产生
( g( `) F5 ?# J2 O1 t
# u/ k! v: w3 T+ H24. STM32L低功耗模式唤醒时间测量7 M9 Z5 m: S6 S# h. `% m
5 u# R( d6 w8 D$ b
25. X_CUBE_SPN7程序电机启动抖动问题& t/ ]: I! [$ u0 B' O3 E! g% D7 K
# D, z; D+ R  E# A2 N5 J
26. 发现STM32防火墙的安全配置
- l; L- \3 S/ `) S! |
/ r. A3 }/ e9 Q- P  s1 P' J% V27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改8 e& }, f! n* I$ ^+ W

+ K3 s" Y, m* F3 ]0 l28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)9 f% _$ F' E7 I# I  B6 j
' W9 ^& r% w# |0 W! B
温馨提示:
( S; G% L: i. m  E7 w$ \. h/ J6 P
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
7 V7 J8 r9 X0 U* d2 V' t% w7 M
7 H2 M4 @- K# Z$ g
& M$ [" C- _+ ?  N

( a) F7 e- @2 g& h$ F1 W: N2 ~
6 a* y) k) t. k( G& S8 K  s9 G' w0 f' [

" n; |' ?2 s3 S9 |& C% m' _) Z9 I6 _
5 N# t( g8 r3 b- z# F" y9 Q
: l/ ]8 z; \' l, T9 z. Y& }) x7 O
4 w' v9 `8 J3 m0 g: b6 |
2 i9 ?( ?; w* B, a: |/ p% g, y

评分

参与人数 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
好详细,多谢分享" P' t" T" R# B1 \
5768340 回答时间:2018-1-13 14:42:54
HI  ) E- l/ W, ^' ]. y  Q; T
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
+ t7 [7 z; Y, |   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    7 Z+ a0 s$ u0 _4 {
  2. 函数名称:Cdfinger_Bspspi_init: R0 u$ k; r0 }4 d, w  c4 G8 j4 j
  3. 函数作用:spi初始化函数& @5 x2 D; x3 s! V  Y( @4 b
  4. 备注:
    ' J* h& b! }/ l
  5. ******************************************/
    ; k( }" s7 e' k
  6. void Cdfinger_Bspspi_init(void)1 N, _4 j: n2 `5 q. b2 O% W
  7. {- k0 |; k4 |, k. r
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    7 C, [. }+ [' n  T6 e, Z
  9.         SPI_InitTypeDef  SPI_InitStructure;3 u6 h1 l3 ^( N/ ?% ?. \: A/ I
  10.         DMA_InitTypeDef  DMA_InitStructure;
    / g2 K& y4 d, S- p8 v. B" q2 s( S
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    " c3 o; P' u- W2 z: V6 G8 {
  12.   2 v8 E8 I/ M' g9 |. L* t
  13.         int ii =0;( Z5 [7 A" i2 j9 X: j+ p
  14.         0 `) F6 }; S' A' _( Z8 L/ J
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);* U9 P' H1 e" q' y, L$ V& d
  16.         /*!< Enable SPI2 clocks */
    , G& a, ^+ `( f+ y" |& Q8 W3 I$ Y
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);; F% _' }  \' v/ X! d5 z
  18.         /*!< Enable GPIO clocks */
    2 Q1 U. C$ F! Y% D3 @) P
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);- M' F# |9 F2 s& _& R; @
  20.         /*!< Connect SPI pins to AF5 */5 u  f1 x0 n$ ^5 m% y
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);* U+ g& d5 P( U( I% s) \! ^
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    9 @5 @" j- |& J
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);* Y0 v0 x# w# Q& q6 l$ a- U

  24. 2 n' C6 |  Q' G1 w3 S* v
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    $ v/ l6 f1 d$ P$ Y; S& o+ M
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. o; L, M8 G, D4 n" v8 g) v. {
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;7 P0 r, |* ]3 l4 P5 o3 X
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    3 h, m" R. G! @" ]6 U
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;4 p& X5 E. y3 n$ |+ u- ^+ L
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);6 l/ }9 R; G) V6 P
  31. # j: M0 E" M" ?3 l# k: f
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;& d8 P2 K+ i1 F: j
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;- ?/ k% f: T. c% f: }
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    / p$ Y$ p  \2 I% o5 H3 i+ H% ]
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. z+ K4 s% d5 U; B8 d" [
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;: l. ~' ]8 [' Y2 v+ L7 F0 ^
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    4 l& D( O8 w, c! C7 S
  38.         Cdfinger_BspCs_HIGH();
    & ]  E) h' r" q
  39.         //Cdfinger_Bspdelay_ms(1);
    7 l; k& D2 d  r" \3 z- Y0 v/ J
  40.   //Cdfinger_BspCs_LOW();
    . g' ~8 c; M6 w0 v
  41.         SPI_Cmd(SPI2,DISABLE);% ]2 _5 J! Y' W/ J9 I. W
  42.         SPI_DeInit(SPI2);8 y) G! w* ]' m! K$ X( \" b9 Z8 {
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;% V' ~3 m9 M! U$ O! W; Q. x
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    3 U; V3 n5 B2 w7 I0 q6 Z
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
      }, C) T( q) |# h1 l5 [
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    % m9 f9 u; f/ z" J% z
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;  X7 M! y2 N2 k3 I" N# _' p$ J; \
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    9 R2 F3 F! O( A3 }# k
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    4 Z0 U6 X( `9 c1 ?. ?
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;  v0 ^0 q( v8 r' |. U; ]* _1 e) W
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    / X' O+ e1 ^- d. q" H1 E1 b
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    % b/ I3 c1 p: ]! F! x, U
  53. + W3 L) W. e- `7 z5 \/ Z0 e! J
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);4 E& t9 d, g0 k# ^) H
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    5 \+ M2 b7 ~% q7 Q; d3 a4 V% ?/ S
  56.         DMA_DeInit(DMA1_Stream4);) T6 B1 f- ~6 W; h- i- r. m
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    # W* i! c" U( R
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    / L9 [/ b' z- U2 }( x  O, b' p
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    / s: O. l( U9 k" y/ l
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    + b' f% T* D/ R8 X
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;& Q9 }1 w) J) T  y# x
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    $ \, E  a# d- C  n. y' w* c) k
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;* u0 S) ~/ g, \7 L
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    9 w9 i: I2 G  K+ Y* n, s
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    % I* h! t/ I: e6 B% k" r* I
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;( M% m5 S6 N3 |& k3 Z+ A+ Z
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;0 o% @7 H1 o% Q: b) [
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;0 N5 }- M4 p' T9 G. Y( _
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    1 b2 ^* w% b2 P6 J  }4 J1 _
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    ' |8 ^8 @4 f- n! @
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;0 L  n" H5 r, k' h2 g
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);& E' s; X& C5 }/ m* t5 V
  73.   0 x8 d  ~7 ]& k7 T% Z: Y+ J
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    7 F: z& K8 B' y$ |7 ?: V2 ~
  75.         DMA_DeInit(DMA1_Stream3);
    1 ~" O" _4 J6 ?$ C8 r& t4 ^3 \$ a
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;3 }0 R5 S4 Y" R4 u' {, a5 A
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);* t/ g4 X9 ~- U; b( E7 ?7 x
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    3 y. N7 h  i# Z1 l! C( B1 P
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    1 C3 h2 y8 Z) f% H7 I; v" U6 P
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;" K: n7 q. d) B
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  I6 S5 g$ V# U
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;7 Y! c# M1 W; v! M) [7 W! |, f
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    - f( s& n* e6 K6 U
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    5 p/ z0 F* `9 @
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;! u8 N3 u% A7 B$ m$ x2 p# `( Z
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    ( [1 q7 c1 l3 T4 L5 [4 c3 G
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    8 v3 h( x1 p3 Y" q; _2 a/ C
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    9 \; u; @, i. ?8 I
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    ! h1 c" j2 \. c6 \1 h1 d* o
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    1 h0 f! y1 p; J! `" K, _, w( n
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    3 ~+ _% j3 ~% p' F* W0 g
  92.         //Cdfinger_BspCs_HIGH();. c- M' R0 [$ `% K
  93.         , d# _8 C* v( l/ Y$ x

  94. ) ~: S9 a! \, P& q1 G5 z1 x$ h
  95. ; v! X3 E, M& D9 z7 k+ b
  96.         //发送中断
    5 ^" W& ]2 m) |5 A( S
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/ B4 m+ a! x- ^1 \( n
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     " o6 H( g6 t& c2 Q" g
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;+ ?( n8 }' m1 i! v
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;2 m( O1 c1 v2 o- Z
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    9 B8 c, v. R4 k/ b
  102.         NVIC_Init(&NVIC_InitStructure);' C; G9 V: @3 v- v$ X) \! ?
  103.        
    4 W- {, b9 B$ M; b
  104.         //接收中断/ e. K2 X' f- \% H' p3 D
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    ) @9 T7 n" R# \# c2 A3 Z" ]$ |
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    # R, @5 l5 T7 ~0 ]$ K# J! B$ ?2 Q
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;4 ~5 U9 s0 f2 e9 m- C9 Y! U
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;/ c$ a% k4 q: ?, m" U; _
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    " z2 u; e7 \9 }
  110.         NVIC_Init(&NVIC_InitStructure);
    ' L$ H3 b' |1 f* b# K% E  w0 ]
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    5 |) F6 f6 o) `& m% l6 X
  112.         SPI_Cmd(SPI2, ENABLE);- w9 m" m! k/ p! A3 Z5 z/ A
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    * s+ j* k6 z! Q) w0 _; n
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    * D. F  D3 g3 `0 J+ c: t2 x% p2 S1 k
  115. & z8 T1 c, R, ~3 y. r
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
      [% F- f' b" q) Y3 Y
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);4 a2 M# G. U5 E) b' F- W6 ~* u
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    4 {% ?% P8 v* S  t

  119. & h+ w) y. J6 P6 j+ O
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++); _2 {0 ~, e4 E( N
  121.         {/ q. ~' j7 T9 ^! C
  122.           if(ii%8==0)
    $ l/ e4 @3 Q4 g1 u8 w
  123.                 {
    ! I9 u+ R( q* N  n  d1 |
  124.                                 printf("\r\n");) k, H1 t) a% _  i  \0 j
  125.                 }  ^) \4 l0 u# _
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);: j; r  c* S  {/ B& ^; a0 `! ?
  127.         }
    7 p  r/ |. S, D+ o: @: _
  128.         printf("111\r\n");
    ) S2 e$ h0 a0 {! o% O' Q  \0 G
  129. }
    , C, D2 _( r! F9 J. V: G
  130. % W+ t0 E  Q5 k  Q! `& g1 m: o
  131. - t5 }) o9 V/ |  Q& K, L& t1 T9 M
  132. void DMA1_Stream4_IRQHandler(void)! r) n1 P/ s! H5 n: [0 ?/ c9 k
  133. {! u* L* ~- ]/ T, c
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)4 p" r. w5 D9 Z+ Y: V/ t; t
  135.   {; D/ o& I7 u% b/ F4 p
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));- U, T5 X  S5 I- }- d
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    ' h( Y5 S0 L! l# Y) r" t
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    0 V3 u. t. _. t5 T3 L; o
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);- V! V) ^1 o$ G9 R
  140.   }/ F: u/ ~7 v; q; @% g- h! M
  141. }4 q  E  Q! J$ w, ]2 T* o
  142. ( D' b: ~8 D1 f8 n, O3 t
  143. void DMA1_Stream3_IRQHandler(void)  r* m3 }) \/ N5 P. j2 x1 y
  144. {3 X9 m1 d$ H2 R, w! y( ?
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)8 ~) u% v" [7 J/ @/ I
  146.   {* H3 }6 f$ @: L7 c
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));7 P1 ]: J9 Y& m5 p  X6 @) R
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);0 M7 F/ U7 S9 C' |2 Q0 K3 d
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    4 o6 B& y. M4 e9 S1 g0 E
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);1 ~; y7 ?" {5 h4 |9 L! u8 T
  151.   }) q3 _5 S6 [' d' R3 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的波特率是不是必须为相同的,才能正确通信0 r+ \: h7 s; `6 |/ J
以下是全部代码:: f6 a% t0 l, Z* E
#include&quot;stm32F4xx.h&quot;
. _0 A" Q) q4 O/ x. Rvoid RCC_Configuration(void);
: j) U1 ?1 L. k' U9 [0 z5 r! {void GPIO_Configuration(void);2 Y/ L4 P2 z4 e' J: f( I
void SPI_Configuration(void);0 ]3 S) E/ J6 U, [
void Delay(int nCount);
& I6 p/ m/ k: b# M- V% ^int main(void)
- O. d: Z( r( D% L{  RCC_Configuration();
/ ~6 w  A1 n* j% ~) k: z! u7 i  GPIO_Configuration();
3 W  X& L! z7 p% X7 z$ L7 f1 P6 u  SPI_Configuration();% G9 A# U( l9 e( j# M' W( V
 while(1)9 O* [% f0 X* b/ Z# O/ x" @
 { int data=0;4 u( }; y9 k3 @% p, t# b
  SPI_SendData(SPI1,0x55);- c! H8 h- v- y3 |- _& J$ G( L
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
' ]1 O: K1 T6 P0 C' `. N  data=SPI_ReceiveData(SPI2);* h# H" X0 p  |# G
  if(data==0x55)
8 D9 N2 w- u- M3 k  c) q9 S     {  while(1)
$ Y4 f- ]- p% q+ n2 D; v1 |             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
% Q% f& ]0 r( m9 L7 w/ Y                Delay(0xfffff);
  R% a$ Z+ C7 W3 X                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
  _* k) S( Y- r& b2 A+ Y                Delay(0xfffff);6 [6 T  T7 [$ z5 a, g
   $ \( J$ \6 L4 A
             };
# ^0 ~5 P. j( |# z+ d( q     }+ M. N' Z' }2 D  i& }
     else while(1)# I' ?- v, o0 B# i" b$ M
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);" }' x: b! I. A! f; K" i
               //Delay(0xfffff);; a, ^2 ^3 {+ U2 m; D
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);0 I- n% v# X( x; L
               //Delay(0xfffff);* k% q% {" [! Y5 @9 @9 i
   " a& c$ `  ^: f
            };7 u% a% E. b% r* R
 }2 @8 T; h% a+ z* ^
}
" h0 w" }. W7 M) ]# `( K( Wvoid RCC_Configuration()8 w2 y- c2 h7 e6 \" M3 F6 s# R
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);$ i- y$ r) V' g
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
$ g" E# F' L0 x' d# y- m  z( y' a  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   6 R" S8 k# f2 {
}- g& c( y- ?: `& j) k4 n" d$ k
void GPIO_Configuration()% N" G* M0 y' Z2 ]% y
{  GPIO_InitTypeDef GPIO_InitStructure;/ l1 @2 P: e* m- J. \
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
8 Y' K8 h  b; l* G- I+ C+ @  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
! V* @# S% i6 x  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;4 _# e3 y8 ?+ R6 a$ {
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;/ p: f1 |0 ?+ @- |4 K& u
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
- P+ b: A1 }; s* i/ ~- Y  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);! K0 r% s8 N7 p
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;- I' t: e5 u& M9 _8 h& G- a& o
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;, |4 q. q/ Q  ~5 j9 r# T
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;+ c3 v7 a% r8 p$ U( L8 V% s
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
2 t# h8 `; o, K, W  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
9 v/ ]: B; v2 S: C  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
) Y! L. W. p  y4 ?" ?& }  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;! a0 b( ~% J5 K& c' v! c+ U
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
. L0 F# {2 S( J/ T8 m5 {9 ~  y+ X}% m; }; a; H2 j5 _5 N) F
void SPI_Configuration()! u, V5 [/ y; b3 W- |3 j# `  i
{  SPI_InitTypeDef SPI_InitStructure;5 `5 X8 v% W. R7 {/ _
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);- T- X0 m3 @# E
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);* R7 a! W' m2 ^6 q$ R, \3 |/ y6 `
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
& N* M0 @8 E6 [8 L# `5 ~   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
$ t  r; k) I/ ~& w+ ?2 ]2 u  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
2 v  Y4 }/ \* v4 z  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);4 s: Q6 K/ m! _1 K/ E
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;# {1 f3 \5 b6 K1 H* }2 U$ v* _
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
" u1 e3 c5 z: s0 w7 E: w  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
7 l8 X7 t% f3 G  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
8 b8 l0 J  `. F! M; K3 {  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;7 ?0 G2 E  J) h2 L. V- M  |* U: j9 Y
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
# y9 f7 o& H% J7 c   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;( T' ^8 V4 w4 _3 j7 k
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;7 j, a! H+ a7 S' i% g( h
  SPI_Init(SPI1, &amp;SPI_InitStructure);
9 b2 G% a# y  n8 M  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
& y3 W8 e" {$ }. D   SPI_Init(SPI2, &amp;SPI_InitStructure);/ [5 o: [) W4 T  O
   SPI_Cmd(SPI1,ENABLE);% l. ]  i, a9 \+ a
   SPI_Cmd(SPI2,ENABLE); 
# f& T! k. U$ }4 Z3 p}: v* d! V% r8 G* S8 F
void Delay(int nCount)) g! Z& Y* \& D, A
{ int c1=nCount;" _# g1 S( ?! |) D3 U- ^% H
 int c2=nCount;( x7 M7 v) m6 E# D- L" e! T
 for(;c1&gt;0;c1--)
" c) o$ E$ O7 V9 I  e5 v% r  {" K$ O; q$ M! J
  for(;c2&gt;0;c2--);' i0 l/ E* O3 S4 T: o
 };
0 Q) F1 T" j! ]}; s' |. Z' Y6 [2 x# w! d
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:% X  ]/ e0 y5 j: J) u* E- S. J* I
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
  i! `# c3 B6 X. }4 O2 x以下是全部代码:( h6 `1 H. ]# H* w( g
#include&quot;stm32F4xx.h&quot;
2 ~. d8 a1 c4 `void RCC_Configuration(void);6 {: V7 R3 Y3 Z1 D$ V: ?$ ^% G3 v
void GPIO_Configuration(void);
- f+ P0 G8 Q$ `1 ], |9 pvoid SPI_Configuration(void);
. g- l; v. k# D$ ?, h$ _5 o  wvoid Delay(int nCount);" p% M6 w9 ]0 K# z* m& g8 u
int main(void)# T$ I2 z; h  `
{  RCC_Configuration();
/ `/ k& B  e5 u$ \  GPIO_Configuration();
$ |; F8 ^: u+ m* z, a7 G; e" j# d  SPI_Configuration();
7 r# }: j% M: r  }# g; b while(1)0 a( Z0 e( \3 A8 Y: G
 { int data=0;
# V9 l. N, G; p4 J" j  SPI_SendData(SPI1,0x55);
0 F  d2 R+ N3 E+ i- @" O- a  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); " x! B5 T9 J1 y( F  N+ e
  data=SPI_ReceiveData(SPI2);
7 T+ i& D9 A9 {/ r6 C- y  if(data==0x55). [6 y8 p! e8 V! u& F5 z
     {  while(1)
4 ?: \7 {2 m% A, S' ^# V. I             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
7 c0 K& y# o% n9 A1 e- I/ w2 o                Delay(0xfffff);& ~# a2 ~$ N5 C
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);' q' o" J, [6 i) Q! D) ?8 Z
                Delay(0xfffff);. ^" N8 F4 M& ?1 z4 I4 i3 \5 q' Y
   ' T9 i, d, K9 v
             };
0 ^" \9 w- e. Q* ?- C" X8 ]     }
) i! S9 z8 B6 Y  N     else while(1)/ O1 }+ i0 }, A
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);& ]2 v" ]6 t% z) D" h
               //Delay(0xfffff);
9 ?# T" {* B3 ^7 \& p4 S% ~  S               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);4 ]! E# Y. _. T7 K
               //Delay(0xfffff);% }: ^9 j6 o0 I. _8 e* |- G/ k
  
- e: m7 h/ }3 N& ^# `- l            };
8 Y/ \2 F. d+ E" D' B; n }! i" s' [5 V; M' L' ^) K1 }
}. w& r) k0 a1 b
void RCC_Configuration()
% i. f: P. K% R3 r6 h! x{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);% b& b1 g! D  _7 F6 O
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
$ b7 V/ V( s2 k2 o) V/ B0 i# u  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   * ]" q9 f0 p& L, n# S4 N% `! I+ ^
}
4 G, v' X9 F6 pvoid GPIO_Configuration()
, A+ f2 `6 P. k: c6 ]& t1 y{  GPIO_InitTypeDef GPIO_InitStructure;
( G7 o. {! L& G: u- s  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
6 Y, a/ R8 H" d  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;+ B9 @) Q2 D6 Y! m4 V
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
8 A; v  N; q+ O  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;* h. L% [; T" H
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;4 W8 V, h  `! x* T
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
3 h: u1 a# x/ Q7 n; d2 L  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
, f7 Z1 W! L! j/ E/ i  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
8 T3 O) T+ ]& k9 g8 P. G7 O  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
% y. H; A+ O) g1 E! C  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;5 E/ S5 V$ i0 E& A) L
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
7 A& _  M+ ?2 A, {  C  Y& O  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);* H3 A3 q1 K, ?4 J6 T8 e7 S
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
- R; r8 z. i) X* ]/ T3 N; J& z8 |  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
. e. h2 U4 k1 _6 t% p- K! ?}
2 @" f$ w% M9 F" H0 d7 d4 K/ j% ?% Dvoid SPI_Configuration()2 g! p) x: r# l& `, J; r# \) j+ j
{  SPI_InitTypeDef SPI_InitStructure;+ m* F- v+ V: e. o! L* M# ^
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
& D+ X$ A2 W- u# j. A  b- l  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
# l3 o- O6 I. H8 D  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);: C9 X2 f6 A* f+ P/ C; A, W5 T/ o4 G
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
0 n" A2 V4 l# n* n  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);5 N, m# I7 m! _6 G6 X( @0 d
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
! F' ?9 E4 N$ W  Z9 N1 C) ^  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
6 S4 |6 D+ B2 \4 F0 |/ ]; j  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
2 m8 n" \" c3 ~  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;  J- F2 ?, F+ \. z/ a- y
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- @$ B, v1 Z# |4 I1 Z2 W; U  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
4 V' z% W* l" x& h  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
" t& x! \( H7 Q( x  u+ _   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;$ Y7 m% ^, }5 H! d2 `& O( V: d, \. K
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;0 P" E' U8 Z0 _- [$ @
  SPI_Init(SPI1, &amp;SPI_InitStructure);" E7 H: Q: h# l* N
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
. L1 E9 y6 r, ]  l+ L   SPI_Init(SPI2, &amp;SPI_InitStructure);2 v) N1 z7 E! N! d1 P" b3 j* P
   SPI_Cmd(SPI1,ENABLE);; Q. _. X) g8 D+ o7 s% ?
   SPI_Cmd(SPI2,ENABLE); 6 q0 p5 z: ]  T( z) t; {6 |; }
}
  G( Y& Y: `+ p5 L  xvoid Delay(int nCount)0 X# ]; Z2 o5 p
{ int c1=nCount;- B' R- {( R- G2 L
 int c2=nCount;
& {3 u+ t' S+ C for(;c1&gt;0;c1--)) ]. T7 S& u% c9 a" j. Z/ }) H. {
  {
4 r2 s! l/ S9 m6 V. g$ r6 o  for(;c2&gt;0;c2--);
3 w: X. n5 P) V1 i3 Y4 u };. V# i/ n2 ^3 q7 x
}
" j# ]/ C- G. y0 p4 c4 Y先谢谢了~~
3 ]& Y& @* J- x  H4 N. X8 n$ V/ ^3 L( o 
& F# E+ F# c7 b/ Y; p2 t) ]3 D6 q
8 Z4 a7 ~! x1 k  u) J楼上的问题,看我帖子给出的提示哦~
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发表:2 {+ [/ O( p! x# p, D
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
2 C2 {9 q& @$ q0 A1 }1 A' W3 B # m% t$ a% ?/ L! z' B
& V$ U1 V; Z# x7 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 运算效率不高

  
1 N7 p0 w& h' w7 g鬼魅一样的Hard Fault( }2 h1 e6 y/ t" D; M4 |6 f
 
0 k& ]: S" c* p! H! f! P该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
2 Y. n# e, }9 k4 B2 i / }+ J) v* e  E& Y7 `0 z
咋解决?
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 手机版