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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
! |1 y3 S8 `' B/ M9 u0 ^- b( w% _+ _
" |1 @+ a( G' d) v
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。. t6 V2 v. |. m  S/ M8 a1 |

- i+ }  b0 q4 d: V* {: T/ U提示:点击各主题,进入帖子,可下载ST工程师解答详请1 B! h1 S3 m9 Z
- h2 S# [1 Z  F. j9 c8 ~: s: I
1 `( j8 {8 _9 y/ \
一、通信接口
2 ]; Y( |; ~% g2 x+ f7 k : I' }  I* L* w6 p. i& w$ Q; D
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新
$ e  M  y3 _  s# r$ f 8 ]/ i: x0 c$ R! V& c" C. S
2. SPI 接口发片选信号导致死机$ X+ C! w. x3 M9 T7 ]
, T, ~( E- G( I8 x# g' f) \
3. USART1不能设定600BPS的波特率
: d. u" U$ W6 l& r* c5 b1 H' B
. c: O! y7 @3 D* L1 B1 G4. I2C 接口进入 Busy 状态不能退出
$ l! i' t% h( @, t' l
: Q( Q7 q3 V, n( Y! ]5. 对 Flash操作导致 USARTU接收丢数据' a- U  \+ m$ \( ^% c$ a
) X: M! _; X% X
6. USB接口易损坏
7 {$ i/ A6 T$ M7 f5 F- u5 [ ) d5 W& V6 t( H# i0 n: p7 @
7. UART发送数据丢失最后一个字节- x7 Z' Y! t' ~: |* G' P
) ], U. ~6 E5 h% N; Q5 a
8. 使用 CCM 导致以太网通信失败
1 \( P# `! Q; G$ m % V# t/ \  X# b
9. SPI3 接口没有信号送出& d6 C1 ^4 L# C

3 A* K" o5 f$ G! G! X' M: M10. 时钟延展导致 I2C 通信不可靠
. C- M3 i) O1 {7 P8 `
! B0 X# `$ i. h+ g11. M0的USART波特率自动识别问题- s1 r6 W+ i' ~" k
$ w7 d) R; r% B& N7 |# j% Z* U+ u
12. WK15 OTG做U盘主机兼容性提高6 [1 d( `1 t$ a- o* }2 Z5 c8 v

# d2 q" j* ?! z: V: h  r( v% s13. 以太网电路设计注意事项
' }. ?; S+ \/ b8 r9 {- F- ] ( u. I1 q8 U- j' E4 @
14. OUG主机库在BULK传输上对NAK的处理7 o: J5 `0 {9 i5 T8 l

( N5 y0 ]* B+ m1 S# |7 @15. 串口断帧检测
0 a7 Y9 U7 g& i2 S9 g% M' x 3 ~) Z1 U- D! ~
16. VCP例程用于数据传输时丢失数据的处理
+ {' f% x! H* `# h; U : q  P) G* [; ~
17. STM8L051F3P6串口UART数据起始位判断的问题
% i! s1 p/ q+ k
4 L0 t3 t! ^4 M6 c( Q18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
/ N/ ~( A+ k6 W- H- w7 s* f
& }2 c' k4 f- C/ ~2 U2 M( L19. STM8中UART奇偶校验的使用方法
" ]2 c+ ?0 z$ m# y0 y$ s
9 ~& a  M2 E! U6 S0 X, ]20. STM32以太网硬件设计——PHY
! J7 N5 f5 M. B* E  O6 j/ D' L! }9 J. s& `4 ~$ T  p
21. 一个判断I2C总线通信异常原因的方法& l1 E7 x; ?2 p9 H

8 k+ z2 B0 I& t4 j8 l" h22. USB device库使用说明4 h  k. }6 @# w6 j3 U: k

0 D2 a/ L" n, |) O# ~1 [23. STM32F103上USB的端点资源
1 u. B6 p" i9 Z; T0 ], s0 E; a( t
& z3 g% N4 K; i; j& O8 ^24. 使用CubeMX生成TCPEchoServer程序# I# I$ Q  a6 }6 A( N( h9 V( `" Q0 k
+ |6 w1 p9 y; V8 w3 ~
25. SPI接收数据移位3 H9 {" v' b0 ?5 c# o7 w, U

9 L4 y6 ]5 t- ~, Y  D8 h5 J1 h26. STM32F0中Guard Time的设置$ K5 {$ b1 {/ F, f
, H" R  {4 O8 a9 S$ l
27. LwIP内存配置
' `' {8 s  O! L
0 P- Q1 {+ L2 ~5 Y9 Q! Z0 [28. STM32 USB Device的简易验证方法) Q9 Y( D9 `" i" M' _# O7 y- C; \
" g' v1 d: n: b& p& ]
29. USART 中断方式接收无响应问题的一种情况及其处理方法1 ?# v- n/ c7 s0 W

% G4 j" ^+ l! d3 u30. STM32 基于 Nucleo板 CAN总线的建立2 V2 C9 M9 Q) H& Q6 V( e( m

9 w( g# }/ D) d# O( [31. STM8 CAN总线的IdMask模式的讲解+ E* t" Z: }7 g/ E. q

3 t4 U0 {% {, V5 j& r32. STM32F746ZG USB 驱动不正常 5 M; v; L- n. l5 K

/ i5 ~* ^5 Y* z  j+ h) C8 Z" m33. MCU在STOP状态下通过UART唤醒分析 : s3 D1 D# x5 X- z' r

9 b& ]2 J9 N+ |$ g' t* A: K34. 通过STM32CubeMX生成HID双向通讯工程 5 R3 o- p  s* C

8 g( h$ ]  z- y% o5 U7 l) V35. 串口工作在DMA模式下有时接收异常   B( t: u+ g6 t

& X) B# Q. W0 F' g7 h# P# E) T4 c36. STM32 Bootloader中 DFU使用限制
; j! @& P% {" V+ I% V4 G. j9 U, [9 J4 v2 M! ~- t5 E0 q
37. UART异常错误分析
. N; U5 O) }) f! b
8 o5 u: ~2 w0 Z' T" a# L! O38. 基于Cube库无法检测CAN2的接收中断 , u3 w" I- I$ ^" }* I2 W# `% e
! r+ k! P0 B6 q8 c) j- {6 b
39. 基于STM32F7的网络时间同步客户端实现
; R' i" ^; m  I4 d0 j5 \/ H. P- Q- P2 j; P
40. HID与音频冲突问题
) m1 Y% B1 h$ V( F; A9 j7 Y+ V/ c( ]0 i3 s) x
41. 在进行USB CDC类开发时,无法发送64整数倍的数据% q' x: d- }& d3 D: o
% ]4 I: H; ]; m& M5 N: j% L
42. 从零开始使用CubeMX创建以太网工程
  \3 t8 v6 _2 J# l: w
$ C9 f' m& o0 w+ u, l/ l% y6 b43. STM32F4xxx的I2C总线挂起异常处理4 N) i$ |9 b" e

  Y, X5 q0 H1 x) \44. LPUART唤醒STOP MODE下的MCU: T8 S6 @/ ^- E. r& ?6 Z. j

4 g* ^! |) v) |2 A' N6 @1 i" O45. STM32系列 MCU模拟双盘符 U盘的应用
- c) U7 Y7 G+ I) U- ~' o/ S& V: \6 X3 ?$ n! h6 M( ~0 Y
46. CEC输出的数据和数据长度始终不匹配- O. }  S) E8 X. T
8 f1 {$ V  G& H' @" b3 l2 ?& [1 V
47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
. Z" H4 L# U( B8 w) H! a( [" a8 e
3 r. K! K4 k9 d6 ~( @8 J48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
$ x9 L: U, M# x3 V! O5 A) s
4 h3 _9 n+ \3 C- b* x: R: L49. 增加UART接口应用时的异常分析
( b) Z  X7 {/ [$ T
5 V1 }+ m+ p4 I; R; M+ P6 S50.UART应用异常案例分析
: x7 r  ]' j" D. M5 `, M+ g
; U( X- x  F5 ^1 S; u1 ~51. I2C配置顺序引发的异常案例
4 ?% d0 @5 b; ~* b4 K
# @. {& T% z$ b0 Z* n52. STM32 USBD VBUS GPIO, n6 u# K+ a0 E: i% X3 p0 q9 n

7 g) ^9 m& E9 H. d: q9 @& B53. USB传输数据时出现卡顿现象/ k+ A2 X6 _0 v7 v# u
/ T4 c6 C$ V7 A# Y$ _+ K1 U3 b8 J. }1 n
54. STM32的高速USB信号质量测试实现
. E% m, o& c1 C- P. `1 q8 V# y( S9 {2 r+ S2 \5 E
55. 基于STM32 I2S的音频应用开发介绍& y! ^. z* q  s& h

; s4 l* a8 J. B5 I. n56. HID_CDC复合设备在WIN10的识别问题  
: A1 Z! t: m- [  J, w5 j- w+ |2 y" |
! b$ F) N2 P! y% W, q' Z2 ^! O( Y57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  
/ D2 c5 B& C5 Z3 \5 z, u+ P* ^9 Y, ~* K; [/ v& t
58. 一个关于LPUART输出异常的问题分享  
1 B. h3 ~& h$ M( n, C8 M" q

. ]1 z4 g  I; \8 B  ~* h' Y59.通过 DfuSe 工具控制程序跳进 DFU 模式
" t& i# Y- S4 [/ \4 `

; |1 x) d+ E! ^2 w6 h60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
. y# K& `% _7 |  O

4 h3 r2 q& V# R  ~) s) \% u8 ^5 r61.一个因初始化顺序而导致异常的话题 (2019.12.24)! z  _! Z* k% ]( k: l6 i8 @
* @* @! Q/ ^1 s- P8 N) p1 K
62.MC SDK 5.x 中增加位置环 (2020.5.29)
8 o8 e% G+ G9 U' @2 E# l% s. g

& c0 b  [5 k3 _( w% i63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)& Z" n  E. P; s7 D( r0 y

$ I; n3 J4 v; ?- ~64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
& B+ d) s# {" \& W( o
3 g) P9 L; x- r) `0 G$ H二、电源与复位
- L, A: F/ `- X) a9 e
* Y0 s# P& Y5 Z8 {+ r, F1. Vbat管脚上的怪现象9 t( U5 h) U6 U) u& Z

