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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表+ E' }3 d! t9 v. E+ j, u
% a3 l3 r' ?: U5 f$ W8 O: a/ \. k
' [/ ^; i6 G& _
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
  h9 w) k2 k0 V% I  m2 @( l( T8 q 1 w3 ~( u, D  z( H' Z! d
提示:点击各主题,进入帖子,可下载ST工程师解答详请! {; {, f4 y' m8 W6 H) q/ O, d

6 M% H4 T2 \/ \% H: V+ E& b7 m' s8 d! c$ \6 h- M
一、通信接口  E7 W7 |9 Q5 ]; J( u
0 y4 _' C) ^5 U9 w$ t
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新  h9 r) I4 i% s3 [, D! z2 i
. u3 d, z! u* P
2. SPI 接口发片选信号导致死机
% e) {, I8 I. m- ?% s& p 2 _+ k7 [6 I: O: b6 m7 O+ \
3. USART1不能设定600BPS的波特率1 d" ]. p2 P; p* `: F" h9 L
- B; x" Z+ n" T! [# e& _% \
4. I2C 接口进入 Busy 状态不能退出) a( ]' W2 p6 B' O+ e
! h- z" k# Q' N! J' e/ x( Z
5. 对 Flash操作导致 USARTU接收丢数据
% t  f- W" n6 [
! _& F& n5 s3 C9 n( @! Z6. USB接口易损坏( O& `( e, v& y* j
7 j: k: j) {  k' A( B
7. UART发送数据丢失最后一个字节1 i; W8 S4 y. O# B  @0 M
) O5 ?" d* X" H2 G
8. 使用 CCM 导致以太网通信失败' R( O% ]" Y1 z4 d* F- C4 c

" I" K& B/ D* d  s( W9. SPI3 接口没有信号送出% v4 _( m/ c; L, |+ i$ I( E( B8 `  {
6 W, a2 r* r( e7 W! H8 B9 Z, i1 o& F
10. 时钟延展导致 I2C 通信不可靠
3 e' ]! o4 n2 p! e , ]' K5 u. n& u. `2 _6 Y- {/ H$ @
11. M0的USART波特率自动识别问题
4 D7 J) m0 Z2 L
2 s# [; E" V$ {+ I' e( I0 Q12. WK15 OTG做U盘主机兼容性提高
6 `; v! N( z* N' V6 b2 t4 N9 _0 o5 t6 ^ # M& O: h! o' i5 M, i1 J$ r
13. 以太网电路设计注意事项
9 [2 Z$ ]8 k* G0 O% u% |
$ [, R& x5 C3 R# c& g0 S7 b14. OUG主机库在BULK传输上对NAK的处理
. Q. h/ \# A+ \, {% X% t" K: ] / L- N5 D+ T% U" y  G; `4 _2 K
15. 串口断帧检测2 \+ E. \  L9 K$ X

5 b  P* q* p7 {2 G0 D* o/ P: G8 N16. VCP例程用于数据传输时丢失数据的处理1 U% T9 O7 ]: j

) u  N' ?9 p! d# c. G17. STM8L051F3P6串口UART数据起始位判断的问题
$ G2 ^4 @- o5 z3 d" A* @+ |9 ~$ o : J! N3 X* i5 P9 J
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
3 g. g" q- C: p9 N; }" } 3 z5 _2 l4 U+ e$ l5 I
19. STM8中UART奇偶校验的使用方法
. I, K5 ]5 s& Q% ?
$ o9 u* j; G0 m2 v4 O20. STM32以太网硬件设计——PHY/ Q" L. H  R" @- U, B( }
# X3 P& j) |4 g% ^( N/ U' ^
21. 一个判断I2C总线通信异常原因的方法
, ~: x. H$ ^5 I
* H4 H, W2 W: j) ~5 P$ d  g22. USB device库使用说明/ z( m# Y6 ]3 u0 G2 g8 e: Z
* C2 Y8 j. F! u
23. STM32F103上USB的端点资源
0 g" P$ W* c# p, ]# p5 V1 E. [5 I/ A& X# E7 ~3 u8 h% y; e* t
24. 使用CubeMX生成TCPEchoServer程序2 G: r7 H. ~0 Z7 S% i
% h0 |. y5 _  j
25. SPI接收数据移位
* n$ l- Y' z6 H; O7 o2 Y
% y6 Y8 M4 Y+ k) Y5 V( J- [26. STM32F0中Guard Time的设置% M6 I3 i- @7 v: t
- I2 \7 V0 s( U3 Q6 e! s5 E
27. LwIP内存配置( U8 g* A" i: R! h( l

; h$ I. V8 A, P3 p6 {28. STM32 USB Device的简易验证方法
0 `( f! j4 x  d% o( d" g$ M) B( `4 p) @7 `0 \9 {& x7 \
29. USART 中断方式接收无响应问题的一种情况及其处理方法1 ?  p% e. V6 s" r' K

* q# @5 c! |: d30. STM32 基于 Nucleo板 CAN总线的建立& L8 U/ t3 Z- V8 Z. @4 T7 p

* d) D2 n( J8 w0 X3 C31. STM8 CAN总线的IdMask模式的讲解
" J7 M# e$ j5 @' \6 Q1 w0 t, v& _- I1 |. N; \+ l7 X
32. STM32F746ZG USB 驱动不正常 / Z5 W" D' o* M3 V) \. J2 H4 |9 Y" E9 O
1 F) r( i2 L6 ^- a' d* I
33. MCU在STOP状态下通过UART唤醒分析
. z( q7 p6 q( X' T3 O; F
' |5 p9 P) i0 V1 O; P3 W34. 通过STM32CubeMX生成HID双向通讯工程 0 {" _6 \- i2 I1 y
% ~; e; B, Y7 l) n
35. 串口工作在DMA模式下有时接收异常
8 s2 i& }% k$ T) X- e( ]- x3 H( _! {; U; |5 E
36. STM32 Bootloader中 DFU使用限制/ O6 ?. Y: V8 ?+ {
" v/ c. I4 G- u3 ~
37. UART异常错误分析
( J6 X: e: P3 ~9 p& H, Q
5 {, y" S/ y( K( x; p; N38. 基于Cube库无法检测CAN2的接收中断 ( m# h+ O: R4 h5 n9 z$ [+ P
! c% B; l5 O; |" a
39. 基于STM32F7的网络时间同步客户端实现
5 [$ y9 {3 x4 o  G
) \/ @! b3 t6 U+ x# X) U4 j0 W40. HID与音频冲突问题 & h4 \9 ~0 _( M8 x. Y
  M" z" |6 L6 ?8 g& @; W1 V
41. 在进行USB CDC类开发时,无法发送64整数倍的数据" Q! N$ Z( J0 t

' {% b/ _. L  E  Y42. 从零开始使用CubeMX创建以太网工程5 Y) [/ G) y- y! E1 {  p

0 M' [5 ?# n# Y/ p6 f43. STM32F4xxx的I2C总线挂起异常处理4 N, I. X) H0 N& |
8 H: F1 z! ]0 T  z* X
44. LPUART唤醒STOP MODE下的MCU
& r, T4 N3 S* Z$ Q, v  ~
6 ~# S: I  n; b45. STM32系列 MCU模拟双盘符 U盘的应用' ?8 W" j$ j. w( B: ~6 [5 R

" r( N7 X9 L) g* e9 c+ U46. CEC输出的数据和数据长度始终不匹配
1 `/ ?6 {! r8 M& B
. A# y( C* I* ]; Q) [9 x47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
* e' `5 o1 D0 O, n% K, r6 v8 S- e; o  u7 H2 r% x, Z& q1 K$ j) c
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
( J. ?1 v  ?1 [. p" n0 \
9 v0 T1 I9 w+ V, ^- ~6 h- n49. 增加UART接口应用时的异常分析4 _% f- i) f' N  |

3 w& X5 B. e! ]50.UART应用异常案例分析
( a/ O- N! Q, Y3 }& z$ t1 B
2 X+ i( u0 A4 z$ h# k% P0 ~; E51. I2C配置顺序引发的异常案例( V5 T, e8 Z* `  s; m7 o6 p4 L

. R& f$ ]  ]9 V) G8 m52. STM32 USBD VBUS GPIO2 E* `% E% k8 J
& |- H/ O" x8 r' ~( A8 e
53. USB传输数据时出现卡顿现象* C1 L" @% S: e7 ~7 G

7 @7 A. c8 n# C  |3 J' a54. STM32的高速USB信号质量测试实现! M3 c7 q1 m' V" o, D/ E
" Y+ N4 X8 h3 }5 I2 Z! G1 @
55. 基于STM32 I2S的音频应用开发介绍
$ @' g+ R2 q3 H; e8 C0 D0 n; w* k- C3 b4 g* J
56. HID_CDC复合设备在WIN10的识别问题  ! ^9 m$ s1 M5 l
; s. x" E, O' h( m
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  : ~9 b/ ?4 T+ I
7 H2 A9 x2 ~0 M+ r
58. 一个关于LPUART输出异常的问题分享  
, S$ l2 U- ?% {: l' y6 Q
& o9 \: C; W* T; P
59.通过 DfuSe 工具控制程序跳进 DFU 模式5 q# O/ Z3 D* N" m9 d
: w+ k, P7 v) p, o' i
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
% R  ?# L8 k) x% d% o

6 A: |3 f& H) A. q' ~61.一个因初始化顺序而导致异常的话题 (2019.12.24)0 T3 l$ T. a# N* r+ j8 G

' g9 ~+ c. F, I7 j$ R/ c62.MC SDK 5.x 中增加位置环 (2020.5.29)
7 T7 I: C8 A  a+ X, r. M
4 y3 T" y& F. m+ m' H
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)! {& j, ~1 V. [2 Q7 Z3 H
/ _6 ]* F) U9 o  ~
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)3 C! ~5 n: k) P5 V9 B5 C

  ?! C. F" j0 k. ?二、电源与复位- I# G% J" M9 h7 S: t, D6 D/ d# K

8 Y8 [3 r3 \( @# I0 x2 V3 P1. Vbat管脚上的怪现象! n- U* r, D' ~

! H) @5 K4 A" _7 ~5 Y2. 上电缓慢导致复位不良2 `6 H0 C8 {3 N- T) i0 c* z/ j
) T) k8 C: m: A8 p  G. `& v
3. 关闭电源还在运行$ U# n4 E2 s6 ]. c# S) T
" z; K. n3 X$ k; l$ U1 S" z2 Y
4. 使用STM32 实现锂电充电器1 C* M# h  L0 h- q

2 }* @2 ?/ F% M3 y9 L- p9 M5. STM8L152 IDD电流测量
9 \8 K3 H8 Y4 o
/ F5 d& n  i' w/ x6. STM8连续复位问题2 r- ?  @" W4 {2 @
- `+ q2 T% K. `( O  R
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
9 y3 u, O0 W+ F( Z. G+ o- M: P. N) _: T# ^5 U& X
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
* N; h: A* O* E; j7 D( n) _: b/ T; ^
9. STM32F7与STM32F4的复位序列比较
6 m* _- d! Q- y0 N- @+ I% f2 ?1 X6 ~" x* K2 s( M
10. STM32F107 复位标志问题 ; g+ C' i& h. L6 L& T# T

6 X( [9 D0 t7 ?7 i, u. d11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  9 H" m( c5 r; F/ I% f+ x9 r- p& a

: v0 c! C( u6 x 12. Nucleo_L053不上电也能运行
2 j, M1 Y8 b0 M0 Z0 {. b7 ^( c0 R5 @* k6 P0 n0 j& g/ a' f" m( E- `
13. STM32L4中STOP2模式下的漏电流3 l% x3 o. K2 u$ N1 |9 [  w

" e& o4 K& n# v' v1 o14. 在没有外置晶振时HSE_RDY异常置位
/ l1 R6 o: i4 R! r$ `2 S  R; Z& L8 [, w* [
15. FLASH被异常改写   (2018.5更新)
9 p, ^" Z4 M" @: S- x3 _1 S* W" D9 {0 y) f4 T
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)
' Z9 [5 S) P8 y$ s* a; f1 ]2 c" l8 ~7 g1 g* k9 R( F) p$ m
17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
6 i* K9 n! G  |4 P; A5 ~+ R
8 e2 W/ S' ^4 Z4 H三、IAP和Bootloader! c- S5 J' ~+ {, b% P( N
& J6 ?% k% B8 s( o6 M: `4 a- L
1. Boot Loader与上位机通信不稳定2 D; `5 A( Q$ l+ U) J5 J: _
9 _1 S4 ~+ W9 D# s# Q! s) R
2. IAP+APP 模式下不能启动 RTOS; {, A+ t- C4 s/ V8 e

3 E2 G2 ]2 \  ~  S3. 从 IAP Loader 向 App 跳转不可靠
, R( n/ v6 L+ Q4 | ! _  @/ W' j2 k
4. STM32 MCU IAP例程跳转到APP代码简要分析* v, Y$ T2 a" y
: F6 G6 p3 S9 o8 ~
5. STM32F091从自举程序向应用程序跳转的问题与解决
5 W) B/ `' p/ z' I! L, ?
. V$ o' [6 W4 F7 q6 ?6. STM32F09x不使用BOOT脚实现System Bootloader升级代码  n( L1 H: Z. @5 r$ m+ s

/ s3 O0 Q/ @" r" g" |  V+ Y7. STM32F0启动模式相关问题探讨
! K0 u6 f8 Y& ?. p- L! N" o2 B( M5 Q" n8 c
8.STM32F091空片使用System Bootloader下载代码
* M# }( q9 g7 h8 R1 }( x3 o9 q' j# a/ b' D% E# R/ p
9.STM8L  IAP 应用程序中编程指导
# {- O  l  T8 }8 k3 | 5 y0 t: A1 a% A- o" V
10. 如何通过STM32的串口实现简易脱机编程器/ w* t3 Q9 ?0 |. g$ b
9 U5 n) ~, K5 y) x. c' _  T( _
11. 一种从用户代码调用系统存储器中Bootloader 的方法  9 I3 u% K' z5 a, w/ b
& _( s7 A1 q! i2 x3 M6 C- ?
12. 利用 USB DFU实现 IAP功能: P3 t) h8 `9 W  g& }. j& R" C1 m
, G3 Z, _+ I5 j* G, _! N0 f" u! U* ?
13. STM32 Bootloader中 DFU使用限制, L' B8 E8 t1 x. X( T9 z4 C

5 n! q: Z$ {  @& f14. STM32L011x和STM32L021x启动模式注意事项
- n0 x3 i& H/ ]9 Y* ]+ _3 @( c
6 q6 {* E! _# O' C3 A15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
, W: S2 i8 \1 z9 l5 v) J3 P
5 ?! Y- Q- o2 D- r1 K16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 / q" U% s/ h+ {$ K, y9 K/ o  T
( S5 J. D1 Z6 l7 X% U
17. 如何使用STM32NUCLEO 板来测试串口Bootloader
4 ^+ A  _5 c  j* Y* y! {" w% d, J0 t6 I
18. 在STM32L011上通过I2C接口实现IAP& w& e- T" o5 [& T7 S* E

- z$ t  |( W9 y) B2 j4 G19. 在IAR中实现通过将程序在SRAM中调试的方法9 y4 q  \# H" c6 e  F
4 I; ~/ S. l: |1 w, E$ c
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
' C: i" Q6 b8 N' Q/ {+ H  w0 f# j  L, E1 _& d9 V8 s* ]0 a
21. USB DFU IAP 例程移植的两个话题
* {" t0 z# B# ~- @& n' P; Y; |3 n( Y2 V. H
22. STM32F769双bank启动( S4 t& R9 R0 I! n2 t
9 n- i( X/ w0 }) c/ M- O6 S
23. DFU加载 工具 DfuSeCommand的使用
- N- k6 m/ d; n0 i2 b# B/ \1 q. T  H! P6 r
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
, T: V" b( o% C. a4 J' Z6 r+ _! g; e/ H# j  I" l1 W) [
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
. v4 l7 f5 T1 |/ _
. _$ l% i5 K+ _' L1 B: a26.STM32 Bootloader异常复位案例(2019.4)$ x% f* Y7 e$ K1 r+ y! ?; F
3 ^0 z8 j7 F: X! D* {
四、存储器6 J# W, S3 n! \6 D$ v

; k3 E+ p6 J: t4 o! ^/ ?- J1. 对 Flash操作导致 USARTU接收丢数据& t4 J7 X% ^$ M$ m2 m

7 d1 N$ m+ V6 W  n" Z  J2. 使用外部 SRAM 导致死机
# {& R$ c- c8 c  J 8 _; R" p+ A0 b7 x/ ]  w* U
3. SRAM 中的数据丢失
. c/ }& S' q( Y7 L# X) @9 J; @7 u   `  o/ E, `0 {4 H( u+ x/ }5 q
4. 干扰环境下 Flash 数据丢失$ E! j& `+ \/ B9 M4 d: r6 l
  ?5 X, |8 e: Y. m% ~
5. 使用 CCM 导致以太网通信失败: W/ O1 b( q5 [' x! ]" n$ B

) k: Y1 U) V+ K5 d( l0 Y" v6. STM32F429使用外扩SDRAM运行程序的方法( b6 J6 f1 a2 O" h4 i2 u" c

) F5 \7 A; K. _0 k7. 使用STVP实现对STM32L1系列EEPROM预置数据
( t7 r  d! s- O' b' U . b7 C* K- n% o! E
8. FreeRTOS RAM使用情况及优化方法
4 @6 t( a2 P* q! q1 Y. ]1 J  M
1 g- X2 _$ c! b0 X2 s0 N+ |9. 在IAR 6.5下如何将数据存放至flash中  f& k0 d, C0 B( O
2 v1 V& p0 o1 @. v" S  E" I: T0 R" W
10. IAR下如何让程序在RAM中运行9 K/ Y8 O5 z, H' y0 R+ b, q9 a
  M) @0 G1 h  y# S& l" w
11. RAM上电后初始值问题) W) V* `  Y9 j0 b/ \

, p& R+ a+ o) V% u12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计' v) g$ l3 O6 Y( f

# M- C, ], I6 z' [7 u- x& R13. LwIP内存配置
3 X! F' u5 W3 _1 }. z" q# V/ ~' G) G* @- i# v& ~& J# I
14. STM32F2高低温死机问题9 d) l2 g4 a9 O( }5 C
8 W9 S4 M. V% C4 Z3 p
15. 使用STM32F427的CCM RAM时遇到的问题! P& r6 y  q$ V$ n
( P, M4 |+ h& B* k" a! f  g5 `
16. 利用QuadSPI外扩串行NOR Flash的实现  4 o. U7 K4 W3 |) w* g2 p& r
$ d3 v  `  M6 k: L9 ?
17. STM32擦除内部FLASH时间过长导致IWDG复位     ; m% U, q9 T' K4 t" R

: ?, l" }) G7 _6 d4 W, `
+ L4 j1 t! i8 {3 c$ F8 X
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
+ {4 J" {4 C7 _: I
. y# h/ q) ]/ z6 w  L* @五、模拟外设) q* p1 b$ ], ^5 N

% p( z0 W5 _! D- s  b) }1. ADC对小信号的转换结果为零! V/ ~' J) ?# t' B4 x# U
& p1 P' ?0 L" ?1 e; q  [& s
2. ADC键盘读不准
* P/ K- y4 i0 i6 R/ H+ G
4 s9 ?* ^, S# [3. 扫描模式下 ADC 发生通道间串扰7 U2 m. D) X$ w* k- l  l' \, M

7 Z4 \( `- _4 p& n8 p4. DAC无法输出0V的问题分析解决
7 O, O& p5 w# o. o2 i2 f
  A& f8 ^& Y) V% y' n3 `: u1 {5. DAC无法输出满量程电压的分析解决
2 s; x' k  L, k9 D
8 D) t6 b) i5 h0 N1 B& ~# m, _' W6. STM32F30x 的ADC 采样的傅立叶变换
* R9 J9 f* u. N% |* w. B/ J+ K5 {% k: b1 P
7. STM32 F1系列 DAC的示例详解
+ u/ H3 {" p: ^" ~- t  ]* R+ d; e  R) g. ~+ h% n/ U9 s* m% D
8. ADC 连续模式采样浮空引脚问题
' C4 R. F! ?6 X6 `3 p% H: c$ Q; X
- f- N2 i+ B* H5 a8 P9. PWM硬件间隔触发ADC
! x( S" t+ R: J0 N, J9 p9 ~! |& D, y. L
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC# ~: @" `0 x6 s; T- n, h

6 C( @2 d" f5 w9 S/ m11. STM32L4 系列中ADC 通道配置上的区别. v. F: g9 t& F* W
! _/ T# ~* g) ]
12. STM32 ADC模拟看门狗及其应用' M% r4 {- k# U, B, K% N
3 c0 @1 C. W& u' p; X
13. STM32L053 comp2 比较电压无效问题
5 g! m. j; o7 H+ t: R/ }; H/ r/ k5 l: P5 u3 K% ?
14. 运算放大器OPAMP在STM32L4上的应用4 s" @" U# \7 A0 Y
2 }% \, s8 c" O
15. STM32 OTA例程之ESP8266使用
& N  p# v5 I: W* n' K, C
3 L" K5 s  O& M. P* d16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)' S( B' {- F3 b2 x$ v3 ?- m

5 q: L3 n  h5 p% E& u1 n* ]六、计数外设% u( _- E! i0 L% @& J
% Z) T9 j/ _" G6 s4 l6 W2 L* @" m5 G
1. Watch Dog 失效
$ }4 L7 u4 n3 ?/ N
- T8 w2 |8 w5 F, q- ?; ~; b+ j2. RTC计秒不均匀
7 f) h4 q1 Q3 o. Y. g; k # e2 y. W) D- w# H  ?1 P+ c
3. 软件启动模式导致 IWatchDog 失效
! K3 j& l' d# V! J. |# S
" V5 J: ^8 L, Z, N+ U& W4. STM32F030R8 定时器移植问题3 g& R9 A* F5 X$ i
& N, h; E1 `# E9 p1 s6 p
5. STM32F0使用RTC Tamper的几个注意事项' T7 Z+ I6 V7 W& k  o: t
% B8 d# C2 B; I+ ?9 m4 r
6. STM32L053可控PWM脉冲方法之DMA- l0 Z8 |' K1 f: g

. ]' k* ?( S# D1 n% N7. CounterMode,OCMode与OCPolarity关系
( P' n/ d5 K8 h, ~3 y& ~( R% U  i% Q7 i9 K9 Y: o% A- I
8. STM32L053可控PWM脉冲方法之DMA
8 \5 H4 ~- M8 a' ~
! H" \: b5 c$ a, ^0 i# r) f9. STM32F1通用定时器示例详解—TimeBase4 W  i% R- O- o* i- o- t1 x
: Y4 l- G1 \1 `% S7 S
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
* |4 s3 N' P- l- N" Q. h
# I- ^: o6 A( w3 H4 B11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
# g5 K: E! n. E0 [$ g6 A# e8 ^) x( D: B+ Z# V& {
12. HRTIMER的多种Fault事件联动机制
  }# z* S* e* G2 h  U6 I, H
4 t. h7 n/ S; I) U' A13. STM32通用定时器 示例详解 —One Pulse
& P0 s) R6 C' H. ~
! K+ ^- n# t. l4 ?$ w3 W$ Z14. 如何用LSE校准STM32F4内部RC振荡器
/ f5 D  ~/ y; f; X; Z* W% u0 B  x: _
15. 一种使用Timer测试HSI实际值的方法
; S; Z/ u4 T- E# Y
& b7 }4 S0 _/ G+ ]8 P16. FreeRTOS定时器精度研究
6 D! ]% \: W' o, F/ K
0 {( \1 I3 P' O. w17. HRTIMER产生多相相移信号9 r* D5 q3 G' a; q: A

, ]% A. Y3 \. Q- S18. 窗口看门狗启动时异常复位问题
) ?- s$ w/ ^: ~# @
/ v4 ~  F% p8 G. x& c2 Y% ~19. PWM硬件间隔触发ADC
' _5 Q3 a# |3 y+ @% T" T
0 T. C6 y) U( A9 {. R; a20. STM32F030低温下RTC不工作
+ ^1 G5 |" f! l& j3 ^/ K& @/ `% {0 t3 i. K# T% c9 L( O
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
" @: w  a* ^0 p1 b0 S
8 f* e4 K. X1 D1 ?3 U" l22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
* G' v' y% ]: @, ^1 E  Q- l
5 }8 B7 i# E. g8 m23. 基于STM32定时器实现定制波形的示例 (2019·7·25) / @0 t. L+ B6 O

