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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
0 i9 @# ]# W0 A) f5 n$ [: K2 `5 s
0 J% @& P. M+ F/ `, d  ]! u! C
. y9 E8 Z  z' H. j社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。; w0 ^5 E6 U4 s: L' y& J6 L: l

" w- O7 B+ O4 T2 p" h提示:点击各主题,进入帖子,可下载ST工程师解答详请
: S' J* `& H9 I " k9 [+ Y. r1 q* I( W9 S* B
! U* N) U0 |) j; _" v: i/ i7 C
一、通信接口6 Y' P* A1 f3 M$ D+ r
9 S2 ^5 {% G$ Y2 B0 z
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新
2 [% f; |$ E/ N9 k2 t
; @# F$ ~& q' n% F2. SPI 接口发片选信号导致死机. J! n. l( D+ j+ W

9 {/ L8 q& ^, h3 u3 J" a7 \3. USART1不能设定600BPS的波特率3 T/ J: r7 i- M7 n/ ~+ E

1 _% R7 H5 x% A8 k2 G3 C4. I2C 接口进入 Busy 状态不能退出
- M+ [/ l$ `. P3 C' U ) J  I4 X& U  p
5. 对 Flash操作导致 USARTU接收丢数据* p, N$ u) M4 i0 J, g2 [
. A$ w5 Z0 @8 y1 h6 M
6. USB接口易损坏
, l0 @. L2 T; F6 g# g3 z
" r& y2 r8 V& L( q2 j7 H7. UART发送数据丢失最后一个字节8 K& e& d# h4 U) c

; u* Q% m" t& A3 O8. 使用 CCM 导致以太网通信失败- o( d7 Z# E1 o3 y+ \* B% z
. n. `  ?2 X# T  ]5 F
9. SPI3 接口没有信号送出* h* h' j; J' k9 {/ N6 e5 \" w

& D- k% b$ ~: r2 I9 c1 A( x! K10. 时钟延展导致 I2C 通信不可靠
  k% k  H9 ?# g4 d9 P9 o
4 f( t$ t+ I5 p  l- r11. M0的USART波特率自动识别问题+ i* X' }/ p8 L( l0 G( P! ]0 H& G
7 @1 D& S7 ^+ @( b& I2 p
12. WK15 OTG做U盘主机兼容性提高
: `5 I8 f4 P" z" q* ?# s, O   v: X! R* b! n6 l, S6 w; N# {
13. 以太网电路设计注意事项
4 \4 @+ o6 u4 q; Y- S & Z/ }* \# e2 {. V
14. OUG主机库在BULK传输上对NAK的处理( y5 n0 F# U- x4 P$ p! D* Q, Q
: X: g6 G: m+ b: F
15. 串口断帧检测
2 g* @% V6 w, c( {! L% p) b4 b$ e
& i* V, j* W- m; H) e( `9 Q% q16. VCP例程用于数据传输时丢失数据的处理
. G8 R6 v+ |2 z' ~- l/ j8 I9 T* | % M% W) w+ m3 R! E, A, t
17. STM8L051F3P6串口UART数据起始位判断的问题
# [7 ]( k! `5 O  x. s6 a$ i
% R. l% m0 ~+ N$ S18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
$ L* {, W, H0 S% j ( v9 @& H* N1 Z9 J) D; }
19. STM8中UART奇偶校验的使用方法4 G9 x6 p! f8 I6 f1 V

  m+ f+ w4 ]6 f4 S: D20. STM32以太网硬件设计——PHY1 Z5 p3 ?  A' T* p% h5 @

; [$ Z  ]+ ~7 M8 a: Z1 |! X, N  Q21. 一个判断I2C总线通信异常原因的方法
8 h2 L5 v9 K/ o: h. a! \' H5 ^! S* Z$ l* R' C9 k
22. USB device库使用说明" `- i: b$ R! l: R% l& v8 F9 G- f
2 D2 q- B( ?& C1 \
23. STM32F103上USB的端点资源7 o+ ~6 Y6 u! g; G0 a
" a7 I* z' Q# S8 |& D$ G( e
24. 使用CubeMX生成TCPEchoServer程序
7 l  ?+ B- s& i0 B4 T+ j$ M" b+ `9 q/ w& Z0 y9 p7 W, ~, g  m
25. SPI接收数据移位2 {* f+ z/ V- A

' O. P; R* `6 c' ?26. STM32F0中Guard Time的设置' @3 F7 g) P$ @* H' ^+ B/ i* G
  R% O3 Z0 w& Z8 C% I' ]/ p
27. LwIP内存配置  }2 `) d' [( U! H8 J. q" A/ K8 L( O
  k* y. F9 C6 [  L. b% l+ @% q
28. STM32 USB Device的简易验证方法
. O, n+ O  V" ~3 ^+ N. S1 Y8 f' t/ K4 z/ e2 J8 c' u
29. USART 中断方式接收无响应问题的一种情况及其处理方法
* G: y/ X8 H- Q. m$ U. A7 ]& h% w) [
30. STM32 基于 Nucleo板 CAN总线的建立
/ g6 r0 e( B" O9 z
5 h9 T$ e, k2 x4 p- F8 W31. STM8 CAN总线的IdMask模式的讲解
# K/ i) c5 v0 n3 ]; X6 }. }# v0 [; x% `/ s* ^" i/ q
32. STM32F746ZG USB 驱动不正常
; K6 K$ S  g( A2 Y  a* B: {3 `' y9 s3 ?$ R5 G# ^) B6 Z; T& W
33. MCU在STOP状态下通过UART唤醒分析
- D% G6 K& v. C$ h
% t6 M% d! X1 ?6 Q& \4 j34. 通过STM32CubeMX生成HID双向通讯工程
/ v  D3 a5 g$ G
' C1 g9 X, ~; ~2 B% D1 T2 U5 Z6 X35. 串口工作在DMA模式下有时接收异常 + x; w. g* Y! K/ `: W
6 \8 Q$ ^2 R, V8 `
36. STM32 Bootloader中 DFU使用限制
. ?2 D& ]) R# ^6 y. Q) y5 T# G4 y) L7 C. B2 Q! \9 s
37. UART异常错误分析
" u/ |3 e+ b# D( v+ v& m" o9 P6 J
! v0 E% e9 ?  R* E7 E. B38. 基于Cube库无法检测CAN2的接收中断 ( ^" R5 k5 I4 u) T+ o: W8 a
" c1 e6 _: @5 q) j, l3 f
39. 基于STM32F7的网络时间同步客户端实现 6 |4 d% R- n4 x2 u

. [* d* Q1 H, S; ?40. HID与音频冲突问题
+ T% Y# Y% h$ @  @3 V. X$ J3 v% L$ [! W6 R
41. 在进行USB CDC类开发时,无法发送64整数倍的数据
! z$ N3 A( X5 y4 y8 Z$ [9 y& ^. [% T3 T9 m* g6 h
42. 从零开始使用CubeMX创建以太网工程
1 b( r1 X- |2 t1 D# c* E4 w
( d9 g( ~' t" O" J43. STM32F4xxx的I2C总线挂起异常处理  X2 h) \9 B0 }& j8 V  ^
/ q' Q$ ^% j: n- q1 v. c9 S
44. LPUART唤醒STOP MODE下的MCU
+ t5 p- ]% P6 n5 o  \( r* y0 c
/ _  a6 ^- Z6 V, n* E: p45. STM32系列 MCU模拟双盘符 U盘的应用9 Y. a, w7 B, L6 P' l0 x; Z
6 x2 Q4 E# L) {% k/ Y6 F' T
46. CEC输出的数据和数据长度始终不匹配+ L3 n  g$ |2 N1 M: b7 D

" ?$ K) i  C4 K2 v& ?3 ?47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析/ b6 {( w( L6 ~* d

3 i0 @: Z# {8 ?  o48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
0 j2 j1 B- C# A0 E: |6 r% i" F! `& R" R7 ~) `: i7 q* H! h
49. 增加UART接口应用时的异常分析
0 Y. s6 f$ j& O$ A  P( G5 t- D3 p
1 \! [  L% {8 C5 F$ x9 [+ Q9 f50.UART应用异常案例分析- b7 P9 y9 A2 B" D2 O

$ i, i9 ~9 B& G* n% s8 L# ~51. I2C配置顺序引发的异常案例
- h% e4 ~4 I! a& ~* ^
" y' h  z) E7 \52. STM32 USBD VBUS GPIO
! T4 H- ^9 P# ]  b- T' X" Z! U2 K; u
53. USB传输数据时出现卡顿现象
* r9 Z7 C, {$ {* h- F
9 B9 N2 }6 \, @0 }0 Q, F& N54. STM32的高速USB信号质量测试实现
% \' P& r! ~# b2 x7 ]) ^3 H, G
: s# r$ h, B/ l/ ]( r9 s4 e, F55. 基于STM32 I2S的音频应用开发介绍3 ]4 V' N. Q5 {, R, n+ ]
- v, k" N9 `% }1 n& D
56. HID_CDC复合设备在WIN10的识别问题  6 E, M4 k% {# D% M: D3 b$ E) _* X
* q4 a2 F2 ?) [, ?( M" F
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  
. h5 n8 m% Z4 ]( h) u8 s
" A2 t, m1 m4 L; X  ?58. 一个关于LPUART输出异常的问题分享  6 q- O2 \: W$ K

3 q+ c2 j/ h  h* d59.通过 DfuSe 工具控制程序跳进 DFU 模式. q! ~/ [4 {1 M( N# l/ @
( Z5 i! r; s/ K9 _- K+ N" I$ j2 N' i
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
7 t4 i6 _: Z3 ]  o9 X% X! k9 @9 S

1 Z2 Z' k# [' S6 L61.一个因初始化顺序而导致异常的话题 (2019.12.24). d. V& y" T0 \( T2 Q: l

7 E$ r; K) A# Q2 E( Z; b62.MC SDK 5.x 中增加位置环 (2020.5.29)
9 U7 C) i& m2 B; G

+ V0 D( ~* h4 o, ~# J( p4 o/ z63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)8 D& n) n6 r" x! H

! o2 ]# U% \- v" f( A1 _/ l8 L. Z64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)8 I3 B1 A# r0 P6 r. j* V8 L# E9 b
2 w! ~& i: m+ r/ N- @8 k
二、电源与复位
/ T. a+ H# `! o$ X, ?1 h8 P
3 t  r% k5 S' ^9 z" c3 x1. Vbat管脚上的怪现象
% n# g" M! Q. s  A
3 O5 U+ L: \/ ~& \  G& f2. 上电缓慢导致复位不良
5 Q% H5 y+ D* p5 S' f4 { $ S! y6 w' H; b% y
3. 关闭电源还在运行
* f) o4 k3 m# O* ?- C
" G" b8 i$ K0 P0 y4. 使用STM32 实现锂电充电器2 T! l3 ~7 U1 X9 R
1 `; }5 a" _8 }2 g
5. STM8L152 IDD电流测量
3 T) G: M8 l! }0 T: b
2 u, Q9 B1 A8 ^( b7 B! o6. STM8连续复位问题  M: `& C/ j/ C5 G3 h
8 @1 [. a) T$ i) H
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用, `4 ]8 ]4 j0 g( F; E

3 f7 J8 J4 ~! l% s+ b- h- }+ F8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流7 D& R- _* K9 G% S2 j- v- E
! o/ V% T4 e3 M! O  @" S
9. STM32F7与STM32F4的复位序列比较
+ E/ ]4 x$ k+ X8 I( N. x! Y$ A, ]7 @
10. STM32F107 复位标志问题 * b5 O9 z2 D& A! e  c, Y$ E2 i
3 P: U- O$ E; l9 M! X
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  1 B2 `( C8 N9 D4 i
3 O* c7 j- y! w3 b5 @  }
12. Nucleo_L053不上电也能运行3 z; K8 W. a# M& Q" l

% D" v1 b; H# S; u9 d13. STM32L4中STOP2模式下的漏电流8 z2 C2 g  H1 H2 N5 @; p4 l

# y; H; ?2 R: a$ b# T14. 在没有外置晶振时HSE_RDY异常置位* `  y6 V) f5 G1 U6 N/ h) e' x

7 T, q$ R5 P  \0 e) {0 h15. FLASH被异常改写   (2018.5更新)
$ {+ D' P9 h, x! z  C9 L. x
4 u4 f8 F, m1 Q( N" Q16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)$ H& w# I! V( j8 N  `

5 w: h* {' Y9 ~6 [- S% P17.一个 STM32 芯片异常复位之案例分析(2020·2.27)4 k' B: @6 H3 V, R  ~/ P* Q* L, T

8 R0 }" X4 M: B三、IAP和Bootloader- o. a& `, K/ J, v2 u

* D& _) K! u. a1. Boot Loader与上位机通信不稳定
! N& h; D' `1 m3 @% a2 {$ {- N / h6 a0 U' w; L4 ~. x# g! ?
2. IAP+APP 模式下不能启动 RTOS3 R1 f- P1 h/ l( g# J

3 {$ U% \% \5 w4 m' h& R3. 从 IAP Loader 向 App 跳转不可靠
- K6 F  q+ c. i0 Y/ L& b0 B# G & s. }2 d0 o, G8 ^6 V; k* n
4. STM32 MCU IAP例程跳转到APP代码简要分析9 v7 \$ u# V6 g& f" H
* K6 r+ i- X3 X! f: W& f
5. STM32F091从自举程序向应用程序跳转的问题与解决$ R, B/ s* Q* i, [* _  H/ M* z
3 G+ [6 z  ~6 J$ }* B* D% i- V
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
4 F/ G% v& n8 M: N5 \' l6 y
6 L% v: N. K+ R" l! E) V4 |7. STM32F0启动模式相关问题探讨
/ C7 d. u* z9 f' q" Y8 b1 B0 C5 B5 T6 C$ J
8.STM32F091空片使用System Bootloader下载代码+ O) a4 F5 S# i; B( A

* Y% f: m* w+ X; p8 |. ?9.STM8L  IAP 应用程序中编程指导
/ q! S' P/ |7 j$ x7 d" Y
5 _$ Q5 ^, o% ]' Z* C4 A% }10. 如何通过STM32的串口实现简易脱机编程器
' E- N6 K* o9 G0 _
% \" `6 J' d! n0 H11. 一种从用户代码调用系统存储器中Bootloader 的方法  & B* K1 s3 n) J$ z
4 y( q  B- H7 z2 R, @+ x
12. 利用 USB DFU实现 IAP功能6 \% _+ l0 D! T- u

. B+ A: \$ U5 y% [3 X. g13. STM32 Bootloader中 DFU使用限制; q9 e+ C3 x( Q& w! X+ V3 j
( E% X5 O, b0 u; E
14. STM32L011x和STM32L021x启动模式注意事项- h& F3 x. p8 E5 d/ q0 U% p) l$ ~
* G0 }& }3 h- ?- ]6 u6 @+ H
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
$ p+ D  k" R) R
  ~. j2 y3 r8 X# ^2 X/ y* o; w16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 ) `' Y0 r4 U: w9 B# y

6 _* e% ?' j! r# M' l6 c! w, z) ?- `17. 如何使用STM32NUCLEO 板来测试串口Bootloader3 d3 s# L: [3 l3 K% H

  N( b/ P5 I; u18. 在STM32L011上通过I2C接口实现IAP
9 ~& u" @2 J' p+ M! y7 ]
9 W% j1 o7 d0 i19. 在IAR中实现通过将程序在SRAM中调试的方法0 v; L) }: S- `$ p! J

; Q  m% k  n( \7 u8 i20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
: X) F2 ]' F+ z
/ D# a& M$ B5 _. ?- \21. USB DFU IAP 例程移植的两个话题
. e6 a2 |6 p6 j7 T
+ f& b- ~# r% A5 `22. STM32F769双bank启动. N2 C# j* r2 ]0 w! P" S

) Y  y$ \" j  Z6 ^23. DFU加载 工具 DfuSeCommand的使用/ o5 D+ R: d& Y3 s
) ~: g1 D2 r* l. r) Z. p4 o( {  j
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
7 |. ~, E# s, m6 \
. `7 {1 \2 H6 Y8 }: w$ k25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
! b: H0 _3 z% }7 h% c
3 Z& y' G0 L4 b0 ~2 }26.STM32 Bootloader异常复位案例(2019.4)
7 F' p% R& D/ m5 ^! Z' |  ]! a) A% v2 t  c: H# r/ A) T
四、存储器; L. n( I% d9 m. @, p: Y
' Z6 m3 M9 x8 X8 [5 R
1. 对 Flash操作导致 USARTU接收丢数据; X8 w  ^; s6 g+ E
6 n+ E0 v; q# R1 q" k
2. 使用外部 SRAM 导致死机  n5 M& ?- u6 v5 |. ?+ P8 ^
/ w& [; G0 P: e1 ?( s2 @
3. SRAM 中的数据丢失
, K5 X$ P* E, H& e6 I& J 7 r" N; k0 B2 a! [% B
4. 干扰环境下 Flash 数据丢失7 |3 E, Y7 i5 b9 ^
5 R4 p4 l: D5 }0 |
5. 使用 CCM 导致以太网通信失败8 W/ v, m& T! G: c! R3 t3 V/ q
9 y1 N) ]& v& a! k6 z7 O3 `! V
6. STM32F429使用外扩SDRAM运行程序的方法
5 ~% x' O  H: O1 l5 B% J+ \ . j6 V8 b# }3 f4 S9 @, {
7. 使用STVP实现对STM32L1系列EEPROM预置数据8 ?5 y2 u* T& j5 ~/ F

8 U" R0 w. C/ g& V9 H) {9 N; v8. FreeRTOS RAM使用情况及优化方法; u# s7 c6 V( M* a: H! `

3 w- A; H! b) g! H0 b0 Q9. 在IAR 6.5下如何将数据存放至flash中
* e+ n% k" G. U: y
, B$ c# [: w/ X9 l( v10. IAR下如何让程序在RAM中运行
( k/ [# u( E7 L
$ r6 w, I3 U8 E* I% G+ g11. RAM上电后初始值问题
  S2 x- P4 m" F! M% p& O2 a8 U& I# W5 r1 }6 N  E$ O5 [3 ]; q
12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
) r  Q* a. F9 l8 ]! k0 K# a
1 i& {# h; W+ L6 _1 D13. LwIP内存配置
. A4 g  S4 \7 G+ _( j6 w8 }3 V( T* [: v& ^* J: }$ S
14. STM32F2高低温死机问题
7 f( @# I' @( g+ Y* o5 I- |; C" f+ H2 y- J, Q) [5 |
15. 使用STM32F427的CCM RAM时遇到的问题$ y% J* c; M, @% L  R0 ^* E

7 z0 y2 P3 ?& Q9 X* S* r16. 利用QuadSPI外扩串行NOR Flash的实现  
( u/ B. r% x/ Y
. E* v- S9 j' f# S& Q2 B17. STM32擦除内部FLASH时间过长导致IWDG复位     
0 J+ \7 o# R6 R* E" L: I% O7 H0 m8 I, z0 q( Z1 R0 ^0 s
1 E# c0 b. s- v9 P8 q" g
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
0 ?. o1 D  T9 g$ X; ?! u4 D% D, p( b. I0 a9 e! v: r- m2 `! T8 I
五、模拟外设
3 N; }8 T3 m! ]: J
: G" v% ]" H" c* N1. ADC对小信号的转换结果为零
9 @0 e) ^. G- t& H0 m/ K # `8 I' f  m) g% [( K+ X
2. ADC键盘读不准5 r# z" K, h1 y' f" N

3 d6 r! {7 b- h3 @3. 扫描模式下 ADC 发生通道间串扰
7 |, q/ m1 J( c( ^
! D4 l" w3 T9 M2 g  J2 G$ p7 _0 A4. DAC无法输出0V的问题分析解决
$ n0 I9 B& P" _ - l6 s8 m4 X2 ], W9 P9 w; N% _
5. DAC无法输出满量程电压的分析解决& W- R) ]$ Z& V- G

, T/ J2 r! a0 {! i- U& {6. STM32F30x 的ADC 采样的傅立叶变换
  T8 Y5 I; P" ]4 {  v) d1 @. I
0 N# t4 q3 T" K) h7. STM32 F1系列 DAC的示例详解; b' S$ A! u  S( Y
6 [1 [) D. z$ l" N
8. ADC 连续模式采样浮空引脚问题
+ S7 z# V- m+ N% B
5 s3 S) Q; Q3 L2 x9. PWM硬件间隔触发ADC 6 ?3 \, T5 Q  T1 I
1 o' }4 v4 N- g6 G0 e" W, K) \" d
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC* a7 N4 M, V# R) `7 s0 |" z
" k) J5 v* ~1 J* i3 e
11. STM32L4 系列中ADC 通道配置上的区别5 ?! `6 t# k/ W7 c" g9 s- E7 v

1 ^% ^& z1 K9 S! O# }. S12. STM32 ADC模拟看门狗及其应用% E# m/ A  C8 s9 u1 P6 H" ]% U
" F/ X4 ?3 I& `$ v# s
13. STM32L053 comp2 比较电压无效问题 8 M5 W: ^! n" n) T

& J- y0 U' y( ?& ]; {14. 运算放大器OPAMP在STM32L4上的应用
' {% _2 G/ E& A' ~6 ]3 F- O, p
9 G" p# q& k1 A+ y6 Y4 R5 ]15. STM32 OTA例程之ESP8266使用 ' B# L. s% c% O) _" d/ x' \% g$ k

! [# S0 b% v  k" r; _; ?16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)- i% h7 ^9 q5 q) x

' M" f* e& P& Y! Z六、计数外设! i$ x0 K' ~) {# A
# Z  O+ |0 x1 @8 n, y: x
1. Watch Dog 失效
0 S, v7 K' \2 h* Z' o+ L * L# U, z7 w  x4 I$ {0 G+ b9 u
2. RTC计秒不均匀
6 O  f) u5 i. q( }: r6 @ ' Y2 @* E1 h  Q9 L/ l
3. 软件启动模式导致 IWatchDog 失效5 d; j* T7 U0 S5 V+ y
, L: ^9 P' C3 l+ `7 @4 _+ E
4. STM32F030R8 定时器移植问题5 _; h; T! H3 y" w( b9 u
% C8 p5 i3 o9 `
5. STM32F0使用RTC Tamper的几个注意事项! |! P6 X$ Q$ n+ o

- b" ^6 U: {5 F! M6. STM32L053可控PWM脉冲方法之DMA  ~2 P! B; ~6 g. J
) W4 O5 t: H( [* v
7. CounterMode,OCMode与OCPolarity关系" Z) H3 T' h  G! [& h2 z/ v% {
& H! ?; H) h7 G8 C- I: l# J
8. STM32L053可控PWM脉冲方法之DMA9 f  e, P% B* f8 h8 c

6 h6 P, j- X% D+ {( q* x2 u9. STM32F1通用定时器示例详解—TimeBase
4 l* A) b* f) s- \" L7 b) ]4 C! }$ x* D  c; `9 L
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals% H* r7 l8 _, P

2 F) ]0 J# S! ^6 q0 f11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生4 D/ K. ]1 K+ k8 ?7 k

0 Z$ G6 p! t5 Y+ l8 f/ [4 |12. HRTIMER的多种Fault事件联动机制
& S  K. p7 [" X9 y! u
9 H/ v! B) t0 z7 q; _13. STM32通用定时器 示例详解 —One Pulse
2 H  t/ X! g1 N+ d  |
1 b: ~- _/ B4 c; h- M14. 如何用LSE校准STM32F4内部RC振荡器+ p4 s  L5 g; i
6 H2 [0 J) e! V" Q4 I0 r! K
15. 一种使用Timer测试HSI实际值的方法3 L6 _6 o7 Q5 R7 C* e# L! A( K

: R) t0 n+ `  V$ {. d7 I0 G) |. D2 e7 P16. FreeRTOS定时器精度研究$ H5 y) o/ F. T0 y
( p" s  Y, k9 Z8 {6 b
17. HRTIMER产生多相相移信号
% U# Q# K: b' x9 U( J
# i  R, \) B  o0 a4 K+ I9 ?2 r18. 窗口看门狗启动时异常复位问题' [7 `6 {+ h3 M  `/ f( i

' u* F6 l3 C2 r19. PWM硬件间隔触发ADC
; T/ i: {4 t, v0 }
3 q/ v7 K2 K" S) a( W  g20. STM32F030低温下RTC不工作
! c! J( ]% _& K
" q& E! V0 S- f  {! a21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   ! @9 B1 s1 S+ [
' O6 f% R- l  Y
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29); ~. o5 S& E7 K' Z4 v! X$ g
  @! M6 W- p9 R( W2 \' k
23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
0 ?; z* B3 k$ v* C2 x. g
  W# m# ?& l* n7 s24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
, i% D- L9 i2 n8 ?

1 X3 _4 b4 u8 m7 r9 X  N/ K. i5 v25.MC SDK 5.x 中增加位置环 (2020.3.31)
- y, G& [7 I% Q& a
, @7 V" Q4 s" H( j
26.STM32高精度定时器PWM输出话题 (2020.4.29)
/ M! Q6 y. R; u9 ]0 j
' R4 S/ o( @2 w# k% v

9 }' p( I$ J% w$ H, I/ L5 F27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)
( j; V9 W. @# S  [+ J6 f1 p9 x

& ]0 i2 a9 I5 ~- i3 A, Q. Y  v8 e) u七、内核/ V+ E  F+ p3 e6 D* ~
! X; M$ N5 N+ L$ |9 P4 v# C7 q! C
1. 使用指针函数产生Hard Faul) o5 C5 V" ?. }3 a. V
1 D5 h6 s( @. I
2. 调试器不能通过JTAG连接器件
: ^( v  O& M  h/ e) \: m! Y, ~
' O  i. B$ B, V& v5 c5 ?' R3. 鬼魅一样的Hard Fault
7 k+ h7 N% Q) ]/ B$ s+ p; K2 O) B % K& c+ l; N9 Y3 Q
4. 进入了已屏蔽的中断[
5 N1 c- N% G  Q ! v% S6 U, i3 c, t* i% w
5. 浮点 DSP 运算效率不高
0 T* R3 \+ G; c, W0 H; G
0 n( ]0 S0 D- s# B9 D; R0 U$ g6. STM32上RTOS的中断管理
. d! v) l( F* c, K" A  Z: v  i
1 W- m2 O1 C) M) Q" _7. STM32F7与STM32F4的复位序列比较
( ]6 B0 v* }- j- g$ C
! G2 E+ y2 t+ d/ ^( g/ {& O' P8. STM32F30x 的ADC 采样的傅立叶变换& x' T7 m1 A1 \/ A: }
' \% q+ z  v# f
9. EXTI重复配置两次导致误触发中断的问题
# @) ^: a/ w6 s+ R0 J
' e& o+ C6 G3 z3 s+ ?7 R! h8 h; U/ J10. STM32F3xx/STM32F4xx使用浮点开方指令) Y/ o9 I+ _  ~$ {: E8 d* c% W

/ y2 @- m" o/ t( M7 X11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响" I* R2 ~7 o- j7 @
5 o# Q+ L" K, Q& O$ J! Y) @, l
12. STM32F7 MPU Cache浅析  2 ]. @) _2 e9 X) D% ]

; J  I8 {7 N& n! A% A( R6 \6 i13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)
$ P5 `1 ^( \5 m  r  X# X8 l) H( q

9 a! K9 ]8 O  B& v0 q* t14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)! |) r$ n" v7 `& B5 r6 Q6 I
" f9 f, q* ^9 _8 v; U

  o# S4 m( T% j% [4 g; e/ r5 |+ s八、系统外设. g% @& \( L) ]6 p+ y7 i

* d4 U' ?4 p& u3 A' g6 b& P# R7 N1. PCB 漏电引起 LSE 停振$ j7 B- ]9 J: Y6 @( k+ y
$ S( }3 z4 U- M) {
2. 时钟失效后CPU还会正常运行
8 M+ M. ~! G- R" u" e
& i9 A: i1 N- o3. STM32F2中DMA的FIFO模式
: b+ F& f& J( a! u8 B# P
5 Q& D% u7 G& ?: [3 ]! n7 e4. STM32L053的GPIO翻转速度的测试. f* h. ~% ^1 G; Y) b

4 q+ u4 s3 [3 q5. STM32F4xx PCROP应用
# g+ E% c' i  W3 C! ?& H
, \; P% c; E+ I6. STM32L053的GPIO翻转速度的测试
" v2 X. N$ ?7 `- O! o
/ S5 T2 c. ^1 p$ l" R9 _8 I6 W; t7. 如何在IAR中配置CRC参数
5 v: a* x/ a9 E' s" m$ H0 s8 v  q( E1 {
8. PCROP区域函数无法被调用的问题与解决0 S) _8 Y9 T- l( I4 W/ u9 x3 T

# ~7 Q( g* P  b5 w) C9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
8 V% _% c& p; N5 H
1 K3 A; X( `+ |6 a10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计  |0 K' S6 j* m  a$ U1 ?

' L( k+ X8 E/ F( G" k9 h& ?11. 如何用LSE校准STM32F4内部RC振荡器" @+ i6 M' z& v' ~7 Y
: B: E; f3 O: y
12. EXTI重复配置两次导致误触发中断的问题  ! Y& n. _+ P; a3 M/ p* \

! ?+ K% {" l% |1 e+ p- e0 W; `13. 时钟安全系统的应用(LES篇)  
- C* j! L1 w5 z& [5 u" A

3 g3 K/ v2 N5 N9 z1 K
14. 利用DFSDM开发PDM麦克风应用介绍  
8 J  c- B1 Y2 t* }" J
( G* f0 I! Z+ b- S) N8 ^  `( i
15. STM32H7的FMC外设在DCACHE使能时运行不正常
6 s" V  i. a+ m3 a8 H. A) V# R8 P! r( R( `+ g) f/ b+ K( F
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
9 Y7 v, C5 k$ `) u6 d' D* n4 Q( e9 H% N" |! u- P6 Z
& m9 D$ {4 _$ ]% t, p, W4 {
九、标签和收发器
; V3 J3 ~2 P9 L5 g  a5 M, {9 o3 I
$ ^  i0 ?" V1 U( x- j+ ]) I, m1. CR95HF的初始化步骤& e% N- I& ^/ M+ |( N8 E* t$ o+ K

- W6 h3 F4 F$ F( s% q& k3 R3 a
$ h7 V/ k) F2 @9 k# t- r
* Y0 f0 e- b% f3 L+ s3 R十、生态系统
! s6 x( ?9 c0 _" }4 {8 R7 C % A  ]5 K% O9 E( }; w3 @
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
9 X& p" \+ j& ]( F! n7 q
& k# x: L' h3 y1 I2 X5 E6 ?2. MDK Logic Analyzer 功能在STM32中的实现问题: [( M$ u  O& ~% I

1 ^) |  v/ l. T0 o+ W) [# }, g3. 在IAR6.5下如何将数据存放至flast中- f+ K% C" ?3 a+ \. V

* f( i2 b8 i: e- D# F- c* E4. FatSL移植笔记
7 E& s1 v8 |6 c$ z
3 R5 A5 D% p) F5. Keil中使用STM32F4xx硬件浮点单元
# M+ u/ I* @' Q  k) o- D # n( Q* M6 \( }% N% V% i- Q
6. 如何生成库文件(MDK和IAR)  i% T( _8 [, r$ j3 v4 A- v

2 I. {; M( C" Y- }7. Nand Flash文件系统解决方案
* m- x% w4 m/ V9 e+ t 3 D0 D2 r! a) Y' B1 ]5 _  i
8. STVD在调试时弹出“Cannot access configuration database”的解决+ |. ^& w, A5 A8 z* q
: u3 A9 K" E8 ?, O
9. RTOS低功耗特性的设计原理和实现/ G- r" ~9 E- R! n2 F# r0 I

8 ?5 \: H9 x# Z8 l1 _, V3 p% A10. IAR下使用J-Trace进行指令跟踪
7 t: H" Y0 S, Z3 s  J  C4 J* E1 `- i% X3 |. z+ f( i
11. STM32上RTOS的中断管理* ^5 I' e8 L9 o5 c( G& E( |4 w
( @, }9 I2 a6 _) i
12. IAR下如何让程序在RAM中运行
4 ^3 z1 c& ^  i" q1 ^& k) h5 g3 B& H1 u8 H- _' m( q; E: w' A+ G  Q
13. 如何在IAR中配置CRC参数; n* O3 ]5 k% J  Z! X9 v4 o' Y& ^

  w2 X; O" i7 k14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
1 ?% }1 }: Z( k9 }& J$ v$ B" u" `7 ^7 I
15. 使用mbed进行STM32开发及STM32F0的时钟问题! a5 H' ?+ [1 r+ P8 H. B  v( k

0 }/ |. |0 u% J! B8 \" m16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能6 z1 H8 Y4 I6 m! }# z, E
/ F, u" D+ h9 y
17. 多任务系统中的不可重函数使用注意事项
7 j/ t5 j. D5 J" O7 Q: i; G) f3 w' d1 `  Z+ u9 S; H
18. STM32 utility的hot plug功能
( `1 X* x; ?& H6 e
+ D2 P, D8 E7 T* N2 S3 }2 u19. 如何将CoreMark程序移植到STM32上* o4 s  N  D* X% |- q

# D6 n; s: X4 \% `20. FreeRTOS定时器精度研究- J% w2 h  p, I; x/ ~' `0 v. F2 R
# t" Z5 I) P* O- ]
21. 如何使用Eclipse和GCC搭建STM32环境
" ]! t& r5 w! j  W2 V- k! k
8 L/ `/ c& h) @- ~' T( ?, `" V& G22. 如何建立一个基于GIT的STM32库5 {1 {) C/ f7 n  X7 ]. x& Q; L

% C" O+ L4 f$ n  c23. 从零开始使用CubeMX创建以太网工程
8 Y. H) R2 H4 r$ ]: R# D0 q: {/ r2 s( r7 w/ E
24.从STM32Cube库向标准外设库移植FatFs文件系统# _( o: h" N0 c4 n1 B
& Z: C* s# V. O# C+ w
25. 基于 STemWin的屏幕旋转
+ D5 I" z' t- g8 X  E+ w- s
4 v5 P5 Z( Z: d7 Y3 N26. 编译软件 Hex文件烧写 ( x6 c  O* ]6 X
! \, g6 M+ s  @6 N3 [8 ^3 Q
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
' m' \8 E; @7 e, @6 D7 f+ o& o% N2 J5 s# j
28. USB CDC类入门培训  V# b( f9 j' t% a% b6 @" k2 R) @

6 F( k: `* o; V29. USB DFU培训
# @0 r# `4 I9 P' @( g9 V1 X  [- L' {9 {" O
30. 用于量产烧录的拼接Bin文件操作
7 Q, o. Z- P0 m; V+ \+ ]7 B
8 F: v% K# Q3 c( M2 G% j( O, ]  w31. STM32免费开发环境该用谁4 g4 V/ E% G, Q  D7 F

, p+ x4 Z  `) I8 f  t, }32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
. A0 F/ X% e  v0 r& R- U
7 ^4 O3 J' N6 t% a7 p8 {% `& G' p33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)
+ L, f( o1 e1 z- d+ y
) @6 j  @/ x% c% q3 w) L34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
' N2 G" c- ~8 c; y+ |2 f" ^+ N, d$ d1 Q$ v/ l% Y
35. STM32 FOTA 例程之 cJSON使用   
" f* N& {1 _: S$ W' g! ~; O5 }  H) V  p5 w
36. STM32F769DK 云端固件升级例程使用说明 - k$ y" R" Y* y: _: K$ Z& ]5 Z  s

* x% i# l1 A# t, y37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
2 g3 J8 y6 l4 V$ C: a* d' q' `) ]7 s* e* x- [4 k5 `8 D
38. 基于 STM32 的阿里云物联网平台方案 9 p9 Q2 |7 |, n3 Z0 J8 V
$ j3 K$ M+ W4 ^$ a/ }5 y
39.AliOS 任务上下文切换原理分析    A0 @# U8 q8 [4 |
2 x. w6 d8 {! \# B: `( p
40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
% ^! R0 A9 `8 B+ x5 Q' s
. ]$ |: _2 q) K) a41. STM32F769DK 云端固件升级例程软件开发文档  0 B  b. S2 ]% k" f( n9 y
5 E! h( a9 h; K
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)& |- u: K* a6 n3 L  ^& N, L
* k' h: W7 b0 M) @" }
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
" B8 k: }9 {) a3 P6 D. W# [% i* y1 V# m
44.零基础快速入手STM32MP1 (2019.9.19)
7 z1 V7 Y9 P+ M2 u0 g! z# E1 x! h3 M7 I/ h/ q7 Z
45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)* L. d( S8 U! H/ Y

! J  p% C4 L3 e  s7 n7 x十一、调试* j( h8 H6 q3 H( b( v, t. N" ^( B
. J4 g8 O! v2 W. {1 q5 K" J
1. 关于STM8S SWIM Error[30006]的分析& R* w+ M; X; ?. n* g3 w1 D: K* @
# q- o( F* K. g
2. STVD在调试时弹出“Cannot access configuration database”的解决0 [0 [4 a" U; _& c
- k. F" v* P6 r) r6 r9 V" Q/ \
3. IAR下使用J-Trace进行指令跟踪+ \  i$ y! `0 h3 ]

5 g# M( r/ s& p* P0 l4. 菊花链 JTAG STM32. e0 W" x9 s) I! U8 a* X: b

/ l/ E( `& N+ @; _5. STM32F411CEUx 能下载程序但不能执行1 |, p9 c+ `* [9 {9 Z

3 G% P  s- o2 V5 Y! E- h6. STM32F103C8T6 程序上电跑飞
, s+ T* q; k# t* k1 X5 o2 g% _$ `, [+ x- J2 p
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行, R; Q& `* X- x" R' Q0 t/ V; y
6 m  k" y6 T, i: H6 i5 R
8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  + f5 ~4 c5 e# M/ |. p3 B/ s

8 A; N- {: @$ D9. SWIM协议的GPIO口模拟! ]9 a) I' D+ u& q4 `
" u% B0 n; G0 o, v* s
10. STM32F091空片使用ST-LINK烧写后复位不能运行用, b4 T+ _' a$ s( B4 l7 t2 `9 z

6 x' k1 T: f" D4 b; y% q11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)1 y! g  E0 @! R6 A1 f) l# h1 x

3 B# w4 m- s: a% q  [9 \12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)% Z+ Q. L' Z+ W; P# H
7 K' t' S) o. G- l4 [; B
13. X_Cube_ClassB代码移植 (2019.12.24)
, \( r: h+ n& f
  n) e9 Y$ j0 {, G
" k; @' f* A4 {2 r* W5 Y( U3 F
14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
1 J( b# W% A2 Z" L
" q6 Q6 k% V; D十二、人机调试+ @# c" }/ n( B/ A6 ]' ?7 c) Y

* Y* ?- y9 R* E- x4 I1. 一步步使用STemWin在STM32上开发一个简单的应用: T5 S# s  @9 M4 L, X0 N5 S

/ `. D/ m3 G2 N8 g/ U# `2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计& O% M# I4 |# \+ j  U% \

4 z/ c# n  i5 R3. GUI方案中ALPHA通道处理介绍" j' e( i0 o6 Y( C. U5 ~9 W! q5 ^( r
0 y* B$ e, J2 r5 }
4. 基于FMC8080接口8位LCD的STemWin的移植
- ^: R/ @: L" ~& l  Z' \) h
, H7 d: ^4 C1 y; x! {& C7 g. i( F5. TouchGFX中Callback模板实现原理 (2019·9·12更新)% a3 b* s/ ?3 V4 b
2 m) C1 w0 ^0 H' z/ B/ J
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
  |% `, L! q3 o: R$ T% D1 s
7 [  {! v. {2 a' L% y' U7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)% k, ^- I* W8 J. ~8 N9 ?- e
/ n3 |& f2 E  J4 S( x
8、STM32L5中如何关闭trustzone (2020.5.12)
2 Q( E/ {$ o# @; ~# E7 d6 D1 k/ ^2 \% y- `" ]1 k% M
十三、马达" d/ M& t0 s/ h! G- k

, z) w. M/ W, B
1. 电机控制同步电角度测试说明6 X; Y0 z9 s& u) r% X( A7 k4 p6 _
2 E2 v8 Q3 {/ y1 m& }2 M7 m4 r

/ k& O  ~* g1 V% B* P* d
' ~; [7 W4 p; }' |8 y) N+ ~  C十四、安全- {: l9 L, j) z; Q+ P! g
: P3 o" @, b$ y/ u
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)' A# [  J1 _$ z8 s

5 `# ^4 D3 g; w+ {3 H  `- }/ N
: T" r) q4 ~" i2 v( c4 ^十五、其他) n# k2 x# [. R/ t- P  z  l2 f

! B( b  S+ P; P1 A' F1. 跳不出的 while 循环
- H7 F7 v1 e2 M5 V4 s9 P0 w1 [ 7 E/ Y) [$ f' Q, F% O
2. 外部IC连接NRST导致MCU内部复位信号失效的问题3 r$ t* k- u6 e' x2 R
* t; N  I. M3 I  o5 f9 a& }" c
3. 潮湿环境下不工作
- F7 d" W8 h% ]; K7 x# \! d( F
4 c( w0 ]! D5 O  M" Y8 e. `9 z4. PCB 漏电引起 LSE 停振# r) @% q) L& ^, t; c+ X$ }

2 T/ ^2 l; f# V6 r! e' t5. STM8L152 IDD电流测量, F, f* R- g8 q1 f
- @: N- K- z1 B# ?* Z- U' y9 Z6 v
6. 使用STM32实现锂电池充电器& c4 y8 `1 t/ c, B. o$ d- ~" n
, A) ?' |% \" Z8 V) ^9 i; H
7. STM32_STM8硬件平台基本检查
3 f: g7 b# q: n& @. H& R5 A4 _7 H2 A$ S
8. 验证STM32F401在STOP模式下的电流
( P5 w8 D: n6 O' S8 ?9 u+ e( B2 T0 o; j5 e
9. P-NUCLEO-IHM001 电机开发板串口调试指南2 t, o0 D/ J4 F7 y" J. A
, ^- f' y1 b) k: C6 D6 L
10. 一种计算CPU使用率的方法及其实现原理8 c* |) x1 c: w+ H6 {1 ?

$ o) s4 e4 n, H3 u# d# `4 T4 S7 Q7 f11. STM32 RTC不更新原因分析8 E( e& {6 t! w/ B2 ~

6 p# A& V% E# z/ J' M" y6 }9 Z& Z. g12. 关于ST库函数的代码性能对比) E) f' L& ?* T0 q9 ^7 r- {2 C
0 [( U2 W) r3 J+ F2 x
13. 在IAR中实现通过将程序在SRAM中调试的方法. Z7 J' ]9 A% R4 M

3 X2 T1 b  y  W  Q9 y" j14. M95xxx EEPROM写保护配置
7 J, _& ?6 P1 f, p% m8 S7 s3 V' K! T2 P  E7 {' v
15. 4SRxx的GPO的属性
' T+ x! q. X/ f; _7 u6 H" Z( R; T7 z6 u' `$ Q
16. CR95HF的初始化步骤
: b: @: O9 O0 \, V% \! A0 d8 r* @; f, Y, o. U& i& G. o
17. 电机控制同步电角度测试说明  ; F- G1 M' U4 X' Q( g0 P( j
. G2 p4 _; Y0 i
18. STM32+BLE通过 Notification与 Android应用程序通信的例程
/ i5 x8 k- ~; Z2 V
1 L% ^- f8 t- t& C. g2 F- E) v& [19. M95xxx EEPROM介绍3 J3 P2 ^* _  A6 h1 g

8 o& r( G- G0 p' e20. STM32 DFSDM测量温度应用 & @+ i9 n& L2 U1 v9 v2 A

5 I$ z, a2 d# r. X2 s21.代码实现PCROP清除1 m# f& B, ]& ~( i5 e# ?
- W& v  B7 n& P$ \. I* f
22. 理解与应用MPU的特权与用户模式0 [) Y7 a' A; i6 T1 h
1 o6 a" r+ `- O* n
23. 用于电机控制单电阻采样PWM变形信号产生, X1 Q, b- t+ S) X2 y- s

/ ~- [. q* t# l7 H% R7 p24. STM32L低功耗模式唤醒时间测量6 G+ j5 S  V8 [

8 N% _8 e- D: R7 H3 N7 |25. X_CUBE_SPN7程序电机启动抖动问题& B; h4 c" q! ~9 q: N" u3 _7 H6 f

& N: N  q. c. ]# X. R, t26. 发现STM32防火墙的安全配置+ l; y1 G2 I; x2 C3 K

& ]9 A$ G% z6 E, o27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改" l  j7 }" z2 l1 ]) ]6 i

# H; }. r. \& W2 y28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
* m+ c* c1 V4 h) R
9 \+ F" [5 m# A- S
温馨提示:
# `7 u1 [% A8 x
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

2 \* i& e/ b# l# A  z; i! C' l8 Q5 }1 M" d9 n

- {" \7 S( `9 h; k' j" G
  C! S3 d+ T) _8 O/ i, f6 g! L
/ X9 A2 {3 `9 ~/ W  H1 n* @$ U3 I3 s: k2 H/ g. D6 S7 ~) E; r

; H- v) e! B" W, G7 n
# j/ s$ H; Q+ m6 g* w4 j7 h) k5 _  ~1 j* S! x
( x2 M" O5 B; k5 z

7 k* O+ U# v: @& n: \

评分

参与人数 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
好详细,多谢分享
  B( i$ g8 [; [: z/ l
5768340 回答时间:2018-1-13 14:42:54
HI  , |8 H6 t( A4 w1 y3 O
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
8 ~7 G0 `! ]- W5 o$ B; x8 N   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    ; p7 [3 U# z$ {$ Y* n
  2. 函数名称:Cdfinger_Bspspi_init* P: @! S/ _6 ~! I. Y( W; A) T% V, F; C
  3. 函数作用:spi初始化函数# D. N6 |  {7 C. }7 n& [3 C- z
  4. 备注:
    8 Q) G  s9 R  {( ?/ |5 i& b# [: D
  5. ******************************************/
    " b2 |( W; ~7 K- u+ [5 k
  6. void Cdfinger_Bspspi_init(void)0 Y, d" I& `" d/ |
  7. {3 K8 y, g/ G* H0 f& v2 [
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    ) L) R( z- T& D; b* P6 u" y. \
  9.         SPI_InitTypeDef  SPI_InitStructure;
    " W# U+ {6 c; |2 q6 k" ^- ~
  10.         DMA_InitTypeDef  DMA_InitStructure;
    ! P3 U% V8 ~0 J/ s, R* H5 h' ]
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    % M7 v$ n& q8 ^8 B! }
  12.   $ P+ C/ F* j# K
  13.         int ii =0;3 l9 D: W$ d$ w( L, d
  14.        
    ) m4 [* K; b( J! h. Y
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    7 ^$ q5 v* m3 b  v
  16.         /*!< Enable SPI2 clocks */
    9 Q8 X- X$ ~% L# |/ K
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);5 o' y" T6 H3 s9 B) w7 I: m
  18.         /*!< Enable GPIO clocks */" M4 K. P: {4 j9 ^) c2 |
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    ( `* s0 ?( y# J% i5 O/ J, _
  20.         /*!< Connect SPI pins to AF5 */
    ' q$ `8 f+ A) {
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    $ ~4 X2 r6 Z2 }# X3 o
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);8 w3 N" f* Z5 P; u
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    ; ]* Y$ y0 w/ Y+ k

  24. 6 d0 s' X" I* X" [
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    ; l% l8 y* w5 ~: `0 D+ ]
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    " }1 n+ P: n: Q* W
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    : a7 e  j5 D& O. z6 i' _$ R
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
      C9 O9 d1 p8 M# Y& A( ~- _$ q. _* U
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    & J- U* H. D) b% k3 @$ e, ~5 r) ]) V
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);! _8 k+ d. i. j. S' z, \+ r/ t

  31. # V8 x$ G0 P( S5 h
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    + q" v) m5 f! y' f, K; {$ [  r
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;4 |- J6 J( ]& J" y9 }8 T
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ' {# K" O3 q% I- F
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;1 U. x) c: P; n+ K: U4 X0 g  s
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;, \1 ]& @  r# J2 t0 A0 i8 g
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    9 J; ?6 r4 t$ ]  D
  38.         Cdfinger_BspCs_HIGH();9 Y8 N# ~5 J) m1 {5 Y
  39.         //Cdfinger_Bspdelay_ms(1);  T- e6 m( e* q1 Y) v. x. ~5 D
  40.   //Cdfinger_BspCs_LOW();
    . d* M/ S( ^& i. b- G' w% k6 Q
  41.         SPI_Cmd(SPI2,DISABLE);
    1 p& I0 s( K7 H
  42.         SPI_DeInit(SPI2);2 T' v6 E2 o' W& {
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    ( a/ U8 S* E- k6 i: r" N" {
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    8 A. q* \( _9 q" n4 T4 o
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    8 W1 L  p! @( x' l5 d7 [  ]
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;+ t8 _2 v( `1 c" L. Q) |0 Q
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;7 Y2 N6 Y$ ]# V8 T; J
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    . J! b- X% Y6 Y' W  A
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    - h& E; P! @7 M2 d0 M
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;7 g" h. c# X3 s! z1 b
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;+ w. a* d* y! f+ B: i& Q% c. U
  52.         SPI_Init(SPI2, &SPI_InitStructure);) k& b' |( w1 V3 S0 w% ?+ J

  53. 3 T! S* i9 y2 D
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);2 S) D5 C" p+ i$ F
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    6 I6 R$ U, K9 F" p
  56.         DMA_DeInit(DMA1_Stream4);
    # D( _- Q6 Z( T
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    ! e7 h1 s" n* ~7 ?' g3 B
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);8 t) L* B7 |1 I: l7 f% o4 f2 v
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];& C+ M' i! W( N8 C, ^
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;2 t; F& N5 F9 y9 l) t
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;5 M8 y( Q! Y) ~# ^; q- x4 E
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;6 [" ^& c8 }1 K) x" f: e
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    ) j! w% I2 S7 j/ G. a
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;  G+ V: C$ s5 |- w9 A
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;% {; Q/ y3 p' g" X$ m, M
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;( l! ]$ f+ f! P% P9 ~' b7 p+ o" a. M
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    $ G) {- x4 H0 S/ b
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    9 b2 `& i3 A7 {" R  W: ^
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;5 S/ K  Q, S5 L* d: f
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;; H$ B: C; A6 {3 R2 k! W- S
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    4 f1 ^, a0 c: m( \4 |8 t( \3 S* O
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    7 z3 Y+ f; x/ \
  73.   - X) n9 T7 L: d' S# V( N
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/2 M- J) ]1 I3 x$ j2 j
  75.         DMA_DeInit(DMA1_Stream3);
    9 J1 ?5 L" v3 ~$ K! M: s" s1 r: ~! M
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    . I. V  e4 Q8 M
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);& P4 N, f* M. g, K. d
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    0 V# f1 g+ o  Y5 O
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;8 y3 {' ?& D0 O3 U* y/ b8 g% r$ v
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;  Q4 e7 A0 a  o' H3 W
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    2 y0 p3 n3 c! N2 g% d2 f
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    3 F8 X( T. a* i0 @5 c8 ^
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    + d% e6 {) X; j4 |8 i: f
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;- x4 r" y8 y/ Z
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;3 J, Q$ H" r( P  h0 E
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    ( k& F  W8 ~" X& J
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;) G$ P, a* w  N  t3 t' J( r& C
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;' A' k7 n" ~1 D8 N0 X* f
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;  B, Y' r: L: f. p5 c
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;$ E2 }- ^+ I* b# _' w5 l
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    7 n4 d, ?* c* C
  92.         //Cdfinger_BspCs_HIGH();
    6 p8 G# K) R5 O2 \0 J9 z
  93.         * Z) D5 {: V7 g; I7 ?8 A
  94. 5 V6 m4 D1 D2 d& y

  95. 9 Q6 ~' K# {9 B/ d  }! d! }
  96.         //发送中断
    " B" _* G) B( o) d
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);' n9 B' y) P& k+ n6 r9 }% p* c
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    ! M9 y$ A2 G5 |) E4 m: I
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    / t) J) q6 j& Z7 A3 d
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    4 W, q5 y+ g8 g, d4 v
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    . \2 m) F/ d3 F
  102.         NVIC_Init(&NVIC_InitStructure);# S/ ^$ V; |% |/ g* c
  103.        
    / ?. V* }1 z" \  o5 j
  104.         //接收中断' E, n3 z6 w3 I/ r( ?; [
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    + l- `9 ?8 L  O% e& }5 F
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    % S5 f; p: I3 V+ \1 o9 z
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;' ]; O$ @# D) Z: `. l
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;3 J, o. J: Y* Q2 X( D
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;3 X& v/ o# r2 F) d% ^
  110.         NVIC_Init(&NVIC_InitStructure);
    ' U9 S' g; \: c  P0 j
  111.         SPI_TIModeCmd(SPI2,ENABLE);2 ]$ B; X0 H% ^
  112.         SPI_Cmd(SPI2, ENABLE);- g) G' ^! ~6 N9 l6 T# K6 S0 Y! x. |
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);9 o- B  i5 h+ A/ _# X
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);2 K- u8 h9 P, G2 `" y
  115. $ ]3 b* D+ j- ?7 G3 Z
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    ) Y$ h% U" T3 s% U
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    2 B- C& |, g' x: f
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);( p$ S4 `$ B0 C5 }1 N8 A  \
  119. + N' D' P- `6 m& P4 N
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)  d5 q: |( H& N  _
  121.         {
    & ]+ ^2 k, r1 g, Z0 [4 [0 q; ?1 O
  122.           if(ii%8==0)* u4 m* C6 v0 l7 B, o% X$ C
  123.                 {, g8 V! f* Y7 B7 T/ z" N
  124.                                 printf("\r\n");
    0 ~, T, S* p' M. {
  125.                 }' L# C: |! \0 I+ ^
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);$ ?) k- W* x" u
  127.         }
    4 I' g. D' n# U0 v- z' f
  128.         printf("111\r\n");
    . L' s6 H. F& O% T" B9 y
  129. }
    * U, I" V) R4 F  R# Y! |: D
  130. 3 k6 [* z0 Q, G, Q; c& p% I
  131. 0 T7 t' N+ t* g; L3 k6 c2 m- ~  U
  132. void DMA1_Stream4_IRQHandler(void)* e' t+ T  [8 l( U
  133. {' F- f! N5 Q2 d5 B- T
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
    7 N3 j8 v+ D. I
  135.   {" p6 a9 H' S  d  ^) A5 T
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));0 A" o8 m9 J' {- E" i% J
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);2 K" L' @4 Y! ]3 G/ [6 F% B' V
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);% H! M3 ]+ v" L( E3 K& Q6 }
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);/ W5 R/ V8 f" F/ l
  140.   }
    4 J) y+ w8 ?2 p; \( m4 }
  141. }8 d) j) d5 u/ f. v9 N7 G

  142. + q; v/ t/ o' g1 x1 G5 C0 G4 C7 L
  143. void DMA1_Stream3_IRQHandler(void), ?# n% J( T4 Y6 Z4 z8 v
  144. {
    ) H( I  g/ H' f. \* ~
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    . e2 j. c, z0 t9 W, W
  146.   {
    ! U: F, F" t4 R
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));4 {9 x, q1 l. e2 _8 u) A$ A; i
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);9 h5 o$ @& m: [* _  E- \9 V
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    ) c+ W1 S8 e. H4 j
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);% K3 V0 y% @: p/ v  F5 j
  151.   }
    ; e9 u3 b& ?2 A( I% I# F, L
  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的波特率是不是必须为相同的,才能正确通信" y% o6 [$ l4 X; x  c" w6 E/ z* T
以下是全部代码:4 F- Z' [, F; k4 n/ I3 c: G- }
#include&quot;stm32F4xx.h&quot;
9 z: P$ q3 D$ |+ Qvoid RCC_Configuration(void);4 K- d! `! C* m+ X
void GPIO_Configuration(void);4 F7 X' x  {) Q( m: \
void SPI_Configuration(void);
( B* ?" [2 L9 Jvoid Delay(int nCount);2 I8 {% T& ^9 V( A
int main(void)5 ?! P  D" G& `, @* a& @5 q3 `& [
{  RCC_Configuration();
/ u% d" T( j5 H  GPIO_Configuration();
/ D/ y3 W+ |6 T2 Z2 p  SPI_Configuration();
$ |8 y$ b5 s8 s while(1)* W! T: N4 X3 \
 { int data=0;
) w( k% N+ M2 }* I3 P  SPI_SendData(SPI1,0x55);$ I( y/ y) D' ~# |9 h
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);   ^; l; x: {; C+ U; K5 W
  data=SPI_ReceiveData(SPI2);
3 T2 ]4 l7 f4 a- v7 Z$ m  if(data==0x55)
# K. d1 Y1 j! U" I) R! [     {  while(1). b2 ?, C/ W% T$ ?7 e
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);5 q# Z/ s% o, I# w/ ~8 ]
                Delay(0xfffff);! h, l' N  r# [2 g* d6 R/ o
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
. ~" f7 [: U( I' W+ z                Delay(0xfffff);3 b( o3 s, }  D2 f. y8 N* m7 s# `
  
- D2 T( d, L- E2 H4 n2 m6 e             };( I+ e+ [* {: X6 }3 N6 P
     }+ t& e; j. F% J6 n5 G" m4 T2 Y& H
     else while(1)9 M4 U: _6 Y* m1 s/ O, k6 N
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);# t# W8 t- R" v6 |7 A
               //Delay(0xfffff);/ L! L: r! V2 }  f0 S- _- _
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);  m  w2 ?5 V% T2 p5 @
               //Delay(0xfffff);% g1 y- e- k; _( S$ M) V
   # k: ?7 @- g; Y4 u
            };; R. M6 ?/ F2 O
 }