$ |( m& O. t& h( m( K! u2. 上电缓慢导致复位不良  k/ k' `. A  F2 `" F

* s1 D/ G3 P" e. F3. 关闭电源还在运行
7 t% a) Q' L9 \ 2 T/ g1 k$ i3 `, q7 A/ [7 r: W
4. 使用STM32 实现锂电充电器" D4 E( t$ A6 T; Z1 n$ X6 i7 F

# F7 [7 W. |3 ]0 N& J" G2 R. a3 ?2 V* S5. STM8L152 IDD电流测量9 H0 B7 F* p' X& a3 M9 X' Z

. }2 E5 B# R% p6. STM8连续复位问题
# t: p' ~: n* N$ }4 w& c# A
3 O" `/ z  f* \7. STM32F2电压调节器REGOFF与IRROFF引脚的使用9 t" Q5 k  t! ^! P
  h9 F& G5 U! Q( x0 e
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
6 Z, O1 l/ h) A' A! I" P  B% r
* }' n* Q6 H$ ]/ z" q9. STM32F7与STM32F4的复位序列比较9 n! N; U- o+ E4 _9 I3 e% Q

0 A6 k% D3 t) R. U9 p2 V2 R10. STM32F107 复位标志问题 9 e  \9 `4 q* D7 C" p% x! s
1 j5 y& Y" B: I/ a: F: g
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  " L; a+ j* e" F: q4 k1 Q) {

# {# z0 t( H, |: A  [: b$ s  |* ^0 M0 j 12. Nucleo_L053不上电也能运行8 B' S( ^/ F$ z( X( c0 ]
/ ?5 J$ F4 [' j
13. STM32L4中STOP2模式下的漏电流0 j+ E. H+ M& ]" a$ g* }

2 M# Z9 O0 d6 @: n6 P. W% J: a) h" D, ~14. 在没有外置晶振时HSE_RDY异常置位
6 F# B- O/ R' ?. |4 @1 C, z% |: }, h
15. FLASH被异常改写   (2018.5更新)
3 a4 X4 ?. w, L4 ~' L
' X9 V% ]" O0 q) D. H0 g16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)
9 A5 d9 }! P* }( ~. b% n7 `
  D- Q" I; o/ b* g  M. `: j# C17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
, k  w' h% c- ?0 t. _3 s4 I" _. S% f) m, S* c% ~
三、IAP和Bootloader# B1 Z( l' ]; N
9 h) ^% R* G5 b. n. [7 c
1. Boot Loader与上位机通信不稳定
# ^. g2 F7 R5 A& K6 j4 g- L& U8 ~( j
, ~' H2 L, H* `( D; N2 z2. IAP+APP 模式下不能启动 RTOS
' u( ?$ |0 U/ t* p1 W. X; n7 H * V% @* A* Y8 Y# i: F1 \  f6 X
3. 从 IAP Loader 向 App 跳转不可靠
/ P4 }: j9 h5 D+ H
4 E* ?$ s3 L% Z* V' R' m! z4. STM32 MCU IAP例程跳转到APP代码简要分析( L6 }3 @7 L( `. I& n" U
7 y" p7 |4 O6 M$ {% p
5. STM32F091从自举程序向应用程序跳转的问题与解决: G  O* N, T% b( g
1 r3 P  D" f9 R+ q* ~! ^5 K3 p
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
: j# p5 K5 b! ^: Q+ `- a/ s' I" _. S
7. STM32F0启动模式相关问题探讨8 W" A" ~- k* L+ g2 r5 a
) O0 V! i# v% j3 Z% `/ p, @4 [
8.STM32F091空片使用System Bootloader下载代码
4 ?8 M; \; M' b3 G" P  c( a/ F# V$ q) L
9.STM8L  IAP 应用程序中编程指导# X4 w9 W, G( A8 v' S7 P
) f" f7 M6 q$ |4 j1 o7 j3 ~
10. 如何通过STM32的串口实现简易脱机编程器* o7 r  A7 ?9 k: J3 v

# z/ ]: b/ C0 P9 i! W; E+ P11. 一种从用户代码调用系统存储器中Bootloader 的方法  . p$ I& l8 w, ]5 E6 ]& X

% ^: R7 b. _/ j7 s# Y! |  J12. 利用 USB DFU实现 IAP功能
3 X0 D+ E3 v; x/ `+ V3 M
6 U9 M3 o! R, r# `1 ?13. STM32 Bootloader中 DFU使用限制
. z) h( P/ t8 t# a8 }6 w( U7 n& \4 C: j) ~# v3 T
14. STM32L011x和STM32L021x启动模式注意事项6 {& n! \$ J" `5 f8 a6 e

; c! T5 M0 r5 K3 E3 `. v9 Y0 s15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 ; x5 Q- ^. O( y3 W* x" ?5 ^8 F  u
; t, B7 ?$ f9 V$ q
16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 / h" z* C. \! ^2 z3 \/ \

' T  U/ V+ a; L# H2 b17. 如何使用STM32NUCLEO 板来测试串口Bootloader( L. D, \4 K$ i/ U+ a  p, e$ N
$ R7 v4 t" a' ^; ^0 y
18. 在STM32L011上通过I2C接口实现IAP
# p+ a8 c3 E0 D1 h8 I$ h) L4 ?% ]
/ y+ w: b! h1 U# F" u. ~19. 在IAR中实现通过将程序在SRAM中调试的方法
* y! v/ P; C3 v5 l; V- m0 F
4 x* O4 u2 W2 V  X/ w20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题( d2 i% c, `: j3 L! J& k

, [9 A1 a7 G: x0 D21. USB DFU IAP 例程移植的两个话题* s+ j9 S" ^& h  u  H

$ C0 c: g5 o$ c# ]) }22. STM32F769双bank启动- h& c' t; v" f3 l, B  U0 n7 `

5 U' v, X, _6 R; {23. DFU加载 工具 DfuSeCommand的使用( U9 _5 h, D3 @

" s) M1 X( M/ y) |0 {, A24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    1 q/ v  P; u: Y8 l' h8 e
1 B, S3 Z7 Q+ S; ~& _- v! H: U
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)2 n0 e+ B3 X, @4 H3 ^# _

2 k4 n9 c- }  ?; D26.STM32 Bootloader异常复位案例(2019.4)
" E% Y8 c. o  z2 ?* T  d
8 W2 Q( _; z/ }4 Q# w  _
四、存储器! D) e1 X4 U/ f3 ^