& _+ J5 b' ?3 ]! v/ ^24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)7 X9 e8 a, c& E

$ z# c3 C0 N* O3 b) Y: J* V25.MC SDK 5.x 中增加位置环 (2020.3.31)  D5 V; o. D" N" S

+ B, H+ a0 c  \" n4 w6 R26.STM32高精度定时器PWM输出话题 (2020.4.29)
; ?6 m4 v8 k2 n. i/ P7 b- T, q; b3 r
& ?$ i1 a* t5 `. a
& F5 K" p, Q; a! [+ J, l
27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)
  w) C. S1 i% W& H

: }  a$ r* M( N七、内核9 c/ @' X$ V' N! u" [9 [; e1 U) v: ~
1 J& _0 h6 T4 P  x
1. 使用指针函数产生Hard Faul
& }6 d, O" y' U 7 Z7 v8 q" f$ [7 B, O- T
2. 调试器不能通过JTAG连接器件
4 B; ^6 d8 f& n0 l4 }+ X. V
: Q& x  I  u! H3. 鬼魅一样的Hard Fault
3 C0 _4 R5 a! c9 O+ D" @  I) r " }2 T. I. U* C' t) }6 \
4. 进入了已屏蔽的中断[! w/ y1 f( y* w
4 k7 B& V6 [2 t1 T( \7 x$ y$ S, Z
5. 浮点 DSP 运算效率不高% A6 W8 J  j- g% U- e  {8 W+ a
+ _; t, r7 N0 `
6. STM32上RTOS的中断管理
! S3 v! o- m- S( n
3 Q) P* k( k! F9 R7. STM32F7与STM32F4的复位序列比较
- \) p6 G/ p* x1 w- L2 H/ D! ]4 C- J
8. STM32F30x 的ADC 采样的傅立叶变换
" Y- R' g* `9 E, E' s
  ~3 E6 i- y; g$ o9. EXTI重复配置两次导致误触发中断的问题% E- `: S4 R3 j/ _( R& u
! f7 Q( J: ?$ X$ L
10. STM32F3xx/STM32F4xx使用浮点开方指令
* e3 L! M6 a0 J- }) A
8 L5 t- k. w" S8 x5 k11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响6 P% @0 s' O1 Z1 f# s

+ }' |- I8 G3 s  x, h 12. STM32F7 MPU Cache浅析  
' \) _' R' C$ r7 ~0 @  D
. n& g2 U0 n, y, [13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)3 `% k; @6 j$ p6 C; G% d0 [
, Z7 d. L. \! ^" Z
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
* V1 G" s- V+ n8 @1 f5 H

# K! F7 E& g( Y+ w/ i3 D" w0 {
( x* c/ K" g. D4 v  s" [) E八、系统外设
/ Q: T7 T$ Y+ ^; y5 ^ ( B) M" s3 Z- W1 h8 p& t
1. PCB 漏电引起 LSE 停振; e+ m( E% Q  {; }" |5 X

6 S: P! F% H1 N/ M3 U2. 时钟失效后CPU还会正常运行
& b3 F( m1 Y" l" [" V$ ^( C
" y1 }2 e( M( s* E5 T+ W, o4 s3. STM32F2中DMA的FIFO模式
- h% h9 H4 a& ~& V4 x
+ |8 W( B% e( {: Z4. STM32L053的GPIO翻转速度的测试# T: X: L/ _5 M6 q. U8 m5 j
5 i# W1 }. F( r$ T; R0 S
5. STM32F4xx PCROP应用1 R+ e9 U6 |. \. W
7 X4 v8 l! e4 {8 \( w
6. STM32L053的GPIO翻转速度的测试
7 |2 l1 n+ e, Y5 k+ j, J3 J0 R$ g" G8 H  N2 m1 L* Z
7. 如何在IAR中配置CRC参数9 d& N$ l! J4 @" J( W3 q
# V" V& w6 t' k2 J* t/ p% O
8. PCROP区域函数无法被调用的问题与解决2 F, V: B% r+ e, ]) u0 E1 w
8 {! k0 d4 a" Z0 U
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
- G  m9 j- ?7 _7 Z+ R# g! \; Q! i( j( Y; {  `& H( z4 Y( X1 S
10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计: k/ x0 F  c# n5 o
- ?2 d3 g4 y! J7 b2 v' c1 j
11. 如何用LSE校准STM32F4内部RC振荡器
" q$ x- S6 k0 m! {( e/ K3 u) w' l3 |7 ~
12. EXTI重复配置两次导致误触发中断的问题  , f* N; {# D* x% Y% c

/ q7 z) F$ t6 [) _+ N  Z: f9 U+ T13. 时钟安全系统的应用(LES篇)  ) D7 T( P; Y+ ^, D
* [7 q1 ?$ M: O( [% h, ^/ E
14. 利用DFSDM开发PDM麦克风应用介绍  
( \7 k" ?+ c8 f" k5 l" B! `3 L
; E+ i  n4 [+ C1 X! e/ k+ P, L
15. STM32H7的FMC外设在DCACHE使能时运行不正常
: }5 I- W3 R! v6 g0 ^/ p
; l$ l  F# x, S. F/ Z16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)! [1 s. F# J% S% I7 B) w0 H" g
* ?% i1 I1 p* E9 [6 l
$ O  X9 E& E, i* \9 x' t' C
九、标签和收发器
/ H: |% E2 T5 M
- b: j7 @2 A3 T. k/ G) B- n1. CR95HF的初始化步骤
. J( T- F. i  u1 D$ _% c1 a- V
' y! W# T6 t( T/ i2 G$ s
$ P+ Z9 u5 @9 [* G% L; `- F, {' O- b/ z/ \+ O$ |3 q
十、生态系统
1 N6 I0 k9 ?+ D8 y0 u 4 p9 ~& `2 u( B% W  M9 T' ^. T
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题+ A. I! K  U: a: K; r+ w2 r

& Y6 \: \3 g6 {2. MDK Logic Analyzer 功能在STM32中的实现问题2 M0 o2 J; K( S& z7 g" M9 p- t* K

1 k! y: C  }/ S  c7 c$ a+ b3. 在IAR6.5下如何将数据存放至flast中
7 f& a" [: J8 O( [. e 9 l' p" u! Q3 d8 C$ ?4 V4 ^
4. FatSL移植笔记
: W- S0 u) e. c- g1 m " E7 h) z# U4 Y  W9 H7 W
5. Keil中使用STM32F4xx硬件浮点单元
! b. m* X3 u, U, y; ]4 z & b* I1 E3 c" V8 E
6. 如何生成库文件(MDK和IAR)
# \* F& ^1 x2 x7 W6 o 0 m& ?, b, d, e$ Y. j- o
7. Nand Flash文件系统解决方案
% N+ a! K( {- o7 [; \# d # k0 b9 _- p+ X. L& j' R
8. STVD在调试时弹出“Cannot access configuration database”的解决6 s" q9 }: K9 _$ T

: ~+ F% s0 d4 w' u/ d. g6 o2 L9. RTOS低功耗特性的设计原理和实现2 W7 X2 C4 W( |3 S  L8 M

; [8 C5 C1 Y8 O) o10. IAR下使用J-Trace进行指令跟踪8 X9 o7 }( _( T9 H! o# _

* m4 W% p# E# r1 ?5 L$ B11. STM32上RTOS的中断管理& Q$ B& Z+ e0 x
) I1 J9 o$ b$ U
12. IAR下如何让程序在RAM中运行
1 h- I, o% W  L! B& \1 c8 M3 u/ U) }5 Z: T3 [
13. 如何在IAR中配置CRC参数9 x  G, H3 p- s* ^0 P

9 ]# g) Z/ B. I9 a' P) g, W14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册  E( O; F, |2 {" [

1 [, Z2 W+ ~' s& D15. 使用mbed进行STM32开发及STM32F0的时钟问题7 G! q; w' V9 C
9 f5 z9 h  }2 j/ c: v; I5 v
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能  K9 p& V5 R* B- F& `8 S

+ ^# d6 h# `8 i4 S6 i' l. T17. 多任务系统中的不可重函数使用注意事项, ]  U' V- J* I, a% A( T5 b
. t7 h3 e) B& \9 u! h
18. STM32 utility的hot plug功能7 n9 e" n# B: N2 U8 ?6 C: Y

/ Z8 \; u( Z3 }% b- j2 G19. 如何将CoreMark程序移植到STM32上% y# x" b+ o, c9 [  r

/ x4 u  H" o6 A; C9 j9 P, E9 {$ U20. FreeRTOS定时器精度研究
3 X+ s9 N7 Z& s8 g  \+ T0 x6 H3 k# }+ s* c/ W& h+ q+ P' S* b
21. 如何使用Eclipse和GCC搭建STM32环境
; H* ]' T* W  B7 R6 i9 ]
- g! s/ V6 B! h* I/ \8 ^22. 如何建立一个基于GIT的STM32库3 L, R* Y" Z' i+ Z" V2 h
7 c; r+ \6 s) y8 ], H/ O
23. 从零开始使用CubeMX创建以太网工程  f% E4 h9 K* @

: t+ V0 c8 U6 D. s24.从STM32Cube库向标准外设库移植FatFs文件系统
4 H5 J3 ]) S: J1 E8 _
7 y6 \7 U+ @6 p) [' ?1 i$ P( h7 w25. 基于 STemWin的屏幕旋转
1 u# v2 L/ D! Y0 a9 E' A3 a
- [5 K, N6 s: X. d: Z! @6 X26. 编译软件 Hex文件烧写
. [8 T5 c+ i+ d/ n* e9 o% K
+ N# t# Z" S+ V' e1 j. `27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
6 {" w, S& G; N' }/ r, x+ M& V
1 g7 m4 }" ?; ^$ \* O28. USB CDC类入门培训- _0 j% t* t$ X5 I

! X0 x* l, @# n' U$ \29. USB DFU培训
9 X; `$ v4 a& @) A0 S3 o
5 B/ B! a" _7 w30. 用于量产烧录的拼接Bin文件操作
+ i8 _! E2 K1 _1 B* M
  u0 x: ~& `0 b, n+ b, Q31. STM32免费开发环境该用谁, Y, A0 @1 M1 t# x- |! e
9 J2 A) n2 g( g( j. L, G, L
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
- X+ \* j5 R' q  h7 h% W7 L% i1 S2 D
  I8 n& u$ i  i; v* T33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新), @0 @9 u3 g. v7 L) J3 P; }9 I8 |. }3 d4 f

1 M  p; p0 L" W34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
+ g$ J- B3 i5 O, k7 L& c8 T) O! P) W
35. STM32 FOTA 例程之 cJSON使用   ) N: j/ X7 n+ V: Y9 C" l

! A( Z$ g- W, F% S+ ^36. STM32F769DK 云端固件升级例程使用说明 - |& p) T+ f7 M1 m
  g" \1 I) V; ]) V/ Y
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
6 b0 @8 y  E/ \5 j+ u1 V5 Q8 @! g8 f4 k, y
38. 基于 STM32 的阿里云物联网平台方案 / V$ `$ c( p/ |% C9 e
0 Y9 s6 O3 p' G; I2 X9 y/ U* E) [
39.AliOS 任务上下文切换原理分析  
# E+ s2 \# W# Y: U0 s
' C' Z9 x1 W$ C  P. |40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
' o- H* v; x0 D: N$ [
6 p: Z0 C" t& W- c$ j+ ^* L41. STM32F769DK 云端固件升级例程软件开发文档  
6 y8 U6 p: K- Z" t; `, V% Q! Q$ {
8 I+ u* u5 N: ?. h( A6 q. r
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
! O8 l5 m% U3 h, ^/ @  a3 z# q" z6 j, V7 s% x2 u
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
- [3 r' J# A. ^" X) _# ^$ [2 V9 U6 a4 M- E) h
44.零基础快速入手STM32MP1 (2019.9.19)( _, L1 K1 Q  s7 _' d

! Y) Y6 k0 D4 F0 S; D, u45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)
! }7 X/ T# ]4 K! p! V9 K
$ u  i. j- I+ D  V- P1 b十一、调试, s1 g8 E4 u; n' O% r
1 U) W: v, u& \- V! b" x
1. 关于STM8S SWIM Error[30006]的分析
# K. T; X7 o+ v" b
! {# `, ~& n7 x) O* m: M2. STVD在调试时弹出“Cannot access configuration database”的解决, I# N. p: ^/ I$ p1 K) v
1 b& Q" g# g5 h9 p& @
3. IAR下使用J-Trace进行指令跟踪
* R$ [1 w0 P% t 7 n3 I) R+ ~( Q, [$ U4 w) S  S
4. 菊花链 JTAG STM32& S5 z- n9 z1 p# F2 u2 A' g2 Z0 G9 d
) |3 ]1 Z' I) k( k+ T" c# m* D
5. STM32F411CEUx 能下载程序但不能执行! ]0 ?! z" O, T  ?1 I+ E
. X: E0 }+ S, W( q( d
6. STM32F103C8T6 程序上电跑飞
0 S$ M1 D- _! ?  q9 F5 f
) |/ s; C! ~7 P; j& b. G7. 使用STM32 ST-LINK Utility 设置读保护后不能运行& M. `1 L& X) E% N$ {3 H

, \# t1 Q1 W8 u: S" g. C- t$ C4 r& E' z8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
; A" Y# j) U, B
; [1 T" B' J! i8 y9 {  ?" h9. SWIM协议的GPIO口模拟- z1 y$ C9 B: c4 E' I+ W. G

/ V4 p. p, |. l- s6 w: m' S/ ?10. STM32F091空片使用ST-LINK烧写后复位不能运行用% ]* A. \: _5 u' }; }2 h
3 O+ C2 K. F, e1 v
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
0 X. B( O& M! u' S1 {% E  m$ f( g, t
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)/ G( [  e$ B5 K; l( p  i

7 f4 ^) f; \, z$ T13. X_Cube_ClassB代码移植 (2019.12.24)
! @, S9 K$ `  Z9 c  ?
4 A$ J# P5 K* B/ r! R& _* c$ Y4 w0 L
$ X; o2 Q0 o% N  l; e" i9 l0 j
14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)# Z- t. F- V" n  ?* _( l
; K0 j/ E& J2 y+ @
十二、人机调试
- K2 [- l, V. n( K! D: U0 f
! R% J3 K3 F* V" z0 r, [4 i1. 一步步使用STemWin在STM32上开发一个简单的应用
* Y/ d3 C# }, o" G( W9 \/ u  t1 ^5 o1 w8 L9 k) J) _1 g8 f
2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
- q; J9 p. G* N7 M- @
0 n3 U1 r6 U7 i- ~3 L2 ?# R% {3. GUI方案中ALPHA通道处理介绍; g; _# G9 p# G  |* s- K, F+ P

4 \6 U  x/ c. j. T8 r4. 基于FMC8080接口8位LCD的STemWin的移植
6 j+ ^- m) ?' o' T5 h- ]# e0 _+ W5 {
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)
* Y- t4 Q* s' L& f
4 F* M+ {) T8 f9 c' |9 G$ k6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
6 Q8 m$ g1 @4 ?; W6 R
/ Q: ~, u, a' [: d7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
  ~9 ~8 O* ?$ m
2 L0 b7 ~2 {4 O7 r8、STM32L5中如何关闭trustzone (2020.5.12)9 l# r  V2 ~- e
( }' l& w. T# b. I# s
十三、马达
8 L: P& K! {# U/ d- r$ N1 s/ I' z, ^6 ]( G0 |) Q
1. 电机控制同步电角度测试说明
/ b2 x' o5 x7 D0 f2 N
* L9 G$ G; _! Z3 j& N/ d' D! V2 a1 i( U5 T

2 H# R! {' P) S7 i2 `* B十四、安全
' F$ x5 l3 i# E- P  C, h# E6 i5 s

; }- I5 @1 ^+ X7 \: Z1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
5 u" I: H$ |, {( }! P& x* g, a
" N. m$ d! p+ o7 V- t* o/ f4 J7 h2 m8 {: s! d; D
十五、其他
  E+ t: S' T/ {, |( P( U% m
3 ~! I) g2 J  {3 h. f! q
1. 跳不出的 while 循环
  Y2 |( T* O+ N7 N / C4 F" j$ G+ \- K* }) E0 s/ i8 `
2. 外部IC连接NRST导致MCU内部复位信号失效的问题* {; e5 \4 {; w
7 z/ R2 V# ]; b
3. 潮湿环境下不工作
+ w; [; S  H$ U0 f" F2 y' {8 w: G   U4 j5 q- q7 y- q/ i- U
4. PCB 漏电引起 LSE 停振5 g: ~0 b- D5 j" x) z

6 @! h, a% I. E- V2 r; j' M5. STM8L152 IDD电流测量* {; j6 l$ u4 Z  G- r

' b* Q. L' Q# \6. 使用STM32实现锂电池充电器
+ [% }3 k" ^& g+ f% k/ V
" N  L$ R. j. O- Y/ ], ~7. STM32_STM8硬件平台基本检查
  D3 r) |3 G- O$ X6 \( {: ^( u
8. 验证STM32F401在STOP模式下的电流6 m; ~# B' U/ F+ r- ~
$ _8 o  @; _2 O& M) }
9. P-NUCLEO-IHM001 电机开发板串口调试指南
- C# |7 Q+ y7 ?8 W! @ $ m7 M1 p' s, Y6 [& C2 O( B
10. 一种计算CPU使用率的方法及其实现原理
5 }, \$ q+ m( [; S# ]( v/ ^, U5 g; H$ ]0 p
11. STM32 RTC不更新原因分析
: L) p6 Y1 N4 _1 b2 q+ U" f2 Q; o' L0 O9 T) f
12. 关于ST库函数的代码性能对比
$ [# \# e1 U7 t9 c% s; X, Q2 ^2 M
5 t7 {% ]! M- f/ h' X13. 在IAR中实现通过将程序在SRAM中调试的方法4 V. M3 t) x$ d9 q5 \/ k9 J
$ P; z1 k8 c: E4 j: b2 x4 B
14. M95xxx EEPROM写保护配置
# {& {  }& Q( o4 B+ f/ n/ i4 c3 F; N+ a8 G& `3 B1 D
15. 4SRxx的GPO的属性
( k& R& @8 j  T  S; _. A0 z% s. [$ O6 `) e! ~% f; r& x
16. CR95HF的初始化步骤
4 `0 ?. f* b* A- ^& {- m/ H! v0 E/ S4 q& \/ P& N
17. 电机控制同步电角度测试说明  
" ^5 A) N+ {3 v) k9 m- x% n4 \( R! ~. f6 `- j0 J+ X6 u
18. STM32+BLE通过 Notification与 Android应用程序通信的例程
, N5 `, @  A1 m2 b. K- b# F5 A* Z& a
19. M95xxx EEPROM介绍9 I  Q. N* @3 E8 S; @* U' T

' p, l+ j% M% f, G1 P20. STM32 DFSDM测量温度应用 + h# Z; m) Z) B/ [" L6 l2 R

% W1 }- V! @0 ?" }9 x( R7 b! T( ~! u21.代码实现PCROP清除
/ E6 ?8 x3 T" b& H" K! q- S9 `$ W7 I2 @2 I
22. 理解与应用MPU的特权与用户模式# C$ z  v# g+ e' j7 H

  W" w! h% m2 C23. 用于电机控制单电阻采样PWM变形信号产生- s: _  j" F9 ^2 ]3 ]: S4 C% i  f
1 Y% B) l* T6 u' z7 L+ e; e
24. STM32L低功耗模式唤醒时间测量
, v' O! m' @& M8 @5 d: y) Q" F) F1 W. i# z/ g7 j5 J
25. X_CUBE_SPN7程序电机启动抖动问题
% w* ~0 \/ `& L- u( l
9 P( M- p' f6 o' O26. 发现STM32防火墙的安全配置
$ U% K3 p& r" O! c1 K: i
3 J4 r% w5 p6 o  _27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
, s1 ~  _3 Y# S( u8 Y  {/ a$ ?4 b6 N8 J, y, d
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
0 Y2 m0 U& A! {0 f. I
) H5 X' E: v3 ~- k- V' i; H4 }& D) @
温馨提示:
% w8 y' q& P' f! ?
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

/ r' e/ s7 {* _1 C, d6 U% E1 e; K, B) }/ H4 Z+ m- q" A
6 d) u4 d9 U0 o, S0 ]' h3 Y

( ~) M9 N, ]. b5 @5 z
5 k8 r' L! e" h' a$ z; _
; |+ X) b* z# g6 u/ P
2 n. i0 M7 A( v2 p) x) n& \+ v! H  v% J* ^

) Z( G7 i) c) P& H
) s; D$ O/ R- j+ X5 H& G
+ R8 \/ c7 F- J. f

评分

参与人数 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
好详细,多谢分享
' S( o/ ~! @$ I/ E/ k9 k
5768340 回答时间:2018-1-13 14:42:54
HI  2 y0 W$ }! s+ Z- q
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
5 V) H+ m7 z  r   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    # u. t' y. l) c# I1 D; w, w" y
  2. 函数名称:Cdfinger_Bspspi_init' z3 H* Z$ u( o& E$ P- R- @! k6 m
  3. 函数作用:spi初始化函数+ @  [- G3 o: v( K  `
  4. 备注:
    ! R8 x3 m4 R: j3 `
  5. ******************************************/1 ?4 v3 d. B2 a: i
  6. void Cdfinger_Bspspi_init(void); @( i6 [2 g% \/ P! j8 c
  7. {: \& C' R, t6 C  c( `# Q; K7 ?
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    : \8 E6 C# c# b! x. m
  9.         SPI_InitTypeDef  SPI_InitStructure;8 s4 w$ c' x, S& v5 t+ g8 q
  10.         DMA_InitTypeDef  DMA_InitStructure;
    3 d* \, C* j) O" |
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    - D0 c2 U/ o$ k+ G& q
  12.   
    5 j3 z+ w: j5 Y& w2 U
  13.         int ii =0;
    - x! N+ V- u: S4 c9 C
  14.        
    8 o8 z: U$ `* ^/ K. q3 m
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);0 c; @0 Z9 u$ m* |0 p
  16.         /*!< Enable SPI2 clocks */# p4 k% X1 ^/ K% b4 N
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);6 |2 n1 L/ Q9 N4 b. s# ]
  18.         /*!< Enable GPIO clocks */
    ' F* R. s. V2 F- D
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    ( Y/ |: F' e. t- I  S* \# ?2 V
  20.         /*!< Connect SPI pins to AF5 */# L+ M5 D# I% i5 W( d
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);1 k- c3 s; z. H1 ~) N! T, b
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    ( ]& i5 g) {! K) X
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);) X4 r: B' R6 _3 h' I5 d5 ~' I! s

  24. 8 S1 f6 `; D. b2 I( M
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    " Q, v' A. A: O+ ?+ k  J
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    $ x7 `) l7 q3 g  c- e
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;) ~$ c2 K3 V4 [  \; j. ^9 Y# `
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    " _+ n- n5 O, }
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    8 S2 ?! w! k! ?- @
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    , I; {- |; @4 N8 g2 [
  31. ; k7 ~, ?" a" E" s% G, |
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;5 w$ v- E+ }, o: T8 J/ f
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    9 N+ v, ?1 J+ \$ c0 H1 Q$ a; h  @6 Q% c
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    3 M- u6 p  K1 T* ]0 n8 C( j- W
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;* S- E( x8 W6 Y2 `; ^
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    . c$ {4 D+ w4 K4 C$ z
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);  l# e- W) z" \$ d7 v* b! w
  38.         Cdfinger_BspCs_HIGH();
    0 N1 y7 E  U0 ?5 T
  39.         //Cdfinger_Bspdelay_ms(1);
    : u# [6 z* p1 ]; S: \8 z* L
  40.   //Cdfinger_BspCs_LOW();2 V( \5 F9 u9 s) x% U
  41.         SPI_Cmd(SPI2,DISABLE);
    # M4 s) W7 E& v
  42.         SPI_DeInit(SPI2);
    2 c$ a9 H2 M. c5 w5 g: l
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    / C4 w6 G* V. v$ a
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    1 j! G3 i3 {/ `0 |# f  c+ F4 `' `( _
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;0 @4 C' H& b; a2 m: s
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    . P2 d5 j! `$ P4 e2 e6 G# Y! c. L8 o8 v
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    3 n, g8 _9 A8 T8 Q& f; n- H
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    : j& z, o6 |4 A3 ~
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;* c! W$ }% J; ~2 z0 |- @$ S8 J2 r! y6 _. r
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    : E% D, G0 ]4 @  z
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    , y( H& H3 d% F% L3 s+ `2 {
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    , I/ R: X6 q, s8 X8 [
  53. : H' y- {; i) J9 h! c4 P3 X
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    . l! K" A' ~% P6 |: f  D5 P2 Z
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    ! q" U/ B2 |* p4 D
  56.         DMA_DeInit(DMA1_Stream4);" {2 s8 [3 ~, g9 j: l1 p; f# B
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    6 c4 x, W6 W: K6 h
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    & u4 ^9 j) e; R( n% y
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    6 S5 V- ^  F7 j8 f9 u
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;( P7 V8 i0 x: K( j! X
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;9 \( }5 f, s/ x5 W. y- X
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    / f8 ~5 C& r: O" m% Z# p4 z& X
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    * S, O; ]8 v% Q$ h1 B& z
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    : a, b: f7 |* D: x! u! o& g
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    ) s- Z* M2 ]& j$ s* D
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    ' a0 ^$ ]9 s* E0 C6 C% J2 B
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    6 }4 l3 a4 O1 F: ^0 G/ p
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;: c& t% V/ T+ M7 f* j( X
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;$ b8 f- d; v0 h5 B3 @
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;& ]1 i8 w" D  Y8 y1 n  m0 L) R* Z
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;) T% X/ S* u! Q3 E5 F; j5 L
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    + j7 ]1 j! U; g4 Y$ L' G
  73.   
    " H, Y. S1 Y' H" ?* \
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/7 ~/ H: E4 [6 |+ _$ R
  75.         DMA_DeInit(DMA1_Stream3);2 }6 a+ W9 V/ a9 x8 }/ Y* b/ _
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;8 A& }; R" R9 O5 [7 d& [
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    / Y9 p  A  k/ f
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];8 L3 Q- {; ?8 ]/ s/ Z% @; b- [% J
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    5 {0 k/ e/ z9 d/ a7 t4 H  |
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;4 ~; F) u) Y, O- A/ @! ?+ n+ o; c
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    - M( l! Z- e: ]& _6 Q7 t
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    ) s6 D# U$ p9 G, h/ l% J' p1 n3 ~
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    9 A  v3 c$ K5 ^/ I
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;/ S9 Z6 Z0 \- q" M3 h$ @$ t
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;1 y) A$ X8 ?  _! \
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    ; @: e6 `/ e' S* t
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;( R1 O4 R4 m3 |/ `1 b
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    $ v! i) \# E. W; `; @1 w6 |! ?- W, s
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;2 L. R& C7 c- n3 P$ a$ |5 G1 {
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    9 Z2 I& r. k; m, ~
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);9 o  k" h  O) W5 {3 Q# _
  92.         //Cdfinger_BspCs_HIGH();
    / b. j/ K! m9 d, g7 d
  93.         8 }  W% u6 h+ Z3 T! j1 j: {

  94. ) ~6 L  s' k: Q- w6 _' e3 x( d( q4 l
  95. ' C$ N! A$ f3 s2 ^1 ?
  96.         //发送中断
      Z! ]( R$ e# a
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);: X$ {4 d% H6 d# O. \3 Z2 j* Q
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    , ]& y. D* D( v
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;1 v$ w) c! t7 i2 b5 W) M
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;5 b; D8 J! D6 A# P* {! j7 \3 N3 b
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    " k0 L' A$ F: F, `" H
  102.         NVIC_Init(&NVIC_InitStructure);' @1 i. q6 ], Q
  103.         5 c- j/ `; M. h
  104.         //接收中断" E+ c. ?5 n. F( O( ~+ A
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);1 u7 C* i# f" D$ R, j7 ~
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     3 @. ]  U2 d7 y8 k. _% m* w! Q
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;: F; R" r2 G; ]: l& S
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;! C7 e$ k' k4 l% s/ o
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;0 |7 u& p/ V/ x$ ^# W- N2 W8 X
  110.         NVIC_Init(&NVIC_InitStructure);
    ( G: ^" j$ F% Y: G8 m
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    $ D6 K6 A- P: y8 H! D
  112.         SPI_Cmd(SPI2, ENABLE);- ]# i% h6 w* G1 N* R/ x0 {
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);% A/ M6 n* `& K0 x# g; F6 [( b9 p8 e
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    ( U: V3 b6 X7 s$ R& T, f2 i

  115. % k: |- [, B+ r' m" d: p3 l$ s
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    " z$ w! J7 u; |- ?2 a
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    * T: F# x7 y$ I. E: u
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);6 z# a  B& R6 K! Q
  119. 9 J- z( m  ], X9 Y4 n5 f
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    & V/ [5 ?) m* T+ g$ d2 J* k
  121.         {$ A2 e1 ?" \8 U5 l: N
  122.           if(ii%8==0)- P8 W3 L6 D- i+ n7 |' U0 E
  123.                 {) H6 _) K0 s4 L' ~" N
  124.                                 printf("\r\n");# r% f" l  }# |) J
  125.                 }- t  G/ m, m' _5 C. Z5 `; Y5 e. ]8 {
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);9 N8 \: X2 w) Q: P$ W* m
  127.         }# t. d; w5 P5 E4 v: {4 t* y6 x2 X
  128.         printf("111\r\n");
    " a& ~, @; y4 v9 P6 o
  129. }
    . k% v. m9 ?3 j  B7 }: B

  130. 4 J# `% o4 R, L8 T/ U1 x# |" K
  131. ! q3 w7 t6 U5 ]& m  y" k
  132. void DMA1_Stream4_IRQHandler(void)% z. `2 l9 T" c& B2 }
  133. {: d- T/ R) h; y) o' z( U
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)2 L. N- r' p/ }) w
  135.   {: U( v3 P" o  f& R2 W1 h* |
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));9 G8 Q1 i: p' Q( M0 o
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    ( Y, W0 {; E4 Y) B, o( J" s* O8 C$ b
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    " j, ]" ?. d! M. R% w
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);  K4 L, D+ @% G7 f7 I  ~& u6 O
  140.   }0 W. r& R! V2 y; [+ e! V
  141. }8 g- ]" W3 ]6 P0 ]! t, e3 O; y
  142. ; o9 U! \5 a1 `" Q/ k0 |. W
  143. void DMA1_Stream3_IRQHandler(void)
    ) q: f8 @6 j3 Z/ J' ]
  144. {7 N; L& Q2 B$ u) A7 P1 G0 I
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)' B7 V( {: i; M. |$ S6 \1 @% g& Y
  146.   {
    0 s2 ]( n& W8 D/ N# M3 K
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    4 p  G/ U  B! F: {) x: t7 v, I
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    . `2 A+ L3 ]% C3 ?
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    8 S  ^5 {" D  W1 ?1 e; U" |. z
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
    8 ?6 l1 i6 F- o# U
  151.   }0 K' }0 {/ _& w8 X& W2 ?5 K1 M
  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的波特率是不是必须为相同的,才能正确通信% |# ~6 Z. ^5 J& p; j
以下是全部代码:
, l- Y3 @3 c$ i7 Z8 @#include&quot;stm32F4xx.h&quot;
; j3 _/ ]! m+ f- u4 f, svoid RCC_Configuration(void);0 I+ k' O" W# ?) x- _
void GPIO_Configuration(void);
4 \5 J, y7 G# V8 z/ T( lvoid SPI_Configuration(void);
; w- \) v" Z6 y' Yvoid Delay(int nCount);: H" c  x; _0 @: q
int main(void)
) o( p# m9 L( l! I5 \+ U4 H{  RCC_Configuration();: Y  @8 G: x( d% F( B0 B
  GPIO_Configuration();
6 Z& k$ j- y  R# d) E* G  SPI_Configuration();9 `9 M& e# q2 ^7 Z. x
 while(1)
/ R; K2 ^1 }) F, C( E { int data=0;; \) z$ v5 K# h4 D% Q" v( `
  SPI_SendData(SPI1,0x55);* X. G0 u* |5 u9 ]% R2 D+ n5 S
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
  y: m7 D0 i0 K9 P, R% R  data=SPI_ReceiveData(SPI2);
  v. x6 |  }4 v- W8 {  if(data==0x55)# ~# U0 [: s* Y+ c! H
     {  while(1)
' N3 t  R! g; o  \0 Z             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
/ u/ f$ t3 r; Y! Z7 B4 C( e                Delay(0xfffff);
( K2 m5 E2 m9 s# y5 J& E6 G- Z                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
! b. X: D: Z& `6 a                Delay(0xfffff);
* a& h4 \+ J; \8 _# v' k" x   0 _3 a7 W7 a+ [+ r% \2 l" y
             };
2 x1 R% b3 {% _+ b1 c1 a     }; o5 h# u5 h" a" ~
     else while(1)8 d' t) ~& r7 j6 q8 w, b
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);# H% F5 ~! b$ B6 R1 S, B
               //Delay(0xfffff);
# F% W" b- V( J- v$ T+ ^* M               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
( T$ x- J5 K1 W               //Delay(0xfffff);" s) [; g1 y+ o! _
  
5 T" [5 x7 e5 {  E# u3 R( f            };; _2 S! @  t! j: C
 }
' i, Q* e/ ?/ |}! G! b* ~) x; ~- Q. H
void RCC_Configuration(): h) a8 `- ~5 E6 b" L
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
: t$ P+ W, @0 U+ d5 M9 t0 \; ]  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);% f9 Y. h& H3 X( v
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   4 W8 e! ~% }8 c3 J; r+ H
}
' J7 k% Z/ Z$ e" x0 h# E) Nvoid GPIO_Configuration()
  S" _8 r+ \! g3 p4 E1 L{  GPIO_InitTypeDef GPIO_InitStructure;
: R; Y% E& w) s+ L1 ^  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;* N/ y6 A. R) M0 Y
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
5 a1 Q3 \8 @9 |1 K* [* I  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
, Q* p& o' y; _6 e  v  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;2 v7 i. C0 i1 z" Y8 P
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;3 x+ R, H1 j% `" \: v
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
! y8 y/ @1 ]  y8 S; b  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;9 X2 A8 Y+ w  b' }
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
' g. q; F; J- G  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/ E( a& f. ]! G% G  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
- i* [  D8 Y- W0 ~  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;7 X4 {. `* i' w4 N6 z
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
) N# i! Y& T. e8 P. Y* a  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
9 t/ Z' j* \9 p- P7 y& {% ~, F  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
  H( u5 e6 i4 r* A, C) Q7 ?}4 D. V7 c9 z+ X! S