/ w4 k8 ?8 q* ~2 ^}1 @0 E$ b$ g8 V/ H
void RCC_Configuration()
& w+ I8 a" k3 w{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);% c( f0 u3 l3 r$ W. w0 [! _
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
) o$ z/ g- h* V) s  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
! K5 ~+ S, @0 k# ?: {}
6 [7 V/ ~( c; svoid GPIO_Configuration()0 R, P9 V7 @# n( _" b$ o6 w$ }
{  GPIO_InitTypeDef GPIO_InitStructure;# z- Q! _! W% |' j* C
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;0 z+ }7 f) g$ W# r2 i1 |
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
( K$ h0 E' Y- ^  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;# |0 k  s1 W/ K4 O0 K
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;; L  r9 A7 [  {3 c: N# T2 d! i( N
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;% b6 T* T) U5 S! V5 h' c
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);- K# `! A) X7 U" }7 N
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;. W- v7 R8 O' a' X. L7 i" l
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;2 K0 E1 i3 ~$ _7 ?3 n
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
$ ]# ^! [2 v8 @: O7 j  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
2 v4 x( k5 x6 P  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
6 ^0 e) ]1 B6 c' V* ?  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);/ S! Q& ?7 _) c) |, t3 u! l1 S
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  J/ }0 \: r- I  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
% k% u, x; l! W5 L}3 A1 g3 p+ Z4 Q
void SPI_Configuration()
+ M4 a" E) z" V' `! p. |{  SPI_InitTypeDef SPI_InitStructure;+ x0 k0 _8 k3 M4 g9 y: A, f5 q
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);5 O8 v3 y3 t: W
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);8 \8 [# [& ]% e  ~' V' w
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);: ]! R0 z1 T6 B
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
' a9 Q2 }. f1 J1 G0 n- M( L  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
9 b, z$ K7 |0 ?6 n  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
' v( o% _7 p( F4 r7 M6 Z4 S  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;' h: J+ _% }6 J2 r0 _) {
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
1 l& J1 T) o6 X" G/ T: K  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;8 Y! y. D9 N. c7 w# Q5 P1 J* ]
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;6 s) R: Z: N; @& M5 Z5 q
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;$ _. z4 y% i5 M8 [6 [
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
1 ]0 Y1 Q) W( e6 [* @; l   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
( G% L9 L2 k$ S$ O8 p4 P- I! A   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;6 l3 F8 J+ a: V* E" O
  SPI_Init(SPI1, &amp;SPI_InitStructure);
) r0 M! R& w1 ]9 K# D4 r9 G  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
3 E( p8 @- [6 f* }7 \   SPI_Init(SPI2, &amp;SPI_InitStructure);8 U, C5 h! g2 Q+ U# G8 j8 G( d
   SPI_Cmd(SPI1,ENABLE);  |4 O/ C+ K$ E
   SPI_Cmd(SPI2,ENABLE); ' w% h! s8 \; d1 m- O
}
0 |- r9 e6 `; x3 Wvoid Delay(int nCount)
% k: l6 w! l4 N8 g  v+ l{ int c1=nCount;0 s" T, @5 v  g% W2 i& I- C6 I
 int c2=nCount;: d( v7 S8 J3 W1 c) g  e
 for(;c1&gt;0;c1--); \9 k& u. |9 d) h% @1 z# c6 O
  {* W2 h& `' h3 H. f; E) }
  for(;c2&gt;0;c2--);3 p$ A1 m2 k0 L$ v) K/ x
 };