- Y: m6 o* H, c# U1 V) {& o4 S1. 对 Flash操作导致 USARTU接收丢数据
. X7 P) u" U: P" @) o
, A+ A: _+ I6 p# [+ z3 P2. 使用外部 SRAM 导致死机
# q" a! ^; d2 r/ Q 7 W! q# m; {, s  `" n
3. SRAM 中的数据丢失
5 c# U$ f; U/ k8 N % K# ~* Z  J/ c- }: N  a5 h
4. 干扰环境下 Flash 数据丢失3 @( \3 x$ |. ~$ I! U0 B& }  q3 E
( q5 n% g8 |* F! K7 c6 r9 a( J
5. 使用 CCM 导致以太网通信失败/ F* w% L3 t  c0 n; Q
3 O% l0 q0 E5 P- `, n2 a
6. STM32F429使用外扩SDRAM运行程序的方法% K3 \+ Y% u$ n0 s+ `6 Y
+ E1 N0 r3 j& ?- H' |, g( r
7. 使用STVP实现对STM32L1系列EEPROM预置数据
( Z- L7 g, C' x0 Q* d
# o$ q1 V2 m# T& \4 x$ h! t8. FreeRTOS RAM使用情况及优化方法1 P+ w9 Y' \; D. l: p: y
/ s/ D: V+ Q% a3 M" Y
9. 在IAR 6.5下如何将数据存放至flash中
3 i9 m) ~  J' b3 W+ G) n5 v
% `3 B: E% r+ v( s10. IAR下如何让程序在RAM中运行
4 D* n8 `+ r5 y5 M6 I6 Y" m1 j $ e/ D5 `) v0 w& y; n* }
11. RAM上电后初始值问题
6 n; Q# v6 c8 q
* ?2 o- ~  Z- M9 ]. r12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计. U8 N+ l$ x1 M3 p% v/ o. i5 F
7 @# q. J. ~5 r' J. J
13. LwIP内存配置  i) _, I$ Q; Y# D5 y

7 i% d" N) f' I" q0 h: ~# D$ D14. STM32F2高低温死机问题9 w" u: M4 N6 H7 Z) j7 f

2 ]. Y6 T& R8 n/ i. w: v  H15. 使用STM32F427的CCM RAM时遇到的问题
$ R) k4 b0 a0 r8 R8 U' l& Q: N/ \7 W) [: e: V
16. 利用QuadSPI外扩串行NOR Flash的实现  ! }4 \# a% K! v9 |

, a: E6 u" ^( w. y) w- s9 J# D17. STM32擦除内部FLASH时间过长导致IWDG复位     8 \7 V% `5 O% Y& w
1 |3 W. k; L/ i- p$ |+ n
) R, \# ]! j1 [
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
& d, Z3 R# q  h' m
' }2 @$ b9 v8 K+ J五、模拟外设' ^5 h3 C1 v* Q+ Z$ F+ x6 l# x% `

5 X6 z! a9 Q$ g' e" k1. ADC对小信号的转换结果为零/ x8 v$ J9 k! L& W
3 y& I; @: b0 P$ w
2. ADC键盘读不准2 l' d7 L% c+ [
7 o* d( v! ], N& i) n- ]- l2 C
3. 扫描模式下 ADC 发生通道间串扰
6 q- l! f2 @1 \- m9 C4 X
1 R2 ~, r# t( B2 X8 |: N7 ~2 G4. DAC无法输出0V的问题分析解决: |9 h& g! u" ^% k

0 ~# r6 ?" C/ p5. DAC无法输出满量程电压的分析解决
4 x* Q, J* P* h; T( a. E # z9 ~+ e8 S  r& k6 T
6. STM32F30x 的ADC 采样的傅立叶变换1 N: e$ S+ ^- ~$ l+ w, z

3 {6 j. s+ ~1 o7. STM32 F1系列 DAC的示例详解8 O% t8 n6 h& j' W
# u$ n0 P' \/ b6 j
8. ADC 连续模式采样浮空引脚问题# y% k) ~7 K1 }' C5 y) T& @

* c$ E& T# D! |: L5 ]  k8 Y7 u9. PWM硬件间隔触发ADC ( A# }( X  S  ~! w4 U& c2 Q4 \
" ~7 ^8 U3 r. }. }. Z; c
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
) A/ w  d) x4 n9 e$ l
3 `  S8 ~; r7 o( J) Y+ L11. STM32L4 系列中ADC 通道配置上的区别, m! v/ G% u; g. M& |9 f9 f, G
6 s# D7 n% h% d. ^6 b( F4 G
12. STM32 ADC模拟看门狗及其应用
' ?1 `. d) M$ R" i* g) i1 C$ g! O7 Z' v
13. STM32L053 comp2 比较电压无效问题   t; o& K: V# p$ H; B
* n  u. Q, w- ]
14. 运算放大器OPAMP在STM32L4上的应用% h4 N4 q9 S+ j+ |" Q
0 p* P, E  t1 t
15. STM32 OTA例程之ESP8266使用
! T3 n4 @: O* S" a. X
3 h5 w) B7 G, D2 R1 W" u0 }2 E3 h6 h6 k16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)% C( ?5 g+ o6 M
/ h2 R. d) a, K5 D8 t
六、计数外设
* r8 U$ \0 m% o' \0 [5 L  I
  W+ Q: |7 ~6 Y( l" G1. Watch Dog 失效: m0 |( c5 J. J! d$ V

' t2 b# M5 \4 B) I5 t( Y, s2. RTC计秒不均匀' e1 f8 n8 h0 M; C, ~/ y4 I9 g
' m0 r* K  ]7 s+ a
3. 软件启动模式导致 IWatchDog 失效
( l7 j# Q9 R8 a & E; E/ p  Y0 E9 S7 u6 K3 `
4. STM32F030R8 定时器移植问题
; X9 a: ~, v+ l/ ~7 n9 H, Q
6 ?' V, Q, W1 y: Z' h5. STM32F0使用RTC Tamper的几个注意事项' L9 k8 Z; G' |& Q

# i5 C. y% m% X: |* Q2 P1 W+ h6. STM32L053可控PWM脉冲方法之DMA4 I+ B" u- V! D8 t- n  i7 G; W3 s
% z& m" d9 E8 P1 w& K
7. CounterMode,OCMode与OCPolarity关系+ e3 S# a5 m& }! {
* j3 N  |8 R% {8 r- }) h0 L
8. STM32L053可控PWM脉冲方法之DMA7 P: ?3 F# P2 Y( \/ T$ f1 F+ m# D& x
/ z. d1 [2 [# R1 o6 x$ h8 ^
9. STM32F1通用定时器示例详解—TimeBase9 {7 ~4 P; N! Z4 G: x
& i2 e( \/ F6 a5 u' K6 ^/ [
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals9 T& i9 H% {# m) [

: l& M7 t8 h) O! g" U) W; R11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生$ b, Q- N& X$ |( T; L5 Y. l) V
- F6 a" x0 N6 i# C4 S; W7 j- R
12. HRTIMER的多种Fault事件联动机制
7 ]2 b0 ~/ v; X/ J8 H( ?2 c
) `0 M, H. v. l  j' {5 p13. STM32通用定时器 示例详解 —One Pulse5 F$ A: L- f  A1 r* ?5 t3 J

/ V& ^3 H$ P1 U2 w& b/ }5 I3 P& a14. 如何用LSE校准STM32F4内部RC振荡器" A+ x8 J$ J4 I: }8 Q. W) U

) c. n+ i' }8 Z- u2 n15. 一种使用Timer测试HSI实际值的方法7 d, n$ d* Q, r- A6 C* i, v

* T* x  A2 k6 i7 f0 n+ S) W16. FreeRTOS定时器精度研究
7 t( i: \0 z3 U3 d% d8 k
% E/ ]& `: s! x; F3 n17. HRTIMER产生多相相移信号/ I) T/ Q, ], ^6 G  i
  G9 t' G8 c& m/ i, [, p) H
18. 窗口看门狗启动时异常复位问题
: o0 L% h  M# m) X3 ~* ^+ p( x- n, Y" y2 K5 \. G3 H& a
19. PWM硬件间隔触发ADC  z$ F3 y! s8 E, w8 N
) W  y1 S1 M# T0 c, |9 \
20. STM32F030低温下RTC不工作
2 H; D6 M! o( e) v& A7 o* A7 V) x# r* C& m/ O5 e4 g+ w) k1 J
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   0 i; b9 V8 q! `( G& u
% @7 }: t# z6 k1 p2 Q
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)9 ?! _, z/ y: @0 W) w) T2 t# h
+ g6 B& q+ g7 G6 v7 e( _2 U7 s
23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
7 h( W' k: k! n  Y
) Q6 t  r2 b9 x( |2 G24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
/ b' v3 K# V! o0 u1 C- M0 J

3 A- v! b7 E, N. ?! b& p. ?25.MC SDK 5.x 中增加位置环 (2020.3.31)' W' A  a2 X$ O# t# y
& I% N, ^7 h% y' p& j+ p$ K0 ^
26.STM32高精度定时器PWM输出话题 (2020.4.29)0 a% {  L/ b4 X; [. _

( Y" J( I3 }0 s" B2 Q

5 O, m* b$ [) X& G5 u7 _( l, Y* ~1 ~5 E27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)% z% Q, s& ]9 l+ W! r

. R/ G8 i/ r+ `" K七、内核$ e/ |' {- O: Y( Z8 x
& [( o: C' @3 Q/ J* ?$ R: z
1. 使用指针函数产生Hard Faul
4 o3 k8 o: Q3 U0 s% C7 n) ?4 m' M / J! H/ [- N/ X8 l# h, u+ v
2. 调试器不能通过JTAG连接器件
( {3 B5 h9 ?& n9 K1 U) s: K$ h : d+ ?- V( Q: K3 }9 U% X
3. 鬼魅一样的Hard Fault% P) \9 }3 `6 R' v* A
: J" [' C) [: N' K' i7 ?
4. 进入了已屏蔽的中断[+ X. _8 s$ U6 z3 t5 @$ |

/ W  i0 V/ J5 y# ]6 S' m# J5. 浮点 DSP 运算效率不高
. R7 I( r! W# c- `4 f" _) Q7 A" M% S. y! X
6. STM32上RTOS的中断管理
& g0 Q+ \9 o* k/ [+ D2 b/ U$ Y1 p3 _+ u# o. O( _2 k
7. STM32F7与STM32F4的复位序列比较# M* U: c6 e* V5 H8 E2 s1 m4 W

- l' g- {) b( T8. STM32F30x 的ADC 采样的傅立叶变换
- a9 m4 \5 o4 w
2 V# |. k3 i5 h2 s$ R* v9. EXTI重复配置两次导致误触发中断的问题. W! t3 Y+ h, a
" E8 \4 C, O! l' ^4 S' g% [
10. STM32F3xx/STM32F4xx使用浮点开方指令
: x6 B1 K' w2 L# U0 C6 ~5 s# h  B  x
, \' d  e+ w  `* J8 G  E11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响! k3 b8 k  ]/ f! y

; L; \. w8 q1 w& A+ [1 N' _ 12. STM32F7 MPU Cache浅析  " |! ~# P' P, q9 B4 }

1 s$ d" v9 g4 S% o' H13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)5 b; N. Z- a+ J1 O
  E. `( |$ |" B2 v
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新), `& ?# S& G7 g- h* L

. _( a/ L3 f; K: t/ R
0 |2 g# l0 {; }八、系统外设7 d; N( y. B5 b# x; U0 p
5 B9 P# S3 q% f* `# j, r
1. PCB 漏电引起 LSE 停振5 H1 T$ A% x1 E0 W& T0 V! e

+ _  L$ G6 n) N2 ^2. 时钟失效后CPU还会正常运行
/ C" Z; w, O1 j3 Y7 F1 Z3 t2 X ) q8 @( e2 u. L  I+ C& b
3. STM32F2中DMA的FIFO模式
) E, g! D  B/ i  Y' M: P/ D- M' L3 V# H4 a1 t
4. STM32L053的GPIO翻转速度的测试4 V9 R7 v, b* _" b- n( }: f4 y
& O1 I. q: k) B  l& D8 n
5. STM32F4xx PCROP应用
, h" V. G0 _- e6 |# x2 M7 I; @; Q8 \
6. STM32L053的GPIO翻转速度的测试6 I8 {* S/ v) D, [. M/ H