void SPI_Configuration()
9 I; {/ ]# Y; d4 E( |( j0 A- l: m0 y{  SPI_InitTypeDef SPI_InitStructure;
& m  w: W- m  a9 T6 k0 t, J+ a% R  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
1 _. f  G4 G. l! ?- G9 b  ~  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
7 o9 ~% _# m8 a0 p# L8 ]6 O  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);, A8 g, C6 C: K: \# V* p
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
& Y4 k2 S, k' n) g* n  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
3 ]# |/ T5 n8 ~! ?$ }( e  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);8 X0 o9 y( o1 h' d' \
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;$ r7 B, N9 [8 W- v/ n1 |# g9 f
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;( X4 ~* a! X( G( x$ H5 ~8 y
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
. ?9 P# X3 ?. e1 S  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;9 L. t! N2 o/ @5 f
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
+ S  T) t& n; d. a  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;6 j4 m; O& A) ]
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;: ]3 y* w# y+ O9 d
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;. \8 k4 ^1 r+ L
  SPI_Init(SPI1, &amp;SPI_InitStructure);
9 n; b& l9 A- H8 c  D  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
' k; C0 c( C/ W3 W6 t2 _+ ]   SPI_Init(SPI2, &amp;SPI_InitStructure);
; l6 \" G9 J5 r   SPI_Cmd(SPI1,ENABLE);1 S: I6 A  N) |+ h  d$ [
   SPI_Cmd(SPI2,ENABLE); 