2 a5 e+ j7 \1 _' S; {}  D. B! N- f6 x8 P& m& f) ~
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:/ a3 k+ K$ ]+ ^! S1 |/ q
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
( Z' `( s! r- {3 l9 ?' t以下是全部代码:
* L! E4 D9 Y$ ~4 A#include&quot;stm32F4xx.h&quot;
2 S) X8 ?+ j; x7 Y$ E! _void RCC_Configuration(void);& r! I7 a. e. ]$ ?
void GPIO_Configuration(void);
# e/ P! x- N% C4 X5 c+ Q0 gvoid SPI_Configuration(void);
# m. a6 M* s6 @2 Z( x& rvoid Delay(int nCount);
, v6 l3 @$ k, _# A9 r! G6 K) a7 @int main(void)
3 y. v; Z( r6 u: u{  RCC_Configuration();" @  t5 \* `) g0 N/ A; v- i
  GPIO_Configuration();5 N$ @1 M% U1 \6 p
  SPI_Configuration();6 K! w$ {* Y0 _9 e  k/ y# R
 while(1)
$ l; D& p6 Q- H { int data=0;# O& T# b5 r- ]% z: E/ W, P7 s/ \! X- |
  SPI_SendData(SPI1,0x55);2 y% r2 D6 }- S- A9 |5 J
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
% l3 q0 m9 n& }+ V6 b7 Y3 p* e5 Z  data=SPI_ReceiveData(SPI2);: I3 N5 S0 L" Z! ?3 Y; j
  if(data==0x55)
, U4 z; [7 E, }& F* Z5 e     {  while(1)
# _& p( p! L& E! d$ u0 }/ k. j             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);$ f2 Z' ?) B3 A. W0 ?6 j# R
                Delay(0xfffff);8 V, t7 u6 q: s
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);! d5 Q8 Y" n* l- j, U6 R9 u
                Delay(0xfffff);- h! E7 U) h8 m' D2 v
  
! v! ?$ z' [/ P! u" O9 m0 `/ L             };# p# a6 X3 E! `0 Q9 Z7 E4 H
     }+ e" I4 y: v# w! \5 C* w) u; c* S3 m
     else while(1)# V' {% Q* p; t9 H6 D! u* C
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
* ]1 p) O+ a. j0 e               //Delay(0xfffff);1 D1 n) l' [: t: v! x2 t
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
# l1 @, y: E  U. T3 }. s+ T# a- p               //Delay(0xfffff);
: E9 T2 d' I/ s( e  K* U! y2 [  
" O, Q7 T" W* m: ^+ z& V9 K            };9 {: l4 H) a6 O6 s5 h
 }$ t9 ?% @( H  l
}2 e: g4 n5 P7 J! ^% @& ~
void RCC_Configuration()' l2 X/ E& i: P- w6 z  Y- E5 Y5 T
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);/ T8 y, A2 v0 \( P1 b
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);/ Z* F- }/ d3 J, U% S9 F) m+ t
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   ( T$ u- |% a, l% G  }
}
: V' t# Q' \1 E" `2 j4 t. d! Ovoid GPIO_Configuration()
( h4 O. C- c" t- m2 S{  GPIO_InitTypeDef GPIO_InitStructure;& l  J, C# r& R' r/ X9 P
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;7 ~) A' N0 F5 j: D0 _  w
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;. S. ]! @, e+ j. {& Z
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;/ G& b  y% y( N; a7 L3 w9 H
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;" e/ J6 [1 O  G* d0 a
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
) M2 v" Q) H7 x# @7 ?* t* i  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
5 w, Z( j. q, O6 @  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
. R- l* k% Z1 M' t' {  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  `9 U3 o- W6 w; P! q' c5 S  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
4 z2 I& T" I3 M' j  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;* {0 k+ i9 Z2 g( m. ]) ~7 Q) F+ a
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
" a7 I: @0 z- Z+ C$ q9 V  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);- J0 E. L$ }# v( v% p$ ~
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
; H6 e; k+ d! z- s) e' ~! Q  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
- @5 s+ }$ i/ F+ z# N9 V}7 |! y2 C7 f+ t( \/ v( b& J2 p
void SPI_Configuration()
0 k- R& g; z( M3 o& M{  SPI_InitTypeDef SPI_InitStructure;
/ C2 R* L( }/ ^4 T" B5 @  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
8 k7 `7 e2 X$ h" w0 Z  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
! s# i7 e2 z6 f4 w  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
/ o8 i, s7 j& T* p  X3 q; G   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);# q0 i! b! Q$ z& w8 f: X
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
% ]: ]2 t( P  `; p1 ~1 Q  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);- i+ T( d9 o* Q  S7 U
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;/ `0 @3 [5 w5 j' h9 f
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;2 ]5 c* V3 i: t& v, ?" O" x) v
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;: ]6 |2 X& l  |
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;8 }5 }- p, P( x" p, B* Z* c
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
0 H( {4 }  o( L6 p: @  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
3 H6 f* V; n( s9 F$ w9 Q% |! j   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;" z' {2 |) ]1 K& L
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
( @$ M& d* \( P# Z  SPI_Init(SPI1, &amp;SPI_InitStructure);6 C5 F4 F% Q( R/ X& {; A1 E8 S4 ^
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;4 r0 [' _! j3 P& C5 E8 {
   SPI_Init(SPI2, &amp;SPI_InitStructure);8 Y" s5 }( K- d7 F3 ^, |5 |/ x
   SPI_Cmd(SPI1,ENABLE);
& L' L) I8 ^, s8 L8 O5 t) E   SPI_Cmd(SPI2,ENABLE); 
  |6 `" M% l  [8 m3 m& |}6 @# x' Z# D' N' ?
void Delay(int nCount)3 v- f6 e8 j/ n* o$ @# y
{ int c1=nCount;- x: I) W" }6 d* m2 k( z: b( b
 int c2=nCount;
1 I1 [7 d8 F# t* i' O8 Z for(;c1&gt;0;c1--)+ M2 N, Z; i% X5 ^/ `  f
  {
# b6 T% e8 s; u  for(;c2&gt;0;c2--);. X/ D3 A5 ^4 `1 F! V) f
 };
" a& q0 Y" ~$ U2 D3 t}
' }( H6 u# B/ W先谢谢了~~
6 {& R7 n' o& H# A1 B9 R 4 {- k. [; B7 [' C" Z, B4 d; T" L

: x+ t* j8 U: h* B楼上的问题,看我帖子给出的提示哦~
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发表:
' H0 C: n; z# i7 L- O( a" }* o 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
6 N( m: q# T6 M9 s& X- ?( d 
% H& N% @" G& i+ V% a# e( G) b$ d4 i' h1 [  T( ?
多谢支持!!
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 运算效率不高

  . U, x# \& P2 d7 g% Y
鬼魅一样的Hard Fault0 ~; R' m( r3 P6 v" ]0 ]0 l- x
 
6 L6 u& g, e9 U该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。6 t; y# L; d! m7 d1 O
 
! D% i4 v: ]- a咋解决?
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 手机版