& H! w( o. L' n, B0 ]% v7. 如何在IAR中配置CRC参数
% g: q/ V" b' u' d8 f, m/ m- A8 L6 d. _0 Q2 i3 `
8. PCROP区域函数无法被调用的问题与解决7 K. i" U4 A: d& }$ ~- s

3 _4 h/ ^. Z, ]( `/ [9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题( l5 G1 f0 z- \. Z, B& z

' B* X% l5 I# K, |10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计6 ]8 }9 Q- W3 M" p+ J! F

+ _, P4 y: s$ J' a6 V11. 如何用LSE校准STM32F4内部RC振荡器  _5 d+ f* E5 ^4 b$ ~

& M% S2 h( X  @/ I12. EXTI重复配置两次导致误触发中断的问题  9 Z+ p: u# S( `6 I) A

: E( I) N+ N3 d! z13. 时钟安全系统的应用(LES篇)  
6 a3 d5 y+ i; m6 x$ a
' g9 m  U4 R" I3 _  k  _: q
14. 利用DFSDM开发PDM麦克风应用介绍    |+ b' ^/ S* r

+ g1 F# ^4 }  \' w15. STM32H7的FMC外设在DCACHE使能时运行不正常
! A0 [+ \3 v, b/ x" b: b9 z5 _* V1 l9 h+ K
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
9 z- j6 ~' k7 W
! p# M: D; X$ }& P" K- b- D8 i) L1 t0 L1 ~
九、标签和收发器0 M! W& p' q: M1 V% l
; W& J3 l  H; y& k
1. CR95HF的初始化步骤4 W2 [8 M: o2 M( p1 C
0 d* l1 w  j' ~4 Q( T9 ]8 s
6 N7 W1 L6 F- f- \" [

. O' P5 X; g9 V* ~十、生态系统" ~2 I( d+ z2 e

! E" S* N" x! s2 e) a9 R1 E1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题) o- O0 T1 p* w2 y9 O7 S
. O- j6 g' m+ Q, }! o
2. MDK Logic Analyzer 功能在STM32中的实现问题
/ f# W2 D! C7 t, g  s& B - Y/ ]6 x  m/ _& G+ d# |
3. 在IAR6.5下如何将数据存放至flast中2 e, h+ j! s. S- a+ U' Y

. j! u  C. B0 A; ^4. FatSL移植笔记
* S2 L; G5 p; H6 }+ f+ b# K! n
; x; A3 Z8 W+ c7 _% L5. Keil中使用STM32F4xx硬件浮点单元" h! N7 }- e; Q, Z) f1 N
' M8 R+ Y  Z" t
6. 如何生成库文件(MDK和IAR)
1 H8 u7 A- m! L
, g: |% t; Y( V4 s1 l! d1 k7. Nand Flash文件系统解决方案
4 l" D( s7 k" f$ O5 H8 Q( V , y! q" T. F4 u0 T7 X! `
8. STVD在调试时弹出“Cannot access configuration database”的解决
4 f- k3 o" k6 H/ V- d1 A' X
+ V6 Z/ b% ~0 \; m: Y' p9. RTOS低功耗特性的设计原理和实现
3 G& u* ^0 C/ x. C  w
0 U* p' ~" \# y+ b10. IAR下使用J-Trace进行指令跟踪
- o# }: k  w4 A" Q2 X2 d1 [
% l6 Z' M# f' ^2 R1 s6 j. f- [) c11. STM32上RTOS的中断管理/ [5 r8 r( l2 }! y& m
' C: O0 m( b# H: m5 s8 b$ k
12. IAR下如何让程序在RAM中运行. ], p0 M3 y' n- _

6 {' |. @; X/ ~2 h3 B$ u13. 如何在IAR中配置CRC参数) ]) c3 s6 z- d. s* z6 t" [
- T( d3 z' ^9 V
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册  p( [# h% u3 u3 |  G; |+ q) ]$ O$ i

) L# j5 i9 Y/ h8 W15. 使用mbed进行STM32开发及STM32F0的时钟问题  b# c- _2 s, h- C$ H# W
" D) x  m: Q) y: R/ S: c
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
* H3 X5 I, P1 v: V
0 v6 e9 |3 E6 A* P17. 多任务系统中的不可重函数使用注意事项
1 v( O/ V* L( L. `) ~3 z9 O+ f8 Z9 J) k
18. STM32 utility的hot plug功能/ P/ l( }* X5 ^4 Q2 }# a7 r
/ Y) K- W- K; b1 ^0 h  n/ u" k6 D
19. 如何将CoreMark程序移植到STM32上
- t3 x, o# @& [% y# f# R# ^; m! V* @, \4 C2 ^/ N
20. FreeRTOS定时器精度研究
7 a9 H& g' y* c1 V! p& n5 B1 l( B& }5 \( ]2 M  P0 w
21. 如何使用Eclipse和GCC搭建STM32环境: N+ m4 }" u0 q6 u* ?; @" X

4 J4 e1 k# t" S8 q  q! P22. 如何建立一个基于GIT的STM32库! u, C/ D0 m7 s" Y4 H9 j

: o* y$ G0 i  I, E# R23. 从零开始使用CubeMX创建以太网工程/ R* W: S$ H, z" v. p

, {7 a0 H4 N& E, i24.从STM32Cube库向标准外设库移植FatFs文件系统
8 X- Z( ~  V3 j7 K8 Y- x0 x
( Q+ M6 Q9 ~, q" N25. 基于 STemWin的屏幕旋转5 g  q5 |4 h. o" g
, L& `: g6 O% E2 S* ]
26. 编译软件 Hex文件烧写 . R- f3 D& `8 N2 g3 H

3 `  ~% J9 H! k$ n5 i9 N1 C1 f. N27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
" g8 j1 M: t8 d
6 ?+ H! \6 s* G# n3 u4 [28. USB CDC类入门培训
6 \; E" h9 K1 F, X( [/ P9 k& h: m- K% {6 h* ?" c
29. USB DFU培训
$ h& j0 x0 }5 l/ }' S9 O0 `% l, K' {9 g+ B: A. w# s  m. P8 O
30. 用于量产烧录的拼接Bin文件操作! ?8 t% H* Z7 p+ ~1 g' s5 H$ @

" b4 O9 `; b" @" O; `# e31. STM32免费开发环境该用谁
5 f, `) v& C2 n/ [2 C9 Q) L
/ l+ z* @) I6 Q# R4 C' F7 k5 Z5 I32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
' d2 Y2 [  H: W& S, t4 i
/ {$ N' t( w/ J" r0 ^* X3 E33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)' ^6 ]$ e6 s  G3 e

& J; [; x6 |9 l9 N: T34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
0 l5 n/ L! l1 J2 M8 j9 J0 B1 I6 o- |" U3 ]; H1 \  V3 q# p2 G
35. STM32 FOTA 例程之 cJSON使用   
" P  n: K$ h4 c4 R( k$ S
2 {# ]. {: y: q: m9 v$ u36. STM32F769DK 云端固件升级例程使用说明
) n. s! J4 ~1 }. z# s( f/ z

. f) \, ~( b6 d' U0 m4 M( L37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
4 i( g" w/ s2 T& b; ^
  U. `4 b3 L. m38. 基于 STM32 的阿里云物联网平台方案
, w3 H0 Y0 z" d& L3 r1 H9 A* i7 I" @5 Q" f$ N! q8 ?, N7 v) z. z
39.AliOS 任务上下文切换原理分析  : C3 U* |/ Q! y, Z/ j4 V' W; l" r: b
) s8 {5 M  ?: T7 V+ }/ v4 U: J
40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
7 J5 j  _# G+ {
) i1 J  C2 G# ]) `5 u7 a9 o5 Q3 t. t9 d41. STM32F769DK 云端固件升级例程软件开发文档  ( N0 _$ [% Z) k8 S
8 }9 ^* }- n9 m4 I& ^3 _7 `
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
: Y2 A* ?2 B1 d+ ?! {6 O1 d1 c
# ?1 b+ N, `( N( b/ k43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)0 w3 A( l8 }0 y* @
$ e6 i, ]2 I6 D7 n! X$ C+ ~
44.零基础快速入手STM32MP1 (2019.9.19)) R+ O8 ]% V: P9 |" I3 C5 K