9 l/ ~, ?1 r. Y- Y( [& O}
0 j" d* \$ c: b6 c& U! j% |void Delay(int nCount)* N1 `4 v( R: p  z
{ int c1=nCount;) e7 {3 d; |% |" _' d  T
 int c2=nCount;
* Y  k' x/ _+ b' K" m for(;c1&gt;0;c1--). @2 G- t& }% @# O5 K
  {) F1 D, U* T0 W/ Q+ j4 O7 j* j
  for(;c2&gt;0;c2--);; W" Y4 T- `/ _% `8 V# W$ U
 };0 j& V0 Z. j+ Z8 O5 B/ x: p& h, p
}+ n+ f9 A0 k/ ]
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
+ T7 m+ m% }8 m8 I4 S楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
9 g7 l/ H& J4 |以下是全部代码:
, g6 F7 f1 ~1 W& n8 |) i#include&quot;stm32F4xx.h&quot;
0 [7 b+ D0 t5 f$ lvoid RCC_Configuration(void);
$ O7 F& [% h7 [void GPIO_Configuration(void);% s* \* W, z! p: C0 @  `; j" |8 }. |* B
void SPI_Configuration(void);
. n9 z4 {6 D8 d; Lvoid Delay(int nCount);' D, B$ H; Q; Q! r. g
int main(void)
7 d1 w: Q" ~; ~# h{  RCC_Configuration();
. J. l* X' w4 ^7 R) U, G/ Q- S  GPIO_Configuration();( `; f9 T- y$ m' s* k9 X
  SPI_Configuration();% q6 y0 B. z1 V' b0 `- T! l
 while(1)9 m/ ~9 h0 x& l% A! ^& ^/ {9 Z! L
 { int data=0;1 @+ H2 \  H  q! x7 a! N, f
  SPI_SendData(SPI1,0x55);
; h9 [$ ~% |+ E  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
9 P# b1 X4 I0 z( M8 t  data=SPI_ReceiveData(SPI2);
( n" o& W, t, L1 n7 F2 e  if(data==0x55)
0 H. w) F9 J5 K3 Z6 y/ r     {  while(1)( O! ~5 Y% F$ Y" V; w( t
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
- r4 c* {' J0 Y5 q+ _                Delay(0xfffff);) |5 x1 b' C' |7 f6 n$ g# c- \
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);2 m- h. o3 T& [" w6 \
                Delay(0xfffff);7 z& Y% m& L3 J
  
7 W4 v- Z- m9 W8 I             };2 l  x! r! Y9 }) k9 u5 _
     }
% Y* t3 m9 ^8 ^" D9 d     else while(1)3 p6 m; {5 o) e% E
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
8 Y) y' X8 T, T* O               //Delay(0xfffff);
: p' E' w- S7 O, m5 O               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);+ q4 T4 g5 B' t
               //Delay(0xfffff);1 A- K  t- E6 S1 n& K: p1 f
   5 G$ m) r. u! B. w3 O8 U% @
            };
7 E8 ^* g6 X$ b& n }
. o9 j' N5 s; h: d2 z+ A0 V}
+ N1 _3 ~9 n/ |void RCC_Configuration()) ^* X+ R5 x4 y. a& c& }. V# K
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
$ X& ~* Q' c1 s# O) J) d# y- v  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);4 v/ p/ A* Q+ ?% t5 J
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   ) I- K, C) d0 U7 Z6 `) {/ Q
}
' }9 ~5 u  l. O- {# F( Q/ Cvoid GPIO_Configuration()
& e) U  h/ k1 I; |) p" d5 ?, X{  GPIO_InitTypeDef GPIO_InitStructure;
5 ~3 V9 a" D( N" M' w7 E$ N  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;- w: d' ~5 p1 K  T) W5 F2 ~
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
8 P; P' V  o' A6 @; `! |  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
; p- G: W! h8 _" ?! `9 S  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
) P* K* D" \% f1 O+ H( M  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;! ~1 _8 n6 }/ k2 [
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);  @! l& T% a- }  s% |# d
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
7 z8 ]4 Y1 H" r/ d/ s: R6 d8 G  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
4 R* L% [: `+ A# d  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/ V( _' l% ?# o0 U
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
  `: c$ H# {( ?& R  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;( |* I8 r4 l! C$ F8 T* e
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
7 ^) [" ?' l" p  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
+ Y3 R9 m  G3 A5 d  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
0 d6 ~* v. e1 _  W# A! k4 {+ d8 }}
1 s! G2 |7 L4 V( s1 ivoid SPI_Configuration()  n$ d! b' x% ^. }  T! I
{  SPI_InitTypeDef SPI_InitStructure;- ]/ `0 ?8 Y& m1 ]
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);7 m5 S9 W" h1 C0 j6 h  G
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
: V! ^; U( O" f/ ^2 ?+ |) R  P  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
( C; X6 M  h, Y- U2 y5 V   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
0 g; l2 W! \1 l( Q: K" [3 N' h% }  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);5 Q- e5 E; b; \% L* V7 q
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);3 ?1 Y, ~1 Q/ F( k
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
( ?7 f6 i8 i! T0 ]+ C( g% l  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
5 H7 H2 D6 p% @) x3 e  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;1 ?, |- Y/ K% t/ L* Q6 {* c( R9 C% w
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
! U, Y2 d3 j: c  }4 ~* W6 _  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;6 A- }4 V1 h  R  z) E1 e9 }
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;4 c; S- m; u/ p7 r
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;9 b9 A, \( j8 P) Y( k- n
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
* n9 X3 l$ L: X8 V  SPI_Init(SPI1, &amp;SPI_InitStructure);  o6 x( w- |5 p3 O- Z
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
, k% N: k9 e0 F1 C9 L   SPI_Init(SPI2, &amp;SPI_InitStructure);
, \2 l0 _. x0 r8 g& N( r+ f   SPI_Cmd(SPI1,ENABLE);: |! T3 P& n0 y( E! r
   SPI_Cmd(SPI2,ENABLE); 
' f! r8 V% l, M/ t& N! h}
) ~& w, _8 |' E% L2 D' p6 J6 ^* Qvoid Delay(int nCount)0 P, d& g3 s0 L- K  y
{ int c1=nCount;
2 r: J9 J( M2 M, w* M8 C int c2=nCount;
* _, d5 q3 r& \) F+ N' I. u% ^ for(;c1&gt;0;c1--)+ D4 y/ M. O8 F( ~. z; m
  {2 p+ C& t+ t& @2 B
  for(;c2&gt;0;c2--);9 k( L: Q; `1 x! C, b+ ^
 };
8 W- I& x& K' n; h$ Q4 v6 y+ U}
- _  j$ u. U( {5 j! C先谢谢了~~
) @, S  s9 L2 P+ ?; r! c 
' a4 G4 p4 |! y( h% Q2 `5 ^* w1 {" L9 T
楼上的问题,看我帖子给出的提示哦~
lkl0305 回答时间:2014-1-24 09:53:43

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

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

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

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

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

回复第 5 楼 于2014-02-14 11:37:16发表:
; \7 W2 ]2 ]' s- ^- q  w2 b 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。3 m; g: Q, I2 s/ E6 z; b: e: Q) |
 7 z6 F0 b6 W/ v! s) k

3 F! o( s7 ^- J! Q7 o多谢支持!!
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 运算效率不高

  
, Q: E% N. }2 i3 H* P, y鬼魅一样的Hard Fault' G% L" q! L# e9 n
 . g0 J; q8 {/ w/ q0 V& J
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。7 p' Q% J# E, c# _* `
 
. I7 I/ D4 B# C9 ]% F- l5 w咋解决?
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 手机版