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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
% |! `, z! l1 i5 A+ Q9 N2 v2 l) R; ^

0 V& {7 d" H- ~# Z7 Z. s6 W# T9 L8 Q社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
" a# K$ G1 t7 l4 n+ q
/ P% [3 m% O; L9 Y提示:点击各主题,进入帖子,可下载ST工程师解答详请
7 B' r( r/ \& O: E
' s& d9 U, E  |1 S0 c$ U
; m: Y0 S. f" x% S一、通信接口5 m4 a1 q$ k! ~3 Z/ u3 l# H

- w. P' D* E; N* n1. STM32F2x7_Ethernet(FreeRTOS)驱动更新
/ l' U9 W2 {! M: w2 `% O & a: C9 L, Z5 h8 ]
2. SPI 接口发片选信号导致死机
8 u/ s# v$ v8 H$ Z8 C. L7 D: e 3 H* u" }6 m  g
3. USART1不能设定600BPS的波特率
: }4 f: u# q) E5 w' A
( s+ ?9 |( O2 \- ]4. I2C 接口进入 Busy 状态不能退出
$ P( F! u9 B( g2 a" O$ }6 z
) x/ {# m+ n2 P5. 对 Flash操作导致 USARTU接收丢数据* m- A+ \7 O. s# p. z4 [$ k* `

0 Q1 {' u! P% i0 X& k0 i6. USB接口易损坏8 ]" i3 J9 b* T1 ~5 c& k- y

- Y0 `4 ?) s3 J( a" p7. UART发送数据丢失最后一个字节
& h/ H) a( }4 ?( B" [
4 i( B+ q) g* s  B/ n4 b& ?  b8. 使用 CCM 导致以太网通信失败
2 \) v' R. C9 O+ c! n ( e. g9 B* K/ \% ]' E% |
9. SPI3 接口没有信号送出3 H* {: T8 {9 f0 [( e  _5 l
! W8 r' w% V9 x+ r7 z
10. 时钟延展导致 I2C 通信不可靠1 L& Z! F" X- o
* E1 F! {- @, ^- s5 n& p+ s/ r
11. M0的USART波特率自动识别问题5 h' u2 ^: w/ Q" X# y" R6 W8 A. C
7 t5 D8 V1 R" f4 B( C( I' g# U
12. WK15 OTG做U盘主机兼容性提高
, p- Q5 j  b) J1 q 7 _  a& a, ?- ?
13. 以太网电路设计注意事项8 J: J$ D- c  X7 H
  ~9 n: _% N# q6 `8 \: {
14. OUG主机库在BULK传输上对NAK的处理
" D- ?' F, _- U$ k6 n) O# v 5 w# A9 H: c* k& Z2 E+ F- p
15. 串口断帧检测
0 p6 ]. X# c6 v" N" B . G5 K; V* Z0 B+ `+ F/ r& B
16. VCP例程用于数据传输时丢失数据的处理0 V2 w# q; N' @, G* n4 G) s0 p$ \1 a

1 B  F% b0 l6 c' {" ?5 ~17. STM8L051F3P6串口UART数据起始位判断的问题
: Y* p/ d2 O* q) e" R: a
( [% |( \  R7 M" a6 v3 F8 i18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
7 w/ i6 }2 r# P, |
  Y: _) E% X. {3 Z2 }% Z19. STM8中UART奇偶校验的使用方法4 \9 @  Q: {; E$ E, W+ q3 U; Q

; o7 }7 r. \$ O0 L/ \6 F5 J20. STM32以太网硬件设计——PHY$ U5 p1 s$ s- |0 ?4 p
* J5 ~6 o- n3 q: [- J7 O1 W
21. 一个判断I2C总线通信异常原因的方法
/ ?# T7 B' R  k" S
7 p; X9 U) e3 ?8 `22. USB device库使用说明
, g" \1 I) n2 M6 g- J& G+ |  n4 m. W  ]) R" h* r6 P+ a
23. STM32F103上USB的端点资源; d( v! ~" p% l- ?/ |' q

- {, {/ l4 v! O0 {5 Y; H# A  L24. 使用CubeMX生成TCPEchoServer程序: n) x9 M+ j/ d0 H0 ^8 _
) |- |6 U! O# W+ }$ a
25. SPI接收数据移位4 o% m" ~. b. b0 n5 N9 L
5 F; T# ]% `' d; T& S
26. STM32F0中Guard Time的设置
$ T, A1 }! ?5 n$ H* Z6 [  D3 O, `) B- [3 o3 `" l
27. LwIP内存配置
5 a) n1 T4 {! _2 t$ a; M* P! \. A+ f
28. STM32 USB Device的简易验证方法
; p+ ]; g4 L( s7 E+ i
, H9 I) Z. K3 U0 R" y, E29. USART 中断方式接收无响应问题的一种情况及其处理方法
) {1 z1 B( E9 L  Z' c# K
' i9 R3 J# q, K, T30. STM32 基于 Nucleo板 CAN总线的建立2 ~! N" L6 k/ J7 y- H/ B
4 i" [0 t8 f8 v  k8 t- |% V7 k
31. STM8 CAN总线的IdMask模式的讲解
" F! {2 d3 }7 y8 z6 r! q( P3 b1 ~2 B$ n/ ?- D: K
32. STM32F746ZG USB 驱动不正常 % p/ N3 c7 p8 A% i8 J. P
  S, Q; Q0 i6 C3 O7 {
33. MCU在STOP状态下通过UART唤醒分析 0 p2 g5 q% ?6 d3 n
, Q* o: e( m$ x1 h* e, K4 M# P
34. 通过STM32CubeMX生成HID双向通讯工程 / @6 G9 o) U0 k, c6 k. M2 C& _! L

; d. E$ u+ Y/ B35. 串口工作在DMA模式下有时接收异常 % q' |0 F4 B+ G% O
! i. _: E" r! P( q9 H; }
36. STM32 Bootloader中 DFU使用限制. t0 i) @5 g3 B* Z; S! d% s9 y

% Z" n/ N* V" d. {( ^, B$ \37. UART异常错误分析
  {( [8 V- g( C
3 a7 Z5 _. X8 @7 ~/ f  a" e' T38. 基于Cube库无法检测CAN2的接收中断 % G5 j! Q5 y* u
9 ?8 u# ]: ~5 }/ E* l
39. 基于STM32F7的网络时间同步客户端实现
  s& |  k* u" r8 C* `, |$ [& B0 y' r
40. HID与音频冲突问题
8 }) u( H; Y1 c
# V- H8 J( Z4 k3 [7 `+ C" A41. 在进行USB CDC类开发时,无法发送64整数倍的数据
1 M, S$ O1 W# c- a$ h2 T/ B, Q) b, D6 H; q: v8 V+ }
42. 从零开始使用CubeMX创建以太网工程
' h7 Z. z$ N$ z5 A6 w2 k, H  A, q+ B) I
43. STM32F4xxx的I2C总线挂起异常处理) E( a3 s- V& d. J2 I) q
  X4 L5 r2 Q8 J3 t0 J: X: X
44. LPUART唤醒STOP MODE下的MCU% w$ a7 l1 _( G4 z
% [  S$ f6 A  o0 g0 h/ I! e
45. STM32系列 MCU模拟双盘符 U盘的应用5 O+ p; R# y; N+ i( j
  Y. S9 V, z) P# Z% u
46. CEC输出的数据和数据长度始终不匹配
6 _4 C: j( |! _6 C$ k
  ^$ S4 Q# g2 y- C0 ?7 @47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
. {3 }6 [2 Q9 y+ Q8 s* g1 H$ B! B1 K
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
, t& b8 d$ j, W/ x2 M' ]
1 r* i0 R% s; A: h1 S3 \49. 增加UART接口应用时的异常分析
9 c# F+ V8 K9 p* B5 c6 X: `" v. f9 {$ J- K1 V# w: g2 A7 I# V
50.UART应用异常案例分析: m7 a4 A+ b" _8 }/ M# P

+ \( ?+ V: V" F3 |! H: }51. I2C配置顺序引发的异常案例
+ R& \0 H# s4 m4 A$ s+ m, C
* X3 U5 U7 P2 L8 `( ?8 S52. STM32 USBD VBUS GPIO
. d) `5 a6 g8 N! K5 G3 n) m
0 i% K: n$ x: F! q2 [2 R% q) R: v53. USB传输数据时出现卡顿现象: H# n* K4 s! E6 Z. H

  ?1 y* k  A2 v8 i$ T54. STM32的高速USB信号质量测试实现, w5 E9 Q6 o7 o$ `' W

8 w* w8 W1 y7 u: D55. 基于STM32 I2S的音频应用开发介绍
& e8 I" P2 i: @4 x$ m3 y) e* B, V. q; B+ M# B
56. HID_CDC复合设备在WIN10的识别问题  
/ J6 s1 d; w7 d) P! E! q( i" x3 }* p. c
2 H% D5 C. n: _% T$ p! q0 U57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  ( p+ G& ]5 i4 @' S4 h
& p. q, f5 y0 l1 P- h
58. 一个关于LPUART输出异常的问题分享  / p$ K) u% {( Y+ I: |' M

9 c  ~: @4 v  J5 A) S59.通过 DfuSe 工具控制程序跳进 DFU 模式
0 W7 ^6 @  }% i
& x4 H" \3 I' [1 }3 _! T
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)2 k& c$ w% J1 L! t7 a  c

0 \, y# u  l8 [61.一个因初始化顺序而导致异常的话题 (2019.12.24)
; O; }3 Q; J- C7 e8 x

+ A/ A6 S7 e3 Q5 l6 w2 i5 K62.MC SDK 5.x 中增加位置环 (2020.5.29)
& X6 o5 c5 T6 q2 i6 w
) L! m4 [+ v3 Y- E6 E
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
6 L! J/ A5 p! j& J9 c, s% [! q- k" a
( W0 \, k4 L& g; M# h* a1 V64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
( @% {! {: E6 y0 u7 [( z# Z2 ~# [8 ?* T
二、电源与复位6 X  J. b( k; `2 ^$ g$ k( G
6 l' a# @5 A) |; Y5 Y2 B
1. Vbat管脚上的怪现象
- D( X' F8 U+ e# W ) g, n! |6 {3 T; `3 M% t
2. 上电缓慢导致复位不良2 d" N7 P$ `# Q
# Z& z1 {+ s0 ~0 e; F6 M
3. 关闭电源还在运行  @! ^9 r7 `: J- \! x8 F- [' t* z
2 K" i$ O' l  W- z0 D1 }! r6 }
4. 使用STM32 实现锂电充电器
/ ?" W7 h. a; ? * t- _7 j0 {9 n1 }  H- O- N! a- ?
5. STM8L152 IDD电流测量
6 Z, n% `7 f+ J9 {) g. o  b. ]  z 1 ]6 z/ l- W0 W, K) ^
6. STM8连续复位问题
) c3 {0 k% N. J" U( u, d' n2 Q
: L1 o7 `6 `+ j* v5 e% q7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
+ Z2 n6 g: L* {! e* m9 K* L6 I3 ~) N2 d5 ~" a; U+ D3 m0 H
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
6 ~2 |2 t4 l# b$ e
5 r; Y. C3 u( r9. STM32F7与STM32F4的复位序列比较( g4 k, x" d  _3 k0 a

) E9 k$ M; X0 q10. STM32F107 复位标志问题 / h  A! N- K( j) \0 F! O
3 ^* P+ \- _. b, S% ]1 t5 ^# ^
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  1 d+ }8 H2 I' v; O. x  A* H

5 k  O- f) ^6 P0 v% O. u: F 12. Nucleo_L053不上电也能运行( O9 U/ ~7 J; b- W, _
9 T8 B0 ?# `7 k' f7 I
13. STM32L4中STOP2模式下的漏电流
; Q3 N5 }- V0 W% T
# x/ V; ]' e4 }& Q+ L  u14. 在没有外置晶振时HSE_RDY异常置位
' ^' P- M& w9 k2 Q2 v" D' v
  P  T, p' r. g+ Z4 g5 i0 s15. FLASH被异常改写   (2018.5更新)
. \4 _6 C  N0 T' z) g3 }
# k! G' ~( Z9 }1 H& B16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)- y, f4 v! F! q4 W  D8 J

3 c: b/ \2 p9 l6 X7 c$ `6 d17.一个 STM32 芯片异常复位之案例分析(2020·2.27)% x/ n. a* e4 Z7 E, s: U5 l

" n9 Z7 o* n% M三、IAP和Bootloader
3 }+ G4 ?8 a9 e - A. P' W  @! N  x7 ]; S" ?! T
1. Boot Loader与上位机通信不稳定
1 I' n% S7 r" y3 Z6 [- b- x" x # `# O7 n# ?! m5 |8 C& `) Q: C( e
2. IAP+APP 模式下不能启动 RTOS
; w, u- R+ c+ `% W; N# z ( A' R0 ^4 }) P
3. 从 IAP Loader 向 App 跳转不可靠7 i8 o/ l5 o0 R$ k8 f+ t

4 P3 K# Y# ^+ @. h$ e7 }. w# D  S' T4. STM32 MCU IAP例程跳转到APP代码简要分析
! C! y3 j1 L0 x, R3 z$ V" }; _
) e3 G" V8 l$ m, I( m5. STM32F091从自举程序向应用程序跳转的问题与解决' M4 Z4 i8 p$ n; G
9 S% g5 R% G! v, W' z5 v
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
( \/ d+ }2 h' I1 ^& P) I6 k" s  q. c5 T# |" q( N& w  S# o
7. STM32F0启动模式相关问题探讨8 ^* v4 \- t$ B3 a

; b2 |' r9 _3 e$ \# n6 x1 L8.STM32F091空片使用System Bootloader下载代码
# b" D/ q7 j7 |) X
" s  O; G0 c' K. g3 X8 J9.STM8L  IAP 应用程序中编程指导
0 L4 k  o, K8 \4 @* C2 n2 R, d , ^" `( V) p4 H' `; ^
10. 如何通过STM32的串口实现简易脱机编程器
( W  O2 Z8 |! ]) A$ O/ v* O1 [$ [, ~: k/ c$ @
11. 一种从用户代码调用系统存储器中Bootloader 的方法  : R3 u2 c% F/ z
- z% G) i/ l8 @) U; n# i5 X
12. 利用 USB DFU实现 IAP功能
2 b& |1 s, x, ?3 i' d+ l- Z2 _# b6 J8 Y& u4 R
13. STM32 Bootloader中 DFU使用限制
/ @' w' M7 F. D( Y; t/ T) h2 O  T9 h5 H! i
14. STM32L011x和STM32L021x启动模式注意事项" O. ~* _6 g3 f; K3 D0 U6 G

  K9 t; F. I/ S( Y, M15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
4 H& V2 v# |- y1 Z5 u7 o3 W6 b/ {- R5 W4 c. m2 X
16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 0 l3 @( W. E! r) a
# f& ]( ^' Q% P5 R. h& j" l
17. 如何使用STM32NUCLEO 板来测试串口Bootloader* x8 e. K* e4 {6 r. E

' [( z; V, ?' B6 k18. 在STM32L011上通过I2C接口实现IAP" x9 j) f" g2 ]8 R! W& h
4 K& J8 j9 U) [: C
19. 在IAR中实现通过将程序在SRAM中调试的方法0 h: f  E1 f* D, [9 Y
$ h0 n' t! {# E' _
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
( q0 L! F0 M5 G; I) u! y
. h; s9 N1 j) D( ~21. USB DFU IAP 例程移植的两个话题% ~2 q( l5 X; P1 ]5 n9 b# C! Q

# G+ C' m! M6 v4 V# a  {4 a, C1 p4 V22. STM32F769双bank启动9 g% y8 f( L" z, X8 Y. J- q/ @

; t# r8 x1 I  S1 ^$ n- V  M' @23. DFU加载 工具 DfuSeCommand的使用* f- c8 ?: T7 S  H* G
+ U4 G0 j6 f/ S8 v0 K# S
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码      W0 T  v8 L8 c; p' J
3 g! B% x0 ~1 f' @/ `
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
% {5 t8 c. e4 X  f+ q( h9 t, u& Q- X' U# E% B. y
26.STM32 Bootloader异常复位案例(2019.4)# r+ j( Y  s6 r3 ?( o
/ u+ J! Y. M7 A# y. r
四、存储器; R; s) K& o! m2 O$ x7 p  O% \

# E1 X- b3 D) L' ~, t1. 对 Flash操作导致 USARTU接收丢数据+ Z& K5 P2 ~5 [& D. h2 s' G

4 F. k& w5 B$ {/ X* h, D2. 使用外部 SRAM 导致死机9 ]7 [+ R$ l4 z! L" ]

3 z7 B2 Q  r8 A. r3. SRAM 中的数据丢失
" I( g/ g  I! r$ |0 Y% | 6 x- K6 ?, Y5 B+ C: Q
4. 干扰环境下 Flash 数据丢失
4 f7 b4 [6 r* V' M- j0 L
" w/ w2 Y5 s6 E* K/ y5. 使用 CCM 导致以太网通信失败% \% e, T, ~* C8 i, n

4 T. y( ]$ h+ t6. STM32F429使用外扩SDRAM运行程序的方法5 A; @1 m9 E5 x& w: N( D
! |7 W' i# c. Y3 U
7. 使用STVP实现对STM32L1系列EEPROM预置数据- n) J- i7 O# [; W0 S; r8 |( K0 E
8 t% ~1 z) @4 M& v& B
8. FreeRTOS RAM使用情况及优化方法
  q+ T7 n3 s& g9 V0 n9 T' v' [$ q; i8 U7 J. M: Y) B4 a! b
9. 在IAR 6.5下如何将数据存放至flash中
$ t7 y) n: z8 F  C3 I3 C
/ D5 I$ y4 Z3 E3 U10. IAR下如何让程序在RAM中运行! E/ s1 z0 z  M) N5 y: T& B# ~( w. J

6 V5 t" j  U4 D9 \) p6 Q7 U+ y11. RAM上电后初始值问题
" \8 R% C' ^/ v0 h+ k- V3 }7 H
12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
6 c, m- v. w( `9 H, c8 t/ K! Q* B' G; Q5 W! m( j
13. LwIP内存配置
/ D! m+ `! y1 Z, b0 |3 A$ W$ E# R' y" P& N/ Z, h
14. STM32F2高低温死机问题% H+ n2 d! g$ b' q# ^: u
# Q2 k! o* l8 ~: {4 [( p
15. 使用STM32F427的CCM RAM时遇到的问题9 y+ Z: [, _, G' n  R) L0 Y4 K; O3 b
: I4 o* _/ x3 Q' d
16. 利用QuadSPI外扩串行NOR Flash的实现  
. \, O) t9 R! B4 y1 \; E7 d3 Y8 @0 _' w" q! I
17. STM32擦除内部FLASH时间过长导致IWDG复位     ! X- E7 T% ?% `8 |! U6 h
) @6 \# P# D) q0 r2 g+ i! V* L1 s
& M8 f) j& c& W! y4 P
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
' R' y4 e* X" N) b5 [8 z5 f; v+ c8 k' p* x5 F
五、模拟外设6 Z2 ?& i3 H, v' Q- S
; j9 e9 ?* s  V( G; ^8 w% Z
1. ADC对小信号的转换结果为零
- I. y# s& \! X" w  B0 p) e1 M
9 x3 W( ~  I4 t/ z' y4 y2. ADC键盘读不准' E! k( D( o, K6 o

) _1 p* P* X' v9 ~3. 扫描模式下 ADC 发生通道间串扰7 t% I5 k, T4 z3 j
( P4 d" s- W$ J2 U% w5 E
4. DAC无法输出0V的问题分析解决: U" D$ o0 ]+ B* f! ]! z

- Y6 l; F6 y1 f# O2 P5. DAC无法输出满量程电压的分析解决" L. I& ?! a6 _  \5 W: Q) c6 m
/ x1 D* C0 j, y- U
6. STM32F30x 的ADC 采样的傅立叶变换
8 T; e+ E& [  f# ^* E/ D3 Z9 X! e! S% i- G5 x8 b1 i
7. STM32 F1系列 DAC的示例详解! X2 }) S( j" X' r9 \, Z
4 m' Q) H; E" M: W
8. ADC 连续模式采样浮空引脚问题7 J* D' ^. X1 j; Z! t3 V$ K

( j( }4 w& v- @* B: j3 ~9. PWM硬件间隔触发ADC 6 A9 [$ `( H2 e( t) O1 m
5 T% S9 {; A; [& `& u3 T5 U
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC4 T( z# L: I$ r/ Z
2 [& q4 E' O" d/ {
11. STM32L4 系列中ADC 通道配置上的区别
5 \( O+ X5 f9 @/ j- X( q
4 C) w( |4 v2 ?6 x; s" @" c" ^12. STM32 ADC模拟看门狗及其应用5 ?. w& d* k( j' E% U; J& f
( F/ F0 R4 [$ T* ^) l
13. STM32L053 comp2 比较电压无效问题
- Y8 K- U' z' w& i. I# {. k3 l/ T% E+ ^( L2 l1 A
14. 运算放大器OPAMP在STM32L4上的应用$ R) q5 U  ?8 h6 P# U8 Z( o6 c
+ n/ m  b2 ]- ^1 s5 T; q
15. STM32 OTA例程之ESP8266使用 % {9 I) `4 V$ X1 J
; C% R& \! W4 b! Y
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)
' t: k4 k; w5 {' {# A3 d$ g9 i! J% _" t( x& h; Q0 R+ Y: V2 A
六、计数外设! S0 k6 b  G$ K' Y3 u
: z2 [) O& k2 z; `+ h; Y0 m
1. Watch Dog 失效" j. P% U" ?' `2 ?7 p! A, Z4 ?- G2 G
2 e$ i: ?+ p" \3 d$ k
2. RTC计秒不均匀* q7 W7 [; G; j% f& ]

5 @" c5 p8 `# n3 {6 q3. 软件启动模式导致 IWatchDog 失效* ?: }' Z# K7 w' k& I& Q4 }

$ A7 U7 f. ?1 q# ^$ k) M4. STM32F030R8 定时器移植问题: x, \5 b4 z) J$ K

7 w; i$ @' w! M5 o5. STM32F0使用RTC Tamper的几个注意事项
2 _' k; G! `8 L- r0 G% K
  M7 m+ g7 [& S# H  p- S) i7 z! h2 D6. STM32L053可控PWM脉冲方法之DMA. V' t0 t5 m' f

7 W$ S+ N/ z0 @8 c( y4 ^$ W7. CounterMode,OCMode与OCPolarity关系
0 `* u! \( g& R5 U1 U" h* R& R$ l$ w5 A! q$ I
8. STM32L053可控PWM脉冲方法之DMA( H  Z% c: I4 H( |

" J7 @6 T; x( d9. STM32F1通用定时器示例详解—TimeBase2 p7 B1 v! e, G

# f* a- E. E& U1 x0 U10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
; T9 M4 R' T1 {; d9 `' M5 P& p. X. l9 O' f* Q
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
# q- R# E. O3 ]2 t* x, }+ b' b% x5 k% G
12. HRTIMER的多种Fault事件联动机制9 a! S; l* P$ r0 W! ?. b0 M$ \
# T5 R& s( V$ ~0 ?1 q% u% t8 j
13. STM32通用定时器 示例详解 —One Pulse
$ ?( W6 V$ \/ ]4 T
7 _0 z, ]1 n# F; g14. 如何用LSE校准STM32F4内部RC振荡器
, ?+ ]9 W* k" p' n
8 A. J. t( C3 |  R15. 一种使用Timer测试HSI实际值的方法
- l+ i7 t; v4 e0 T( b
6 P. _9 M$ I! K( s0 Q16. FreeRTOS定时器精度研究
# G# B# u. p0 O) t7 n) H  h& C1 y; h+ v6 o0 U% ?
17. HRTIMER产生多相相移信号3 }0 q# B) h3 O/ t+ U1 y
, J& ~, m6 s% n3 {7 q: F2 |% w
18. 窗口看门狗启动时异常复位问题
- s5 j; {2 a" a8 f2 ^- S: J) E/ A  k" t* X* \  _3 j9 w
19. PWM硬件间隔触发ADC! r4 L1 q" q! X

# U) C4 |/ K) Q) l20. STM32F030低温下RTC不工作
: |: b0 e5 U+ c/ s" E$ U) }5 Y$ g; ^, V: Z6 d- g- I* c
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   % _2 P, K* b* E

( z0 h7 q) \" P3 e7 @/ [9 W2 }22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)5 l- s/ z; y, x' w) t2 B, \
1 Y) p$ u! P$ ~
23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
, Y6 \- Q0 |2 {) s5 O) @2 W1 v* G1 `5 ?7 M* _+ P
24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)0 g1 h; W1 D, i) M1 E; E

5 Q4 U5 Q3 s' r& y25.MC SDK 5.x 中增加位置环 (2020.3.31)& _- C# b) R4 c! Z
" S4 G* u" _2 n0 D$ a
26.STM32高精度定时器PWM输出话题 (2020.4.29), k8 K$ B- S# L( q4 M$ C# v3 R

7 L0 r; Z5 C+ X; G* J/ ?1 o
: S( V& F8 y$ L4 w% L0 m  H3 c
27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)% j# @: k$ L% q( d

3 R8 m: ~$ @3 ]+ m) |) q- B七、内核
- j. d- A/ W4 g 4 W1 k' c. a! T" [
1. 使用指针函数产生Hard Faul4 I3 C! E! I, A2 ]

& _! c1 O, g  s+ N1 b( }* e* f4 A. \2. 调试器不能通过JTAG连接器件
: n- z2 i. d, H! @
. k9 z: ?# r7 R" ], g3. 鬼魅一样的Hard Fault
$ ^( j/ M( V. T" F( c' ~7 ]  `
; J" J/ l( J0 `0 _# q4. 进入了已屏蔽的中断[
+ j' k$ A9 w+ `: O- v4 Y5 R7 l. m- a
# U9 y1 E: x+ z( q8 X3 a" _& W5. 浮点 DSP 运算效率不高
4 Y- U/ g0 t8 h5 G
. {8 U) i- d* }6. STM32上RTOS的中断管理) j  b" ]* l) N# I) u

9 R7 l6 Z* G5 y6 h7. STM32F7与STM32F4的复位序列比较
+ L( |) {  |: w# V0 ~( K2 U' D
- j. E2 }0 ?9 M. W" u8. STM32F30x 的ADC 采样的傅立叶变换
3 r7 Z$ T$ A( h; {+ j
& r5 [9 o4 n0 `$ _+ ~( l9. EXTI重复配置两次导致误触发中断的问题
  N( {4 v" ?) |# H: U+ l- i9 ?# w, l1 r" A
10. STM32F3xx/STM32F4xx使用浮点开方指令
! n2 n7 Z: }( B, |, j. f$ i6 p( u# Q4 ~+ {* f
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响9 y5 ?/ `1 h3 S4 {2 P% _. K$ W7 n* r
! C/ W3 l; o/ b1 m2 T
12. STM32F7 MPU Cache浅析  9 Z: [+ v# Z( A% b$ A3 Z1 F' x

" m0 e' Q3 k2 u/ l( w13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)
/ f/ Z3 Z7 i7 L  G! c9 p( {

5 s8 f, Z( V" h9 g4 n) L14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)  O+ q1 v6 R: ]+ `+ w

  y/ z. G1 E: C$ J) e- t" k$ V! M* B' }
八、系统外设" ?- x2 y" [  ~" W% ]' o8 k6 l
2 Q! P5 ^2 _# w9 f! c
1. PCB 漏电引起 LSE 停振
- o% V* k  |+ I5 D5 _5 J3 i6 X. d
- [' N( c$ }% W. ]5 v& d2. 时钟失效后CPU还会正常运行7 T' j" [, j9 r4 f3 p

! S# e, j: |" n% P# |$ [! X3. STM32F2中DMA的FIFO模式
" G: ~- L" {. }* q+ p9 _3 }
8 f, R8 l& y) ~- t9 t4. STM32L053的GPIO翻转速度的测试8 |* ?$ F8 Q4 q$ O, _' e
5 u6 r% Q8 x/ _) Q" W# e
5. STM32F4xx PCROP应用
$ d% N2 h, C2 j9 q5 v7 y, |$ i" I: I: M
- h4 o7 U4 P& G6 V. _- I0 M6. STM32L053的GPIO翻转速度的测试( h. C& N7 L3 k/ {& j. h
+ }' U! L- [5 Z- P# y1 S0 X! j
7. 如何在IAR中配置CRC参数4 ?' ?7 x6 k+ _% O, _
* i2 {+ B! ?5 p4 V& G; `+ `2 h
8. PCROP区域函数无法被调用的问题与解决" J" z. W4 k+ z8 V1 j0 _- N

+ n) K+ B, [9 m& y' m+ P) x9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
9 y( Q# Y7 O5 n$ s' j
; r" m; g2 d6 F/ e( p( q10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计' I* i7 Z* t5 [7 h" g

3 N6 Y7 U  N) n( a11. 如何用LSE校准STM32F4内部RC振荡器
6 b# n/ F$ v/ n7 {$ H7 I6 c
' I! Q+ r6 _% x7 |0 k12. EXTI重复配置两次导致误触发中断的问题  , T4 b$ A: d& X' i# \

7 M* F, O! G4 S' n13. 时钟安全系统的应用(LES篇)  
& }* D) n( r# ]( E4 E' S4 N# L) m7 _0 S

7 o! {8 j: j% E6 y) b% i
14. 利用DFSDM开发PDM麦克风应用介绍  
+ I1 t5 \% n. N1 w

. Y, z1 M& h0 i8 N15. STM32H7的FMC外设在DCACHE使能时运行不正常 6 z) M& I, @) g7 i( L+ g2 c& s& C
- \& n2 L4 h, p8 |$ }
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
( T. ~" {4 h! T$ }9 G+ E6 o5 p; f2 f( @% U6 r5 Q
& f2 q/ j; I; g' v6 Z, z1 H2 X
九、标签和收发器
0 y- L0 V4 d) \2 ]1 y  F & k+ }. u2 {, t1 c" c
1. CR95HF的初始化步骤
1 d* h& d) _8 B9 w* M 1 f( t( K  l0 S
% q3 K8 a3 P. ]

- E0 @$ V" L8 O4 i- d' B十、生态系统. }5 Z1 A9 h7 U% x
& E% J% G) P: h7 i0 X( W
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
# {- S3 \# N6 ?1 ^9 U' O! }( h 8 f4 T8 U4 Y% A9 c6 b9 B4 C
2. MDK Logic Analyzer 功能在STM32中的实现问题2 {. b. l3 s$ i' |3 H, x

' y% ]8 s- n6 [. m" p) x* u3. 在IAR6.5下如何将数据存放至flast中. f2 ~4 n1 q9 s2 W' _% \: o
' J- M2 _5 ^9 V9 u  B
4. FatSL移植笔记
( j% T( y, `0 ^ , |( X& w. J- m  C
5. Keil中使用STM32F4xx硬件浮点单元1 m" S3 {0 |) a9 `

4 O1 O# {7 Y9 i. l9 E; e2 J6. 如何生成库文件(MDK和IAR)
+ K/ ~' r* i8 g
* m. ~) S3 j1 ^  D& Y  L3 ]. T$ c7. Nand Flash文件系统解决方案
  O$ R& |$ `, {& t1 c ! P  H. k' a$ x  V' y) ]3 P* I2 e, n
8. STVD在调试时弹出“Cannot access configuration database”的解决' e6 v+ _: r1 J% k4 A2 c
  Z. A2 L5 `" o$ O+ G' d
9. RTOS低功耗特性的设计原理和实现3 F, X9 V$ P8 c/ {

4 Z1 b* F. W. O0 \5 {10. IAR下使用J-Trace进行指令跟踪
, e# r) A4 q1 I9 q5 H8 y/ ~; Q% D% a7 S! e9 J
11. STM32上RTOS的中断管理. w8 O, Y) W7 G7 F# N
! @, k1 k  |. N+ h* z5 D5 H% P
12. IAR下如何让程序在RAM中运行$ O5 u5 J4 r9 `6 y$ ~) [
) h( W- v0 R) e& _2 b' a5 B
13. 如何在IAR中配置CRC参数
8 C$ m/ p8 J9 n, {" y" E
7 Y& L8 c$ y. D14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
4 Z3 c) U. P1 o+ z, R
5 ~# U& Q+ R5 u$ E0 i15. 使用mbed进行STM32开发及STM32F0的时钟问题5 [$ J) i+ I4 N5 i% Y5 a; ~
& Y1 J1 @1 _( f4 g# ]
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
7 Q6 R4 I$ e% V$ r
$ q) T% N) @% J# J' f! ?& n) J1 a17. 多任务系统中的不可重函数使用注意事项4 \! S. W6 i3 Y6 q2 G. ]( _& Z

. f/ c6 \% H' i# J  Q  u+ ?9 q18. STM32 utility的hot plug功能
6 M; Q' O! b. U. n1 o  k, w2 O" M5 C! e0 [' N0 _6 h
19. 如何将CoreMark程序移植到STM32上
4 v& p: ]% _; ?* \* g% G) ~) \4 g/ z' \: g1 U
20. FreeRTOS定时器精度研究' z! I( c; D& R# L# ^
# N9 ~& o' R* O) `/ S2 }. Q/ J8 z
21. 如何使用Eclipse和GCC搭建STM32环境
  q) h9 y2 d  T: K3 P# V3 q& `
/ E, D  g" Z. M9 B6 e- z# c22. 如何建立一个基于GIT的STM32库" `5 ]% h, e3 I: ?
) [5 _( K5 m' j  c2 z0 ]
23. 从零开始使用CubeMX创建以太网工程" w# g! w$ S( r( k3 @
9 h1 w: @& ?3 H3 {1 d( r0 y
24.从STM32Cube库向标准外设库移植FatFs文件系统
+ \2 @2 W* S8 u/ P7 n* H, ~' W" V: F& O8 L
25. 基于 STemWin的屏幕旋转0 M7 _/ y: E5 [- l# K6 p

! Q( O, s9 v( f# @0 k* s& x: q26. 编译软件 Hex文件烧写 8 a, Y3 v9 _5 o& M1 T$ s
, Q+ Y7 R* w) N. d
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
" ^! ]% M/ N; T- {( f
$ ~. }) O4 N7 {! L4 R( T! q28. USB CDC类入门培训
* o( b6 a+ }' w0 _4 b. K6 c$ I' _3 }# J$ W
29. USB DFU培训 ) z  w7 g) Z: }+ I: w9 l! s
1 j$ U; I2 L6 t9 K' V! P# X
30. 用于量产烧录的拼接Bin文件操作
# m9 }5 f/ J# I: u& ^$ g4 I$ l! r5 f' w! s
31. STM32免费开发环境该用谁$ v0 T7 L; W; H. n; E
. N. d3 w. _) h
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
2 ~" w. z" Z+ t* [! f$ ?
7 I& I# p/ Q; X6 d: A8 h33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)0 m, r3 u( K% s4 M& g7 M

7 Y7 s) a- }  p1 E, D3 A34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
" h7 n1 T" {" ~
$ J$ I) |0 p: K* i7 U' H: V35. STM32 FOTA 例程之 cJSON使用   # K' z' l6 I' Q# v3 I. @4 z9 ?
' G9 W- s& P- j; U/ }# }" b
36. STM32F769DK 云端固件升级例程使用说明 # N* g0 y! o3 P! f; e; n. a4 {7 k

2 o; W$ J6 W0 |( O# d" g37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
( e  M& M$ F0 a/ k) J
6 V) b( e& O0 G/ q* D38. 基于 STM32 的阿里云物联网平台方案
5 ^8 g. h' S+ b. Z& e/ b9 ?! s9 W7 E1 J; |
39.AliOS 任务上下文切换原理分析  
3 X9 O- T; Z) |" o2 }3 H3 M8 ]' W
5 e4 F% ~. |- x9 B1 Q3 B) S1 c( z/ D40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
$ q" R$ q$ {# Q0 G2 l1 x6 ?% H! B& m$ o5 `1 v2 b* t
41. STM32F769DK 云端固件升级例程软件开发文档  + |  m+ C8 ~2 l: Z% z' d* \  O- c

$ j9 ^& A4 h3 K42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
& @7 F/ m/ y' B  z
! b4 ]3 x# Q) B- G* U; h43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
# r7 E8 X% I- U! q: @- \5 ~# j3 R& Z6 K' w+ P
44.零基础快速入手STM32MP1 (2019.9.19)0 u- O/ u6 _1 [5 X9 h' `! e' ~$ a# t

# q( {+ \/ o  \. @& g) }45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)& O; h& ]8 @2 w0 \( {; e  }' A
; K4 T) u1 Y2 `" \2 e
十一、调试% W; Y- Y+ K$ b9 M  V
0 k% a6 t* A' `  B% W  x( m5 g
1. 关于STM8S SWIM Error[30006]的分析  c9 C! g, Y/ Y6 A0 `; q: O
8 `* v0 q: Z" @0 r
2. STVD在调试时弹出“Cannot access configuration database”的解决
# A% J+ a$ L8 H2 ?) y. C9 V
  w, ~( g9 U1 R- X+ h4 |" j3. IAR下使用J-Trace进行指令跟踪! r3 t4 D( o1 e* Z- `/ }: g- b
+ t( n5 P- h8 H! B0 G/ w$ v; X
4. 菊花链 JTAG STM32/ g$ y0 e% U1 r

& b: g# f5 J& T# |* b& K. o5. STM32F411CEUx 能下载程序但不能执行
) e8 D. ?# }& _4 P! v+ `' ], E! o- o" r) F+ J+ K& D6 u# k
6. STM32F103C8T6 程序上电跑飞
3 H. X! o7 C. [+ \& k  H7 R/ f; _
1 n; K! I" Q7 I# r4 g7. 使用STM32 ST-LINK Utility 设置读保护后不能运行
- z) r1 D& z/ v5 l" c# C% Q4 {3 j$ M9 f8 R! B
8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  - E5 q# i  f2 g# X' F9 Z
3 V) l, {' p& H! @
9. SWIM协议的GPIO口模拟/ V1 X, {. Y$ Q! G

# A6 P3 K8 F" V2 W" }10. STM32F091空片使用ST-LINK烧写后复位不能运行用
7 S! V& I3 f% e6 p
6 c& f0 x# K) B11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)7 b5 a; I& i# {! a4 O  ?7 @
) ?, ]3 u( v) Z* k3 R
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)2 [: D$ B) v6 A. z4 {* r- D" c
* t) {) |8 N  I
13. X_Cube_ClassB代码移植 (2019.12.24)
  t3 P. O8 c9 B7 [( p8 \, s; t2 b% F% k

1 R" t+ z9 n- G! g1 |) Y14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
# K/ Z7 |4 M1 {% o' ^# r
/ o3 k5 \' j1 z5 M/ E, o十二、人机调试
  H, p& q/ _7 f+ q. ~5 q! b
+ P9 Y# C7 N" x% N  |: X1 q1. 一步步使用STemWin在STM32上开发一个简单的应用5 C$ q( b- o* s

; F( G( l, U. w7 I5 z2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
, ?" T% A- l, O' s2 c! ?' N& F" A: I' w$ K( [, @9 r/ A
3. GUI方案中ALPHA通道处理介绍& V; ~+ X  d  p; B9 F5 j

2 D& Y' d$ \7 a+ D  ?, ]4. 基于FMC8080接口8位LCD的STemWin的移植
1 T. L* L  b6 f, t1 y$ Q  V$ @3 w
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)* s6 |7 A2 @% v6 n
* p+ Q9 Z  D8 T# A
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
6 o& V$ ^* I0 J6 V: w% U" S% c% m8 v: J
7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
" P* `$ t- w! k1 {3 {9 r) @6 F! h# C( G* W7 W3 u
8、STM32L5中如何关闭trustzone (2020.5.12)
0 ]7 Q" f4 z# X! o1 R+ U% j( D8 X( u1 m( J  Q* R
十三、马达
3 B& R/ k. F5 z  K1 k: T' k) r: S; m" c2 i: ^' Y& _7 `
1. 电机控制同步电角度测试说明# c' P& P' Z6 n% p3 o5 s! Z, B8 J0 u
* B% n* b3 y  E% E2 ~
  `4 z/ ~2 l* c; f

, C8 b" B+ K2 t. h十四、安全
# \0 q5 m0 J2 U$ U

: Z: K2 ~, r8 ~$ A1. 一步一步使用STM32安全启动与固件更新(2018.3更新)6 u* }! D% J' J! {3 t

( H/ [9 V+ ?  Q  \9 h
& n! Z9 Q- U- r; N: {十五、其他
' o1 ?  ^5 a: X- h8 O
" z. w# U6 G! n, [# C( a) h  i
1. 跳不出的 while 循环
, C( @% \( E( ^3 R % D) u+ x7 L. [0 \& t) ]4 p
2. 外部IC连接NRST导致MCU内部复位信号失效的问题4 a8 }' u3 c" r* E+ v& L) v3 o1 [
# }0 Z. T% l6 Z8 g% }+ |/ m$ {. R/ U
3. 潮湿环境下不工作
9 t) R3 b2 G( G: t; z. A
. |- G! v/ l6 R9 |8 b# j3 g4. PCB 漏电引起 LSE 停振2 z* A% B: j- w4 S( H: T1 V

& m. q/ k" K, i- c8 {5. STM8L152 IDD电流测量
* Y$ J$ H. F- w2 d" A - q1 f# }8 Z# t
6. 使用STM32实现锂电池充电器3 U4 m3 d, b3 `( x1 s, S. o2 u
0 I, I( M$ g5 l6 M
7. STM32_STM8硬件平台基本检查) R2 j( f; m% @/ y$ P9 p% |6 Y
$ K  l# p! ^' H) W) y' j) k: G
8. 验证STM32F401在STOP模式下的电流
3 l8 j+ G7 ~! F: T3 t* G) \6 }# p* v/ m9 b2 |7 |; m% b) R- d
9. P-NUCLEO-IHM001 电机开发板串口调试指南1 }4 `; r' o& l0 b
. F8 }. L5 @6 z# |/ L& _
10. 一种计算CPU使用率的方法及其实现原理
  B' S5 g+ W8 v$ _0 ^, \1 E6 T: Z, W3 \5 y0 ~7 _" b0 I
11. STM32 RTC不更新原因分析
( w# X' F$ d6 j: d6 `& @2 Z- K, a; ^5 S
12. 关于ST库函数的代码性能对比5 p0 R  }" h8 @" C2 v0 r9 g
, }' L4 T& Z% u8 N1 \7 o
13. 在IAR中实现通过将程序在SRAM中调试的方法  U+ A$ R1 D9 i4 v; E) h

, _" X' Q& e+ ]14. M95xxx EEPROM写保护配置# z) \1 m- ^9 W! c4 b/ Q0 p/ j6 c

1 [, i9 P9 F! E% l- d3 N15. 4SRxx的GPO的属性: a% i* A1 `# }% J( Z

% d0 m+ W+ n, U7 \! @16. CR95HF的初始化步骤
7 k' n/ W$ @( ~& }4 V6 ?6 T3 D7 U) T8 W! d8 [, j4 R0 q
17. 电机控制同步电角度测试说明  ( L. L" f; y& A. d2 n" S6 k
' N0 A. W/ B, @; \9 `9 [* i
18. STM32+BLE通过 Notification与 Android应用程序通信的例程
& q8 I4 W9 l( ~2 J/ _/ q- H$ x: l/ {+ P" c- s' ]
19. M95xxx EEPROM介绍
/ V! _/ Q! w. T) @
0 h' \" v/ ^8 d20. STM32 DFSDM测量温度应用 ; O1 d# j* A' p+ y: B0 Z" i6 ?2 ]

) Q% s( B, F/ q) O# k21.代码实现PCROP清除# f; w& s2 \2 S4 u- N$ l

6 j7 ~4 |0 T6 M22. 理解与应用MPU的特权与用户模式
; X+ L# V: q3 v5 b9 s0 f2 H# R- l; x9 D7 @  k) l
23. 用于电机控制单电阻采样PWM变形信号产生
1 [) T* ?0 v. d8 ]( b$ R, {: k$ r: _/ r, i( V  {' D
24. STM32L低功耗模式唤醒时间测量  Q% D) a  h2 n5 e

. ]6 D# y5 x9 z) M0 e& c' y, |25. X_CUBE_SPN7程序电机启动抖动问题* a7 u! x  q% d0 n' y! C+ z8 s+ z# H

, ?: D; m& T; G26. 发现STM32防火墙的安全配置% M4 ^- C; s# e! ]6 s
; X1 u. i6 v1 q% \, \0 H# G' m5 r
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
6 n+ v( d2 F. w' T% ^, K: }0 ]) |( [+ ~5 B
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
6 E7 p# f" w( X2 B; j2 x; H0 Y! ^- |9 w  ~. c  M$ K0 V5 h  W
温馨提示:
# x" N/ e$ V. w! H7 F) f
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
- S4 _- E  s6 H* @  g8 s8 I3 h. O

3 N& [# F4 j$ N6 C2 ~' o. a' R$ S% p$ d

7 ?2 Z+ w& _3 [$ L  W- S! ^5 ?0 K& f$ P  B) Z' W- c) K9 K# _
5 A- U9 X5 n4 {+ B- c; n
5 _3 S: F: ^& P" X$ I# Y

  h. A+ V4 C; T3 |. k: j& A+ S" J, i1 T4 E$ u% g  Y, W  A
+ W' Z. b7 L' d4 z% ~# V  l! D; M

0 w6 V9 B- [' [! P& \

评分

参与人数 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
好详细,多谢分享
/ U- S: @' \2 x: G, [7 y( ?) V
5768340 回答时间:2018-1-13 14:42:54
HI  
5 E. u6 j7 J- R& t, u8 l! f   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
# i6 T: F3 W2 }/ _$ \   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    $ f1 p4 D7 d0 i" D  B+ Z& j
  2. 函数名称:Cdfinger_Bspspi_init
    6 e, L: r" a# j% `
  3. 函数作用:spi初始化函数
    " {0 x9 }' Y3 I. y1 f- L0 L# {
  4. 备注:
    5 h3 Z- W0 \/ V
  5. ******************************************/
    $ `7 w" X) F+ d, M1 ~9 C3 U( b3 b6 E
  6. void Cdfinger_Bspspi_init(void)
    . z' W+ ^# V- x; L
  7. {
    - `2 p6 r! U2 z9 b* y2 l
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    1 ^! e! k; m" o3 @( E
  9.         SPI_InitTypeDef  SPI_InitStructure;
    4 a! i8 N6 ?3 N) L
  10.         DMA_InitTypeDef  DMA_InitStructure;
    % T* n( B$ D4 P* F
  11.         NVIC_InitTypeDef NVIC_InitStructure;+ j" S) j2 t0 }
  12.   
    , I  N. T. y# f" n9 ?
  13.         int ii =0;0 v7 n4 ~# @* O) l, n, s, k5 l1 t
  14.        
    + H& I  T. @4 R8 \
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);+ q# R* e: J# f7 |4 O! q( d+ ^0 h
  16.         /*!< Enable SPI2 clocks */
    9 k) M7 h9 \& i0 s
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
      q6 W. n+ Y+ q3 E* ~
  18.         /*!< Enable GPIO clocks */
    / R6 S" v8 x$ S
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);3 j! t$ M" B/ P* e9 K6 a
  20.         /*!< Connect SPI pins to AF5 */% ~; M* c4 T2 {3 v
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    3 R7 P' [$ D9 D$ p5 l: E  @
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    1 N$ J. V( C5 a/ g) {
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    ( o  y( u, k" |+ }

  24. ' R6 j2 m- l, h( k& M
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;! g- T  U5 c; p: a9 ~/ T* j
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    0 |- B% U: ?: B/ H9 W9 P6 h
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    ) \2 B/ b6 @- G% o; F
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    ' t. F0 S; C, c3 m: q
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;! J' \1 l2 r8 D& D
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    5 ?8 j) p0 X; ^6 j6 B
  31. * z, a- m, P; v2 C7 b
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;$ ?- c- R6 [4 a  t+ F+ W/ w: N0 ]; d
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;6 G1 ]& r$ J! }8 I4 u$ s
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    . P& [7 S9 H* B0 ]- `
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;7 Q# I4 w, K7 s' n( v
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    6 h: ]. ?/ u, x4 [8 f
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    9 U) K  ~3 l" P9 o
  38.         Cdfinger_BspCs_HIGH();0 @% B$ P% {/ j) Y* R& F1 \
  39.         //Cdfinger_Bspdelay_ms(1);
    ' c0 r0 [: G# K5 @! }8 q( ]
  40.   //Cdfinger_BspCs_LOW();
    & M/ X( i# f' |8 [3 ]4 ~* O3 B$ @
  41.         SPI_Cmd(SPI2,DISABLE);
    2 Y$ B9 l; R! ]; v9 r5 N, l
  42.         SPI_DeInit(SPI2);; l: v8 X. U0 f! B$ d
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;2 i% t& G" x$ G8 l1 t
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;* V" c, W- z. P8 ?. \
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;1 A1 {  N. o2 f$ v7 q# f
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;3 G# L* N9 X- F4 V! s1 w  t2 ^
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    " R$ x* K) q" X2 u- U
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    5 |+ W# e6 L) O! `9 E- n; g- E  U
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;. \  P3 M2 ^5 V5 l3 E* B! x% v
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    8 b; P8 @& A2 j6 t2 Q! g8 ~6 K, K
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    $ z; G) _2 s8 E0 _6 d
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    7 ~1 v- c7 V3 U; o: r. q0 i, r
  53. & }  |" U% |0 j
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    ! ?$ i3 p5 l/ r2 k% x5 r
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/+ X8 i) U" B3 ?( ~6 s1 v! o& a/ q8 H
  56.         DMA_DeInit(DMA1_Stream4);
    ( D# q: e7 J; W. B2 \, N, z
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;' Q" r; A" F5 l. T
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    & j- |0 t( N+ c8 `3 Y0 C
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    # i4 m4 F- O% {" U* U+ u
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;/ x+ i8 N8 q" |% Y: H
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    - n: E5 N! c8 Y/ s) q
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;9 z% _( Q# u- l  l" T5 @/ ?! l8 f
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    9 C# _0 p$ S; p  R+ x0 c2 ]$ T" A
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;/ q- {! ^9 g% b2 l
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;: w- j! S; [3 Z
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;4 \! Y, f# U$ i2 D' g5 K4 n. E* @
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;% L1 \8 F# F5 e5 ~8 l9 Q! P
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;6 _6 r4 `) K1 U6 o$ d; ~
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;- B) u/ B. I+ Z, Y
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    / ~1 i  _( k/ A( `) o3 H
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    5 Y3 n' Q1 t. Q( \- b
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    3 u4 X/ D' f0 @/ M/ t' K) G; y7 T
  73.   
    $ r1 N* H" H- [, [
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************// E" v8 ?+ w( `
  75.         DMA_DeInit(DMA1_Stream3);. Z2 V& X! [# |& [  |
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    + F8 y0 o" d' X" q( X. t0 b9 ~
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    2 ^3 |6 J( q$ ~$ E- S
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    ! `% I: ^5 }: ~: x; T
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    - f8 M, }" ^$ Y6 c- l3 p
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;8 g; e9 `! Y& F
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;, U  u+ q( q: E, ~) B1 B; U, I0 u$ D$ @! l
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;; U( t* g  ?; b1 d) q
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    5 k) H7 _5 ^* `+ X
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;% d0 t5 u' N: t) u7 ^3 _
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;3 U/ @3 W* Q$ s7 K
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    2 {2 x' c9 o/ q1 i
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    * l' B7 P9 A" D
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    . m( X9 |" O" w4 m' Y* k* m4 ]
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    - p% h0 S  [# {0 x) a. }
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
      f+ a4 H, c& W$ }' {- i
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    2 f/ B  m  r" o8 F4 c4 A% `
  92.         //Cdfinger_BspCs_HIGH();: o# S% F7 J3 _: b' ?5 N% ~9 N+ v
  93.         ' ~" m1 ~4 Y  a0 X$ o

  94. 0 N0 o) r6 h6 O" H3 Q- O5 ^

  95. 5 k8 s. V- F$ [+ a! C1 T" E7 z$ R2 u
  96.         //发送中断
    # j1 T- c8 T$ D" [" X# c6 q& b
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    8 u" t8 @( L9 o+ B. u0 E
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    ) y+ F) G+ Q" `7 k
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    + K7 k" R( \  A' k$ Y" ?. H4 S
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    5 h) u8 \) t, V; @* Z. J
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    . V4 B% R+ K, D3 I+ c; I1 A
  102.         NVIC_Init(&NVIC_InitStructure);
    ) o3 Z6 I9 {9 ?! D7 Q/ R
  103.         ; B: R7 c% q: }
  104.         //接收中断2 H. u4 {: {/ ^0 }  _$ i
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    ; F; [  U! F# ^+ L$ M
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     9 L% Z, c; n5 r' Y
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& z6 @2 c, L0 u
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    % P5 E% w; _, Y1 c) T% ^% f
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    & x9 ^' a8 j% G
  110.         NVIC_Init(&NVIC_InitStructure);
    ; c! n; t1 J9 K/ j) z9 K7 G
  111.         SPI_TIModeCmd(SPI2,ENABLE);& T* Q; |) B2 ], ^5 ]- h# }. @
  112.         SPI_Cmd(SPI2, ENABLE);
    - U$ n2 w! R+ W/ C  i, c& L
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    ; W% I2 C/ z* U
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);/ R6 L1 C' `- T- D$ H) @) Q
  115. ( ~+ w. q) ~8 X3 ?. |! x
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);) U% P3 ]5 A0 I4 j+ V6 F; v4 y7 G
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);3 ?+ ~- L3 t' t: k- u/ w
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    . R  _! v  l: g( S! O) u
  119. 0 _) G4 ^9 z; V
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)1 Z7 [- I# g* V
  121.         {
    2 h% }4 n+ r  R" t  c6 ~( O5 y" t
  122.           if(ii%8==0)3 H4 W& t4 X* |& D
  123.                 {: k0 r+ G% L5 D! I
  124.                                 printf("\r\n");
    2 t# r3 }- C1 p- `$ K0 e& e# m  J
  125.                 }
    7 F) A7 `. m- i2 t8 _
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);" Q: r! D  x( w( J: [
  127.         }, h+ N: l0 }% n' S. E6 U
  128.         printf("111\r\n");
    / f, B1 f- y, X4 h
  129. }
    ! D( O8 }$ i! I" K% s4 Q% p% K  q

  130. 8 V( h; J+ G7 G

  131. 5 S$ k) L/ L+ k
  132. void DMA1_Stream4_IRQHandler(void)
    2 ~$ k! V2 G) D% _. y  T
  133. {
    ( d8 c( F! E# E7 ]' U" d
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)3 N% x: w+ r4 O7 `$ q) \8 j
  135.   {( z* D9 Z0 B9 N1 U5 @# F
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));0 B5 U8 J" z7 i* ]- A0 s/ w7 T
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);% w0 W7 T2 l7 D; y% S
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    + ?1 [- x0 u2 r% x& S$ o- p9 r
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);+ ?1 p4 M! W" ]; y$ w& p
  140.   }* {8 x7 n' @7 I' [# L
  141. }# g4 K8 c2 p* u
  142. ) u& U, n# R, O# \
  143. void DMA1_Stream3_IRQHandler(void)
    & h0 |. e) Q8 E! h
  144. {
    : t4 h2 ?3 W9 m3 Q0 b2 e
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    0 Q: U4 b" m0 ?9 _
  146.   {
    0 a: N6 k3 _! P& I# \
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));7 b& |: O4 o( n4 a4 |* g
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
      f, C1 a* j7 G+ y
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    7 K- X' _4 y) E6 P5 y) T5 H
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);: v/ s, `- {/ \2 V: V7 Q
  151.   }
    / l: r" e+ p; T7 h7 L# m
  152. }
复制代码
lovelifett 回答时间:2014-1-23 15:10:56

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

楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
+ ?  m6 \8 ]. c. \& C- f& u以下是全部代码:
4 p) D9 k; j4 o* f#include&quot;stm32F4xx.h&quot;
: N& m! J8 I2 Cvoid RCC_Configuration(void);
. ^% A. t/ v% z- avoid GPIO_Configuration(void);
: Y, j; H* l/ |2 d) [* wvoid SPI_Configuration(void);
; ], Y) C% W; i: Cvoid Delay(int nCount);/ [) H/ T! z" j3 s4 c' W
int main(void)
1 W7 x9 e% Z# c9 `' O' @{  RCC_Configuration();
; r3 j6 {1 |9 M8 p  GPIO_Configuration();* E+ P7 M9 z  Q
  SPI_Configuration();) t3 d" e0 \& C: K+ n
 while(1)/ |8 L" p0 u  f
 { int data=0;
+ b. k$ u. Q7 S* u  SPI_SendData(SPI1,0x55);
! q( W6 T( a9 K9 l& p  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
7 Y) M  T0 a" r& y4 K/ H  data=SPI_ReceiveData(SPI2);7 }2 a9 U: S+ G; a# k9 k
  if(data==0x55)9 k. U7 i0 Z& E4 }! Z/ ?4 ?0 c, O
     {  while(1)
* x! V+ `0 n4 G: X) A, F             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);- n/ Q/ L  H3 [+ ^
                Delay(0xfffff);
$ F9 D6 a9 X; \                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
% u! c+ u& H7 _1 i- E0 ~                Delay(0xfffff);! F4 S8 l8 e( A2 R2 f3 ~
   7 L" [) u; y2 p( ~) [' X6 j, V
             };
+ S/ l' S; X# P* @- U5 x     }' s* d  I0 N% _: m9 l
     else while(1)7 Z0 z  s/ T) U" ?# U2 D
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);2 Y/ u9 d/ K- q3 j
               //Delay(0xfffff);
% t; S! x9 h% H2 D% ?               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);, i+ L# O5 I5 c' |$ v5 Q6 ?- z
               //Delay(0xfffff);' B% p: H# T& R" y
  
' m" O$ @6 C9 g) k) C/ x            };
" M  r# @5 e( `7 n1 s, L }
% H. G% d# L# E; w# P, S% x}
9 I8 d, ]" `' n6 hvoid RCC_Configuration()
4 i3 e9 G. x8 D5 Y: w1 V7 U, o+ k{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);1 H/ q* O6 I% E  s! ]* O( b
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);4 N' d$ R: H6 J* V+ A* ^
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
; x5 `$ R+ I  w/ A8 s& o}
7 w8 |' B& A/ a' ]4 A1 Zvoid GPIO_Configuration()" W3 k% q5 S5 @# R! U
{  GPIO_InitTypeDef GPIO_InitStructure;
0 \' i# v7 o8 ], J  Y8 }  H& M  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;+ z# q8 v, Y0 `0 h0 O2 i
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
- L7 x2 B* G& n5 A! I! e# P  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;" N3 Z' I# ?& o2 [
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;: B& ~% f" e8 Y' \3 a+ r1 w
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
% j1 ^" o% V' L. v: R' N5 q  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);7 [* ^. {8 J6 I
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
: n% d" p8 s. D. S/ s9 \8 u  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
9 u) R4 X3 C9 q8 ~. a4 k! C  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
" J( ^, H* V+ Z, s  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
7 x! ^7 r, }" Q( h! h* Z; b  h" V* u, V  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
6 r5 R. L0 Q' O( R8 t' I9 \' |  @  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);, M2 e7 a* K  [; V! n, J
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;% W( c& i; V- b9 I% ^% T1 j
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
. {7 |) m9 p# ?$ {- j& B}
* K9 R& q4 F* D" h8 }" d7 J1 xvoid SPI_Configuration()
2 W7 q) Z) Z/ a{  SPI_InitTypeDef SPI_InitStructure;5 w" Y6 A& B3 r, _4 }# s* m# }
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
4 [3 h4 h6 w4 ~9 t% S$ U# l  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);. M6 J/ k; S) t5 W
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
- G, H' {( R% r% l   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);" i! f2 j/ Z; r# R& S. w
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
4 A; A. t) X+ a9 s: k) r2 {  C2 c, X  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
* b1 L( Q8 X4 |, e3 Q# M  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;) V& W6 N! Y. R6 C, R
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
, c- b5 v% m& y2 l# U  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;; q5 F, q+ w; K5 j$ W' N; c. c
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;5 c6 U, F' s6 t: j% t
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
0 {- g( I, A, H) I2 {  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
4 [& O+ h" h' \4 _( \9 b   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;0 x1 C4 V9 l) U* t" {
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;' U$ h9 h9 A% F0 v2 E: ]5 I, Q( W
  SPI_Init(SPI1, &amp;SPI_InitStructure);6 A$ ^9 [1 p$ K
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;2 W: M1 o& H1 z
   SPI_Init(SPI2, &amp;SPI_InitStructure);% ?' B- b5 O: A$ b/ m! ~& S
   SPI_Cmd(SPI1,ENABLE);+ i# Q6 }6 O3 l- N
   SPI_Cmd(SPI2,ENABLE); 
& Q* o4 F) y- s3 E, \& v}  [: X4 v+ n% [
void Delay(int nCount)
" ]6 M9 F; @7 L8 L; I8 d+ f' U. D{ int c1=nCount;
/ M! [6 t. z* N& d% j int c2=nCount;% \. W9 `: ^. Z. `7 }3 p
 for(;c1&gt;0;c1--)# K  M  o' a* H+ A2 k7 M' m1 L
  {. f( s6 g/ W0 [% u
  for(;c2&gt;0;c2--);
$ d; v! ?' U2 ~9 R };
% Z+ `; }5 u3 c6 j$ h. L}! P( L! \* h3 T
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
! [3 J% C, Y, F0 P楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
6 ?1 A7 I; a6 d% @以下是全部代码:6 B% e1 Y( p' |1 \1 u
#include&quot;stm32F4xx.h&quot;
" h  A9 y: A! E' T! zvoid RCC_Configuration(void);( p2 }0 v: n) m0 V5 c
void GPIO_Configuration(void);
  m6 X6 a3 H9 L& P5 p% L# Mvoid SPI_Configuration(void);
5 a6 [! I/ ]: g/ l+ u1 A2 Zvoid Delay(int nCount);
" q8 f" {/ t. l6 dint main(void)
" G7 `9 I0 M! }* l{  RCC_Configuration();) [0 r! T1 h- @) p1 V
  GPIO_Configuration();: V5 @  b8 U  V& m0 D/ ^
  SPI_Configuration();' G) U6 k5 `/ S/ S
 while(1)! |; u: \" _+ A& ?' u% H. c
 { int data=0;: F$ G9 y% }* f" L
  SPI_SendData(SPI1,0x55);
; A3 ^7 S" F, E7 v  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); , ?- U& w6 m1 ]) ?8 F0 c& [5 F8 O
  data=SPI_ReceiveData(SPI2);
. X% h: M5 W6 y. j' ^  if(data==0x55)1 f/ m% i, U3 ]) ]# V
     {  while(1)
2 m$ o3 y; c$ i2 i& X9 k; i             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
: z" e' k; k% Y$ M                Delay(0xfffff);
  b- e( _) f3 }- A) A                GPIO_ResetBits(GPIOA,GPIO_Pin_4);5 t4 ?; L$ ]& \7 ^
                Delay(0xfffff);
; i! t7 x8 d+ b1 y" r" U7 m2 [% \  
, \* i; R# k% j( q4 |9 p6 W             };6 }2 ]! N+ H; b  U6 F1 }* g
     }$ R  C8 L  I  l& y& s
     else while(1)+ s7 p% _! R& N4 j
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
$ g( |8 U# @5 n  k: Q               //Delay(0xfffff);
0 }$ `! y3 l+ P: F" Y, a; }               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
( k! p% y- Z8 t: Q! x               //Delay(0xfffff);9 V1 q- f! M  V1 N
   4 U+ z  }, I+ s( v; H8 z) ~2 N
            };9 i0 L8 h8 W/ n0 b- O
 }
' C) W; L) _# l9 u9 T}  k; D& `8 m) r$ c
void RCC_Configuration()
$ J1 q2 [8 ]& C+ a{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
" \6 ^6 B# X1 A  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
1 _* d; _6 v- b1 h- E  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);     t7 q- \7 r* F
}
/ h  s" w) Y+ e* \void GPIO_Configuration()7 P' F9 O* C5 [& z+ c0 F2 y& J. o
{  GPIO_InitTypeDef GPIO_InitStructure;& O3 K4 H2 N5 e: T! q+ D* ~
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;9 E% p$ M; P8 B6 t6 f: s4 R
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;4 ?4 W! b7 D' w9 ]0 _% s$ [
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;& g1 r# Y7 P+ ], J/ B. Z( V' ~
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;2 P* P* o1 @* T8 `  C$ D, s3 l
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;1 s% G1 F, d. E3 U+ M4 A& S
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
  ]$ Z6 k" }4 Y# X* S  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
/ T9 V# o3 d/ M" F, m1 R  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
* ~* e8 {; |# l( [* o, P( J  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;+ h( @6 ~) v' W+ x6 B' i
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
: x. {) K; e) {( k1 X; J  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
" P9 G' y  ?+ ?. M& D  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);- M2 g; A/ g; x/ m
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;4 R" p! H9 [$ i/ M" q
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
; a- F* @3 ^8 {$ R6 k$ {4 s) D}: D2 w8 v9 C" V3 i9 v- g
void SPI_Configuration()/ m$ ^0 V6 a, W; C4 t
{  SPI_InitTypeDef SPI_InitStructure;
: C1 }$ X" H# K1 Y) V5 {7 s  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);0 r& O) o) P7 a' o
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);8 G3 E3 E' l0 R' ?4 \
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);& h6 v. Z1 E) S) V
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);5 g9 _/ A; \1 C+ j7 S
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
2 ^4 v" B3 K) [  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);+ E2 `! Z6 u) I- L
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
( R& W+ F: J; ~: x  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;; {! h$ l* |9 R
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;" ^4 [) Y2 P5 W/ P( W( H
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;( t$ p% [! |- `" ]
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;' k' X- g7 ~8 [# B. O
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
2 \# s+ N9 U. l3 J! F( t   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;. I6 h: ~: ~* D+ f" o* S9 g
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
1 h) E5 g5 l6 [6 X+ {* C  SPI_Init(SPI1, &amp;SPI_InitStructure);
: o0 i/ `: C+ S/ ?% O6 l  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
2 c/ |1 x3 b+ s( X, }   SPI_Init(SPI2, &amp;SPI_InitStructure);! e+ M$ P/ v2 W  V( X& ]1 I& K' l
   SPI_Cmd(SPI1,ENABLE);: q+ Y5 X9 S5 {- P! D+ H& i
   SPI_Cmd(SPI2,ENABLE); : ~$ P( X+ j+ f4 T* [
}: U- S+ N: `% ?
void Delay(int nCount)) k+ D- t" `  H5 k) ^
{ int c1=nCount;
, f7 a$ Q) U% t( \$ @( \ int c2=nCount;
" b3 s( y7 L7 l' v( m- F for(;c1&gt;0;c1--)+ u! u1 n- k8 R
  {+ G  @% q8 E% ^* T: q" u" h
  for(;c2&gt;0;c2--);4 H" w6 J4 s6 {1 _6 B
 };
1 N3 _3 _  ]# Z& m0 `}# N+ d# [" U: D. }$ ^6 J
先谢谢了~~! t: C  T+ B( J* ?
 ' t0 {9 U9 ~  O# e6 B# Z
7 U8 p+ j6 I0 Y3 {* [
楼上的问题,看我帖子给出的提示哦~
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发表:
! Q+ x* G1 I7 p! J$ c/ ?; G 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
: A! C7 d$ P% ~3 H7 ^; i8 C 
6 J5 J# m1 D- _0 o5 ^! T
+ r  i8 W1 k: h8 Y1 s5 I9 x" P. \& ]' d多谢支持!!
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 运算效率不高

  
, c" ^& U( O  V鬼魅一样的Hard Fault
! ?( _" ~. i. u* j, p9 o; N 
3 H5 |8 V' t8 t该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
9 V  }. V- w1 e, j/ _* W! i; K 
- v; }' V5 r' q, k( Y$ 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 手机版