3 v) e- |+ e: [. z5 r0 k, k, n: O45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)4 \9 C# C6 P# W; V( M
! ?9 D- g5 G- ?7 A  L
十一、调试
  _7 V. u, t7 e) j9 P8 m
* Z1 P/ @  o& P! N, J( D1. 关于STM8S SWIM Error[30006]的分析/ W+ |1 r; t8 [
9 w' U5 t7 J8 Y
2. STVD在调试时弹出“Cannot access configuration database”的解决1 j, [, J/ T# s) Y+ i: H2 p

  E7 u: ?7 X3 D$ w2 z1 l3. IAR下使用J-Trace进行指令跟踪) f3 U. T9 v& x) ^

) x, \1 S1 M, H, @4. 菊花链 JTAG STM32
& E8 E3 o- V5 m0 G& a
: Y( v  k5 D- k$ O4 K! B$ n9 _5. STM32F411CEUx 能下载程序但不能执行( _4 }7 y* `( G' l; v5 I9 q% H, `& T
* }( _9 d$ R4 [# {6 l. Z' u) s
6. STM32F103C8T6 程序上电跑飞  {% H: g7 Q% [1 U9 t. _0 N, j( H

+ A9 p! v6 K" o4 L- U! d# M4 h8 a7. 使用STM32 ST-LINK Utility 设置读保护后不能运行
* V0 ^6 |' k& A" s
  N& w/ `; T9 j' {1 v# t' V8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  & y. C) E' Q  P. v& P. H$ D
6 M' p3 @% ^9 n: ?# K
9. SWIM协议的GPIO口模拟
$ b# p, K0 m7 G$ B, ?
# F' L+ y+ Y3 G& k10. STM32F091空片使用ST-LINK烧写后复位不能运行用7 ?- v3 [+ `& j$ }
4 t* _. ^5 G2 Q) d/ h; S
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
7 ]! l* w0 r# q& T1 ?0 k1 c
2 z! u! k. v- R+ ?( n6 S- p12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)! a  C- E, r( h) a0 U8 `4 c

  N! R) N1 |  x# D- z  s5 p% R13. X_Cube_ClassB代码移植 (2019.12.24)( V, J" U4 H! p
/ h5 ]1 e' ~- R1 H4 h& s9 h

8 S5 [* O; X' ^! Z" o: J14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
, K. S# h: [- i8 g9 D4 z
2 R- h3 z4 ?0 |: Z4 ^4 N十二、人机调试1 d- n+ Z6 V  T: ?
; F6 ]; U9 v6 |. A9 _$ C
1. 一步步使用STemWin在STM32上开发一个简单的应用' i" i# e- y  A; M+ s

$ u* B5 x" X, N1 u4 F3 x2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
4 k4 @9 D0 L0 @$ @6 C. \: T
+ q  U; C) r) q3. GUI方案中ALPHA通道处理介绍/ `8 m2 u" K7 N( G0 ^) E  U  n* n1 z
+ T, }: ?5 R% c  Q6 d3 [8 O, p
4. 基于FMC8080接口8位LCD的STemWin的移植- W& g2 c" {( S9 l' I
- t9 b, r; v; M$ ^1 I7 Q/ q
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)
$ x( j" s1 n  n6 x4 k6 Q
* A) u6 g# v$ _- R& D- [/ D2 j6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
4 D" R# J0 N+ f: S; Q7 w8 g/ d4 ]7 F" O& D# v- o# F  e
7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
9 J' O% W0 M+ W) u9 T" w3 O/ I8 m
" o+ q7 l0 q5 t: X8、STM32L5中如何关闭trustzone (2020.5.12)
0 k8 ?$ Y+ h. }
" f  d/ v! [0 p0 ?- o: d十三、马达
. ?8 s6 \8 U# r8 ^  Q3 E% v" l+ w) _% U6 y" m$ Y
1. 电机控制同步电角度测试说明
( l( l/ l, V' u: G3 D  e& ?2 M
' V3 E$ K7 [6 Y1 u
# m. |: G' x( y, K/ H! \1 L5 H2 r1 p4 Z% h( e: \# l
十四、安全/ t1 Q( r6 i; J
" P7 ?5 _5 k  K5 o
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
/ ]5 f' b, x* @/ N% I/ x4 a; u+ Z7 p6 }* Q( g
& U) `3 d. w3 w5 q/ _& D* v0 x
十五、其他: v: |, W2 v1 w' e

$ H" E; b( t6 `( R/ }' Y1. 跳不出的 while 循环1 J8 d% ?6 @/ V5 P- Q4 s

7 O, `" T( A; W+ ~9 V2. 外部IC连接NRST导致MCU内部复位信号失效的问题
) r6 N4 d, G: o  A " x: l0 ]( |/ W5 P" v/ c
3. 潮湿环境下不工作& s* u  |6 j- O  d7 W$ o

+ A, U6 v; \' u" W4. PCB 漏电引起 LSE 停振7 `$ A! {( o, U3 S: ^* y

2 }* ], Q8 G# ~5. STM8L152 IDD电流测量: B" J1 Z' Z/ J2 W) m* b
% M; k( n4 K7 n$ k# ~# l
6. 使用STM32实现锂电池充电器
: i' Q9 f+ v* \) u, d* w: c
8 g. n2 c  v* w7. STM32_STM8硬件平台基本检查
0 q3 @9 P& M9 |- |' t" A+ z4 M1 X0 [& e7 g9 o2 ~, P
8. 验证STM32F401在STOP模式下的电流& A( \* @+ l0 U' g8 ~9 W6 z
/ F5 ~+ q. g& E' L& }
9. P-NUCLEO-IHM001 电机开发板串口调试指南" Z/ g. e7 v5 X3 `$ U, L% e) O) G: M5 t
1 n) C1 ?- n3 R3 K4 t3 s/ q5 E
10. 一种计算CPU使用率的方法及其实现原理
3 K: T2 D/ ~8 b, }6 c; [) t" c% r- Z/ h2 k
11. STM32 RTC不更新原因分析
3 L3 _4 B) n# P' u" L; W& K- P3 P5 \2 U
12. 关于ST库函数的代码性能对比
, C& ~( S- X7 {; J9 d
3 ~7 F( E2 T- E  [: }8 _13. 在IAR中实现通过将程序在SRAM中调试的方法2 @1 |3 S6 k$ _
% g" I5 J! [5 W" u
14. M95xxx EEPROM写保护配置( s& ]6 @  @2 V9 ]2 v

& {: z# M9 `+ {+ e8 g) u15. 4SRxx的GPO的属性
6 F8 v+ Y0 \0 }% h( k' h" h# X1 s6 ^) D
16. CR95HF的初始化步骤 . _3 U2 R# j" }5 K# K( S

9 S8 V0 @" m! _$ u# m/ l( ~& X17. 电机控制同步电角度测试说明  ; v! ?: Z+ s# ^

3 H2 y- H% W: A9 k( I5 e. k: e$ C18. STM32+BLE通过 Notification与 Android应用程序通信的例程
- W) Y/ Q" e$ k7 M% D8 s
1 w1 B6 [0 C: |! b! C1 f( p+ P) E2 `19. M95xxx EEPROM介绍7 ~$ S! L  S6 {/ P, \
5 Z  h* S, h! i
20. STM32 DFSDM测量温度应用 ! _* u& n0 n' T% a
* U* |" O( T6 T2 e$ f) A3 ?
21.代码实现PCROP清除
" s/ j1 ^4 c1 k$ V
1 T$ J, {' ]' R9 w2 H5 a# X/ S22. 理解与应用MPU的特权与用户模式
/ g! n" m2 @) S2 o, ~' e2 k* Y+ s7 `- i# R, u9 T% W' C" E
23. 用于电机控制单电阻采样PWM变形信号产生+ k: T8 Z) M( [: ?; N

0 p3 F8 R8 F5 l. O/ z24. STM32L低功耗模式唤醒时间测量4 q4 l& a2 j" `1 B

( l( |# c; P" [( V2 T0 T25. X_CUBE_SPN7程序电机启动抖动问题
' J! I3 q/ F# @" s
1 N" ?$ s( _+ e) V26. 发现STM32防火墙的安全配置
" p$ H+ @1 _, U6 e4 T: b0 p, {4 x. `8 N
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改% e$ X& j0 k0 r) a

1 U5 @7 a0 B0 U7 J. G3 ?28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
, k, U* T  C7 Y/ g
) _/ R3 A1 ^% S+ C# l) q
温馨提示:
& \( k% I  {5 Z
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

  l" m$ s8 y, N* F( `/ W2 ]" |3 O) T& B  L* m
6 o5 G9 U- e) P/ @$ }
- u) t+ h1 w2 G& l7 M! t. G

, F: j. q9 {7 n: C% m- x; d- k5 O- ?/ ^1 w' M; ~

/ t/ V5 k9 L4 x6 b
# p3 O1 E, [, }- C$ O7 |* m( @) A1 b. W( M4 r# |

2 q% J$ C' ~% ~( G% x) f1 Y
' ^$ V) q9 \% V3 f8 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
好详细,多谢分享0 o$ Z5 ]. Y4 y: h' r$ `' ]+ P% k
5768340 回答时间:2018-1-13 14:42:54
HI  # \" J! O( \. R' L0 ~
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
8 y( k/ ]8 f+ a; r   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    1 i& A9 I: L* C4 O% v5 q
  2. 函数名称:Cdfinger_Bspspi_init
    , N" ]$ V& p- a  l/ N( m0 x
  3. 函数作用:spi初始化函数! W7 ]& r8 \% p
  4. 备注:
    / I/ B: m  S' T% G
  5. ******************************************/: P/ y7 x( r. `+ O( }- t
  6. void Cdfinger_Bspspi_init(void)
    * w5 ^+ K6 Y; f+ `1 Q
  7. {
    : M' }5 Q" ]! E) K9 u0 S
  8.         GPIO_InitTypeDef GPIO_InitStructure;$ [/ s  v: y1 c* h: D! V5 z
  9.         SPI_InitTypeDef  SPI_InitStructure;- ~- @5 y0 J7 j3 n. s9 I3 _( O
  10.         DMA_InitTypeDef  DMA_InitStructure;
    + S* V4 E( e; W$ C6 }% ?8 e8 W$ z- W
  11.         NVIC_InitTypeDef NVIC_InitStructure;+ ^* z9 ^4 N. ], i5 s1 q, O3 O0 t
  12.   
    8 m3 t& Z+ @, d( q" W' j% Z4 ?
  13.         int ii =0;
    " B- z  u' o3 x& m0 f, A) J! k, z
  14.        
    0 S: G( R8 h9 G. O" z0 C
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);5 \: T5 Q* v$ |+ V! D
  16.         /*!< Enable SPI2 clocks */4 ~1 D% x' F& C4 H' Q
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
    - A% m. s; `. ]7 U4 K
  18.         /*!< Enable GPIO clocks */
    / I1 @  ]) o+ |) o1 f2 u1 q
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    ) _& |! S/ C) j1 p
  20.         /*!< Connect SPI pins to AF5 */
    ' ^  y9 Y! y! G! r. d& z
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    - U* a7 m5 C" U5 U$ B: B5 L2 E. d
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);+ e* A8 |/ \+ Q$ g' I
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);8 [3 @( i2 h8 U% `

  24. ! i# l& g" n$ Y( F6 x6 ^
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    5 {3 Y, B, U( c4 I/ y
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;" t) L4 ~$ |7 ^; W4 p4 G7 D- D
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;& P) Q2 y& {/ [$ q
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;( d& b7 u  w% f1 X) d
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  P# u9 `$ {- e  l3 M- V% Z
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    2 D: d: `; S3 N- t1 {

  31. ! |8 K! a. y2 E$ P) i: L/ }) @* `
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    ' g" Q( I6 y! z
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    * W3 G2 q7 Q' ^
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;( z! |$ e- H, g0 y$ [: ?" @: v. {
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;/ Z* e9 u/ d& v' O- n
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    ( _3 ?1 a$ n2 Q3 Q$ |- s- y
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    $ W" N4 t! ?6 N. m& {) |
  38.         Cdfinger_BspCs_HIGH();1 x* i/ O2 P6 p. R3 k. W3 q
  39.         //Cdfinger_Bspdelay_ms(1);
    : p- u. _0 n: p
  40.   //Cdfinger_BspCs_LOW();
    " j. A8 I  x9 Y2 v
  41.         SPI_Cmd(SPI2,DISABLE);6 Y  ?" E1 W% O
  42.         SPI_DeInit(SPI2);
    4 p  ^* `- ^$ `- e. R1 N3 ^: Q, N1 S
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    & J) G3 a* C7 o
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    : M# F( l7 F% D/ r
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    ! F5 t- j/ d& u8 I4 W/ W6 Z/ D
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
    ' Z' t5 n- B2 Q, t8 r8 t( [( A7 [
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    4 y" C0 L2 n4 s0 Z& r3 a
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;# e* ^: l. H! q
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    4 R4 q. p4 ~0 Y6 U; g; X
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    ' b' V; |: f7 f1 t4 E+ d$ b% j
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    % `; ?$ B( }9 T2 E8 R6 \9 U5 o
  52.         SPI_Init(SPI2, &SPI_InitStructure);5 c6 [! W9 y- j4 {- ], c, g

  53. 4 u* D, Z' w$ [, k) D* J. i8 a
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);2 S3 r2 N2 B3 q2 h. W
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    ' S" ^+ c; q& [: U& r
  56.         DMA_DeInit(DMA1_Stream4);  b* x" {* y2 j; y2 |
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    $ _5 X* Z% P; ]' t  U
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    0 V; w+ f2 R1 n' H
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    % _' |5 A! z( ]+ Z5 N
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;, F* _  D7 w" ~+ Z
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    ; S( [$ V; _" E) [% l
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    8 i# z2 y3 x. P- d( S. m. D2 ^
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;3 o7 e# b/ ~8 b& k; _' U
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;. n" E& o  ?. }! \4 U
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    7 ]" k8 o/ A: o. x" D' m
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    $ I. N- Q, a: K5 c) c6 ?
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    9 V1 K; O4 K# @: P; @
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    * S* b9 n' V- Z
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    / ?4 i9 ?! x  H% a+ o
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;  K* Y" X5 w% t; ~  i" z
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;3 m" W6 h4 ?5 n; k
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    ! B( m* f3 |8 T( s
  73.   
    % L* J  d7 d3 O0 g& j' X
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/# P3 ?  F0 b3 {: a2 a
  75.         DMA_DeInit(DMA1_Stream3);
    1 {; O- N- l) ^; {+ e
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;! ^% n. h. l1 B: |1 c/ O
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    / y5 `. `8 M' H6 W% N
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];1 y4 g) r4 \+ V/ b
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;9 I; p! Z0 ^' U
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;+ c2 N* b+ j1 b0 v( W, d
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;: P: h5 k1 L& W- I4 [- h) V
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;4 j6 U) Z- L( L
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    ' k4 Z( n6 I" a$ F" B% i  w8 C
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    $ q! v* O3 z- P# }" [
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    ; F$ u( `& D4 p1 G' k8 s& t! X' S
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;$ i( }) N% Y( G/ v  T( O0 a! H
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    ; `' S* Y& |% W6 K9 F! z" I: k
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;& q7 n! v& [( p0 F+ G- }1 }
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    ) W7 b) @5 r' V/ Q: j
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;4 f% L4 @0 f7 V3 d# d4 D
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);1 s' v+ C& C& x. e. t& @
  92.         //Cdfinger_BspCs_HIGH();
    + s7 i$ E6 N' I% ~. F$ r
  93.        
    9 J. b* s( l) d
  94. 5 E4 R' T, z) C
  95. * z' P' g8 X! M  ]
  96.         //发送中断
    7 w5 |! V8 o8 v: ^
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    3 u: J/ d1 e* [% ~* `- n2 @
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     " `5 u: c% L! t1 r( X' J+ U
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;: t& F, i! l1 Y- x$ w* J& l) ?
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;/ T; F% }- @* ]  }8 a' k) ^0 J
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    9 _5 b& O; h* s7 p3 C# x9 M  S& x% I+ }# p
  102.         NVIC_Init(&NVIC_InitStructure);8 E8 B5 {& g, g/ b3 X
  103.        
    - Q$ W0 M* d; S# ?8 v- r2 W
  104.         //接收中断3 m& |( R  N' a! Y; B1 m1 x# x
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    " @. {& c* p' g4 v; o9 n, w
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     5 x( j( g' E+ }# X7 F) \0 ]3 ?
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    5 T0 q7 n# x( G9 o7 z$ e2 t9 [
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    4 G" m. g/ |, f2 d/ I5 Q
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    , `5 g/ d# G" \0 J2 D6 Y
  110.         NVIC_Init(&NVIC_InitStructure);
    8 k( e7 @) N& [) [+ e3 l
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    3 u; F4 z$ }. c' t2 W+ g
  112.         SPI_Cmd(SPI2, ENABLE);
      I$ {2 x9 X, f4 K& @6 \' g% y
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    2 \, W$ D+ p8 q1 N4 H% l9 V
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);+ T1 |% Q- g; o- K
  115. $ v9 ~9 e& z0 M4 }6 \( \8 s8 \2 q
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    5 `3 h! N/ A: @" U
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    ) v9 V' {+ Q& q
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);( F2 l3 S# v- h- `4 F( H0 Y
  119. . ?' m/ W2 E% |; J+ p
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    0 `( V+ l6 N$ B" u# @
  121.         {! r1 {+ t2 `0 K; W# t; v9 `$ _
  122.           if(ii%8==0)
    : u2 t. ?; |& |( H( n
  123.                 {
    & U  M1 ?8 R; M. r; c
  124.                                 printf("\r\n");4 P* W' W; }& ?1 q7 G0 h
  125.                 }) U  l" u8 i; J, W
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);& U! A+ n4 {0 i9 O; r5 {
  127.         }! b% \3 N0 a& `& g8 R( U6 ^: g
  128.         printf("111\r\n");
    8 t2 g  V/ d3 ]2 c2 a& \* J6 v) _  K7 ?
  129. }
    ) a5 `0 }1 h# w& l* K9 v2 j
  130. , j" }6 l% ?8 F* p
  131. * V1 q# |5 d+ U* W
  132. void DMA1_Stream4_IRQHandler(void)
    ' U% `6 i& `8 j& i+ g; p
  133. {: H3 H. f, p2 f3 f. w
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET), f5 Z: Y  S, E% i* t9 v& H
  135.   {
    4 H0 d5 n. v. r4 s+ e$ B9 r$ h
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    . ^+ K/ q+ q6 l! T
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    - r: c9 [/ X& J+ S" q( J
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);" h- v0 P5 |0 a3 j  I' _* R# [& R
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);6 a& M$ V. a. T
  140.   }4 c& j* f; A& n3 U
  141. }2 @: w% F# }# F8 P% E$ y. G

  142. 7 O: A7 s6 ?, O+ F! t# S$ p
  143. void DMA1_Stream3_IRQHandler(void)
    " Q( d  H7 y- D$ ^0 Q' i) Y
  144. {- [5 ^* o$ n0 Q) g
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    5 |; i* t6 Q5 P4 i: f, X+ [( w$ y
  146.   {
    # E: u4 Y, A2 W4 s
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    : J$ v* c% s" i; o# ]" X! {
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    4 P9 q0 `+ j4 w3 K4 O
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);9 h; j6 l2 S, A# A: Q1 J( M3 q
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);$ ]+ }$ g! C9 Y& h% [2 O
  151.   }
      d! L, F8 X* [( N
  152. }
复制代码
lovelifett 回答时间:2014-1-23 15:10:56

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

楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信3 G% i3 j5 t5 b' |% H0 A3 _5 I
以下是全部代码:# I: h8 o5 Z& H& Z1 `
#include&quot;stm32F4xx.h&quot;, C* o1 G* H6 R" U* \: d
void RCC_Configuration(void);
5 B+ R7 o$ I0 e4 l* K4 Jvoid GPIO_Configuration(void);% y' [& d. [# S( b3 R# c
void SPI_Configuration(void);! U) c- O8 N) ]. t: ~4 v  q
void Delay(int nCount);
: k. O- O. J  R! n8 e7 }int main(void)# ^& e6 h* O+ v  c8 [) o
{  RCC_Configuration();
( v1 |7 {' b0 m& U; E  GPIO_Configuration();
* Z( x% ^3 V( m  V  SPI_Configuration();
  X" O% C/ ]; @4 R, q, q6 Y5 C while(1)
- _' j, |* S+ ~) @3 _" V { int data=0;
; g$ Y+ m, ~7 N. `$ {3 t+ }$ C3 \1 _  SPI_SendData(SPI1,0x55);
! g+ ?# X7 p( L/ i- F: p; w/ N# ]  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
  w2 D; M9 }' J/ ^. Z/ d6 [  data=SPI_ReceiveData(SPI2);
( o; l5 q( K. v+ d  if(data==0x55)
5 {1 `( U2 j  }/ C9 d     {  while(1)
5 o  ?8 @5 J& e& O3 V             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
( x+ P4 h6 I5 x/ B* V/ g% X7 E& o                Delay(0xfffff);: s8 E8 R0 |. t; l
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);" A( T( p+ I# H" X4 ~# ~
                Delay(0xfffff);
2 S& k* _/ t7 b( ^5 H7 g( W   , [. n* a, u7 I8 b5 G
             };7 A4 U3 V9 u+ |3 g1 w! y/ V0 `5 z7 o
     }
2 z, `* O. P, x     else while(1)
7 A6 \# l: c! D1 u            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
1 O) _* h+ `9 R. ^+ B' ?               //Delay(0xfffff);
6 W3 \0 U$ p+ w5 @" x  C; W4 c" m               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
0 k/ K" D0 L, ?1 R9 ~5 s               //Delay(0xfffff);) t: h  m3 S  O3 ?# r) A' f6 x" L
   7 W: A4 h/ n9 r1 x
            };$ m" b0 q9 ^1 B, n& f6 x
 }/ i) O% h) v: ?4 J3 K9 i9 t) @
}+ G$ B" j$ r) ?" Z5 `% w
void RCC_Configuration()
. q( @) T7 Z% W! _2 ]{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
% z4 q. q' J1 g* _2 M  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
' p& f( M# \' E. l5 b  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   / q* A: j5 @. X4 _. y
}
# f; M  Z  Q& l4 Tvoid GPIO_Configuration()
* G; g# Z9 |, x{  GPIO_InitTypeDef GPIO_InitStructure;7 }3 y% x/ r7 L8 W* B( n6 ?
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;. X% S$ O9 A$ ^4 U% m8 c, g
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
9 x' b0 b6 R2 y2 D, x& l  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;* Y& T2 z+ I* w- q
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;. s* [6 ~) _, ]/ }1 k
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
7 w* }7 O, Q  s  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);* m& M- Z* P: K' q. m2 A
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;+ ]7 ?' n' _6 h& t! z
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;2 s/ O6 N8 A2 {* r/ A
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;, W5 g- U  b' \) ?* J! h! s( \' d
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
# W: z- ~# ?, q; y3 P: w. F  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
/ V3 C2 H( d) N1 F# J$ B  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);$ P0 [# k+ s, h) R5 b8 a+ }
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;  ~7 p$ e" M- H: H9 k) d9 j  k% P: o
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
2 J# I3 Q  f% |% ~}
* k8 j9 d1 L5 G2 G" l$ M. Lvoid SPI_Configuration()
9 e& t+ g4 @7 M6 o{  SPI_InitTypeDef SPI_InitStructure;8 ^. o/ ]) F  A/ m% [1 v. f
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);$ L0 D, b; F# D0 u  x
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);& W0 F8 }4 L8 r
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
  R1 n6 o' g- q+ p, s7 @   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);( [3 b. x1 H6 r& L
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
7 S$ `9 E: u" h) Q3 L9 a  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);& K/ Z! b% d+ u$ b9 p
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
" q2 Y" D' [6 n  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;5 ~% }- Y- g/ [) u5 E# |) E
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;. h& F' H) ^7 u! T/ q
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;8 p1 f; c  T: W5 ?6 c
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
+ Z) w1 u" Y- j8 r( v  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
$ h% o  E1 V6 Z- e- p' C' n' k$ ^   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
# U! h6 f2 K. S. ~   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
6 m' Y1 S( Q3 W+ U  SPI_Init(SPI1, &amp;SPI_InitStructure);. k* z3 J' y# L/ W0 R6 N& g
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
" M8 x' U. s) Z; [   SPI_Init(SPI2, &amp;SPI_InitStructure);
9 O* t$ x; ?5 ]* C6 \   SPI_Cmd(SPI1,ENABLE);+ m# M* D+ T$ z+ S
   SPI_Cmd(SPI2,ENABLE); 9 V8 s* K) Y$ i6 K
}  n& l; [$ `/ N  |' m
void Delay(int nCount)
2 p; v5 P! P1 w" j6 r. w{ int c1=nCount;
, y) _: l2 j* F/ T" o1 ?. L1 r int c2=nCount;
+ g$ [7 X! o& U& I! N$ C; s( o. t for(;c1&gt;0;c1--)
4 u3 d3 y( M3 ~$ s( n/ ^9 }  {1 O7 w0 |, H3 \+ V2 ?
  for(;c2&gt;0;c2--);
: Q; }  E* w8 l5 r2 } };
. R8 a0 v/ K$ b: N) r) N8 \" z+ Q}
* Z; y! Y4 \/ F- U, {6 M3 W先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:' p. N, p/ S- a3 k$ I" P/ Y7 p5 K5 X
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信/ y* ]  g; ~4 o9 @. ?; h, v: c- {
以下是全部代码:
: f$ `8 I, h& }. U0 l4 n#include&quot;stm32F4xx.h&quot;
& O- M0 o, z* Q4 t' [void RCC_Configuration(void);6 B& W3 ]8 T: u0 @% G1 Z
void GPIO_Configuration(void);+ r9 k. C8 |4 P6 [# N
void SPI_Configuration(void);
( u) H  P3 M) X8 G8 tvoid Delay(int nCount);
9 Y8 l2 }3 N( X; ~+ T0 cint main(void)
6 l$ Y! C( y( O5 W{  RCC_Configuration();
; w( O) T  A; z5 X: N& l  GPIO_Configuration();' ^5 t- k. ~/ X5 `  r7 f+ ]
  SPI_Configuration();
! Y& K' |, H  |. Z4 J. e while(1)' C$ Q6 r: V, A
 { int data=0;" i) ]& V( C: |0 u" `, m% k+ ~  s
  SPI_SendData(SPI1,0x55);
# N' F5 a. W3 z& l) A  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
( Y1 n8 P3 C& P( r3 Q; {2 I- O  data=SPI_ReceiveData(SPI2);  k2 u* Z' ^4 j5 F
  if(data==0x55)
0 b" X2 S6 {; X) E6 S3 v. N1 J     {  while(1): K  O- N, |5 |
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
3 K, t& M& ?+ Z8 \) F: E/ T                Delay(0xfffff);, ~- \4 a$ \; h2 S: o* G- E3 W
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
6 ^/ `3 N1 Q4 w% F2 `  a, Q0 r6 v5 D& \                Delay(0xfffff);# }* V. h: \! S- ^/ p
  
3 ]# I/ f( f4 w, f, R2 f             };. m  S% a2 @1 _  l
     }
2 b" a, j' Z; O4 I! x& ^9 j     else while(1)
1 P! h2 |* o: {9 B, I' `$ m5 O8 M4 U            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);- }) k. G7 z$ Y
               //Delay(0xfffff);
+ F. p7 S) o6 z9 M" _5 e               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);* b2 q: B6 y8 C7 ~
               //Delay(0xfffff);/ r: e$ a3 J1 \2 T
  
2 t/ V+ z5 {2 Y2 E$ K6 K8 @( i% k0 v: X            };# o% V; G/ c( \! @! P" ?* K: a* V
 }# @) S1 e* F3 n, ]/ N# k9 ^
}
/ o: M( l: p+ W7 c1 k7 g" L/ Z# x4 ~void RCC_Configuration()) L) R" e/ f9 N+ h% p  U2 l1 C( ]
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
- S% d4 F  ^" P# [& P, n( X  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
2 a9 w" }0 A9 s, W% T* r9 q  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
" M$ I7 Z* J$ d' B; s8 V  K' O}8 y* h( p+ \, T# u9 b0 q
void GPIO_Configuration(). i# K1 X" [  I$ I6 e! G; c
{  GPIO_InitTypeDef GPIO_InitStructure;( ?" P. Y4 t5 T9 T! |  }" u: e
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;1 ~9 D0 R: ~% L; P: n2 y
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
; V0 y* X5 \* m" B  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;# h& E! w' y0 T$ }- u: p
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;9 T3 I8 m1 J0 p8 o
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
/ x% c0 u' W: s. `2 D# w; f  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);. ?+ Z2 c  i( S( y% `
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
# d9 A! @" Y% P4 M8 P  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
! p6 ^8 @) z; P7 Z* {  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;1 N  Z5 k: z, {; R
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
( G  W! c! P9 H: c  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
7 B6 t- l! u( @$ F  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
. c# [2 w" X* b' S) `  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
9 G; _5 C" w. v# \" K* W  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
4 @/ }7 Q$ P7 A) _% B}5 N. P4 F, S6 n" h
void SPI_Configuration()' O0 O$ O# X' i2 F
{  SPI_InitTypeDef SPI_InitStructure;
  E5 M6 h5 h( q  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
4 j) t( D3 j, d1 F7 ~  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
6 @- f5 W; Z9 ~* f1 k! t  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);) X' S7 E8 r; V
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
+ G' J+ J! f/ C* f% {  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);( _* {% k( z! K
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
9 {1 e1 Z8 d4 M, J0 n" V+ X  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
/ ^# W/ V* C) B: F. O  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;6 ]! G' e" W5 a- P  \. w  `
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;& ^, |& E5 j5 N  N4 o
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;7 P& z9 z) C8 \7 G0 w" S
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
* P2 Z* a4 ~# Y" E+ L  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
, c" H) h4 P5 k7 f" w) k. N   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
9 i& r4 Z, q- n' f" s: N   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;% l' B1 k1 h& h
  SPI_Init(SPI1, &amp;SPI_InitStructure);% f( {, J2 N0 _0 w, n7 Q. }
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;; A, d# P$ S, n1 e4 p* S
   SPI_Init(SPI2, &amp;SPI_InitStructure);
: Z- E: [  J0 U8 E   SPI_Cmd(SPI1,ENABLE);( f1 A' s$ I- C& [
   SPI_Cmd(SPI2,ENABLE); ! s: d% ^9 \# J$ l4 z: t
}
) j" w. g" C/ v. Hvoid Delay(int nCount)
6 I: C$ A+ {0 |$ W; [{ int c1=nCount;: A2 D/ X, D. j7 Z
 int c2=nCount;2 N" Q; ~3 y# E0 M, w
 for(;c1&gt;0;c1--)/ R) ^  q9 s6 t) d" N8 H( f. f
  {! j5 y2 h! n  J5 R0 e) }
  for(;c2&gt;0;c2--);
* |% b  d. |! [ };
+ M+ l0 r! Q  ~6 p8 y* z5 H}% Q8 g/ h1 t- h. K5 X$ O0 Y) I3 N
先谢谢了~~
% e) Y7 x1 D4 o" o+ R 
$ E# U( m" z& M/ T
0 I2 \% i- ^* p! A6 c楼上的问题,看我帖子给出的提示哦~
lkl0305 回答时间:2014-1-24 09:53:43

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

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

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

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

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

回复第 5 楼 于2014-02-14 11:37:16发表:
  |, b8 k. I! J7 e" ~( Q 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。  e. f% w% r* V/ @  R
 ! Z- |- s/ Y, M5 ^- r

  P  Y5 g& c- n4 x多谢支持!!
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 运算效率不高

  
6 n& w# l9 d- ~  ^( Z6 t鬼魅一样的Hard Fault( G; @+ ~% T; Q. G+ I8 w
 - C# O! W4 K2 \1 _$ n+ f
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
8 e! b6 L4 p# W0 t2 y 6 o6 D; a8 [. M. k2 d8 Q, Y
咋解决?
chunlei233 回答时间:2014-5-7 19:50:50

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

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

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

DSP是MCU的短板啊

所属标签

相似分享

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