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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表* C1 Z0 ?% K0 V+ P, k. O
  O& q7 s& |% j+ \

( k, l- R7 c  F  p  G  U社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
/ E2 B6 _# \) E9 X$ Y 6 I6 T/ U% W7 p- _! v
提示:点击各主题,进入帖子,可下载ST工程师解答详请; N0 t; X& f2 d" W- h3 ^- H

0 P. K; g) T, Q# j' V  p& F8 \3 K2 `2 b- H
一、通信接口
# k) a: K! G* V2 ]: _' Y/ Z : H, O) G: P+ @% S) L6 ]+ U
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新" R# i: w) |; \" V' l1 W

3 X8 R) c# g1 L; I) G2. SPI 接口发片选信号导致死机2 j; M3 Q  Y) E, d# O
( c7 u- f- J( O2 A3 y
3. USART1不能设定600BPS的波特率) V1 l% {4 O+ T, X4 G, J7 x/ W

/ i- v8 i, o& a/ j4. I2C 接口进入 Busy 状态不能退出
; o) w' w  O# Q* |) D" `( k 0 b, K, R" W3 c0 k" S0 U
5. 对 Flash操作导致 USARTU接收丢数据
7 ?9 `0 ~) f3 D
3 q8 K, |$ z8 p( j6. USB接口易损坏1 K; t5 y6 j3 v

! Q! r$ E. U4 }: F$ G# c; l7. UART发送数据丢失最后一个字节
: \: J3 f1 @2 \; L/ J
7 a6 a7 h$ \3 E) Q' P) M* U- m) v8. 使用 CCM 导致以太网通信失败/ }6 o6 `5 L, x+ U2 C

% {6 w; R& h/ q" z( m  K+ _9. SPI3 接口没有信号送出! N7 ~9 A- |- [7 ^' r
% s# i, l* u- g* O
10. 时钟延展导致 I2C 通信不可靠9 E. ^6 `6 R. \: e; O

9 P& S: l6 S/ a, H- t: Z11. M0的USART波特率自动识别问题; Z) p. V8 F6 T( v/ H+ F8 `
4 ?. P5 m7 k7 ]; k# t' s
12. WK15 OTG做U盘主机兼容性提高
! R3 [4 S  P' k2 }# B ! j; ~4 Z: h" C8 Z+ l7 f
13. 以太网电路设计注意事项
* {: d9 R1 ^# [  F9 S7 [
9 q" `. R* G; L1 a+ D14. OUG主机库在BULK传输上对NAK的处理
: F$ T6 ?7 v. n- z7 a7 K- m  s 5 {; t; `5 ~; Q3 S/ {
15. 串口断帧检测* Z4 F% l7 g; A, x+ U2 K1 N6 U  m( S

/ B8 A1 ~1 I! w+ F0 W16. VCP例程用于数据传输时丢失数据的处理' R4 g5 E" A. {3 [% h

( ~! W9 _% }3 g5 g17. STM8L051F3P6串口UART数据起始位判断的问题# f9 V* L# r" n/ z1 t' P9 K& }, M

3 z* M. H8 k' p, N9 m18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
0 {+ C$ Z9 [/ N- I+ x0 S 6 n) t6 q  a" m  K6 c
19. STM8中UART奇偶校验的使用方法2 S! z' T2 f) J; r8 w
- I0 r' [4 w8 ~: R" _9 _
20. STM32以太网硬件设计——PHY
4 |* q1 j+ }3 N2 ~$ V# j+ [3 ]9 y. i/ j5 ?0 b# s% Z6 B4 l* |
21. 一个判断I2C总线通信异常原因的方法& q* \; u# _- d/ z' C7 c
8 e  B7 c% k6 J9 {
22. USB device库使用说明
; a2 i, P- `2 t2 z3 t4 a" z' e% q  L( @/ ^' P
23. STM32F103上USB的端点资源, L0 x( q1 Q  [# k( k+ k
6 k0 }# \8 D, F1 P8 y" q
24. 使用CubeMX生成TCPEchoServer程序- v' u4 ~% o  s% s
1 w/ T( [4 l& d# K& M! t
25. SPI接收数据移位
  E4 O, Y* e0 D' A9 B   N/ ]4 x* j+ r6 T' V0 G
26. STM32F0中Guard Time的设置
* k& v0 f0 b4 x5 J
7 T# L8 z. E1 a/ x4 Z; o' \27. LwIP内存配置4 ^( t% I9 Q$ o

) m+ [  i& v: y8 X, E# x/ f+ k28. STM32 USB Device的简易验证方法
- i$ n8 a/ ?# [  E+ c# {, N1 ~4 K* B. h  v
29. USART 中断方式接收无响应问题的一种情况及其处理方法7 B3 P, f# b8 N% M, D4 i4 N0 a, T2 m2 F

( W, D4 P4 T) N/ \8 `/ ^# L8 |" U30. STM32 基于 Nucleo板 CAN总线的建立9 n5 h# B, U& O- E+ U
5 @# A8 r3 r" q, J* z& k
31. STM8 CAN总线的IdMask模式的讲解5 k3 w4 y  g: I3 O! E
- ^* R5 O3 _' ?1 o1 x7 b
32. STM32F746ZG USB 驱动不正常
% |! |' x( M' b/ h; Y4 ~6 }' t$ J
33. MCU在STOP状态下通过UART唤醒分析 : j6 l! _( f6 S" k  O

9 R4 ?% {" Z" N- O+ k34. 通过STM32CubeMX生成HID双向通讯工程 : N$ L  V+ \4 b* J6 L

/ m: q  v+ x  L2 o35. 串口工作在DMA模式下有时接收异常 * K: w; ~/ D+ U$ S7 G" M

. L% X; A+ O+ P$ b36. STM32 Bootloader中 DFU使用限制  m" a# h) Y7 c+ B0 |( u. J
( I- X* e2 T* r  h4 J9 g2 i' X; F- d
37. UART异常错误分析, I$ E! g/ t; n, C8 K
$ o9 u0 j( u/ ~3 {6 E$ K, S
38. 基于Cube库无法检测CAN2的接收中断 ; s& {9 ]* m$ Q& k9 p" f
7 t5 t' Y! O0 n( k6 x2 t
39. 基于STM32F7的网络时间同步客户端实现
' p* o# G5 h0 D: |
, h* i7 ^4 }4 O" T8 c. n40. HID与音频冲突问题 - R2 y+ O$ G& n+ p' X4 l& _
" P5 L0 M! W9 x2 q7 a% A6 I
41. 在进行USB CDC类开发时,无法发送64整数倍的数据
/ `7 d2 ^7 J9 ?- k5 f, Q+ P6 c& N* W; \
42. 从零开始使用CubeMX创建以太网工程) G/ F& h& L+ M# i7 j# `& z$ Y" d

' o. F3 p& ?. r8 F" B43. STM32F4xxx的I2C总线挂起异常处理+ D. i  h- Y7 t; h( l, I0 t2 d3 ~# H

2 w4 c( o$ T2 \" ~: ^# P) M. r4 n44. LPUART唤醒STOP MODE下的MCU
7 S4 m/ ?& i6 \+ y: p9 K8 X9 t9 x  ?7 J
45. STM32系列 MCU模拟双盘符 U盘的应用5 Q; |) L' Y! ?$ G! X8 Y. t+ o6 E

1 d/ J  N- l' E, N' f$ h46. CEC输出的数据和数据长度始终不匹配1 k) F9 c5 H: D$ b+ U
! M5 R+ ~" [" V* Q- h2 P
47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析' w  w; L) i" l- \
8 r6 H1 i5 w& U3 r# [) Q9 m
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
  Y7 k9 A+ e7 H' _' j8 \# r$ b' x# E% J; o* T; I6 R
49. 增加UART接口应用时的异常分析
( s8 d% B: l% o
1 w" Q+ V' M; J# O& M1 M0 h' x50.UART应用异常案例分析- n3 f$ m5 y3 C) }" \; s- k
, Q5 O3 H' ]" y' I
51. I2C配置顺序引发的异常案例# H! x7 y3 j; l

! s: j. p2 @3 R/ H52. STM32 USBD VBUS GPIO# d5 b% x" Z8 x* B3 W! Q
0 m7 `& V. u: y. v; c  U3 [. m
53. USB传输数据时出现卡顿现象
# @( J! p8 t( E3 m) z& W( w: c" T1 ~4 {; s4 W+ e- U
54. STM32的高速USB信号质量测试实现' B6 @4 J9 ?3 L& b. K; A( J9 i7 N

# P0 \$ b  `1 I* ^55. 基于STM32 I2S的音频应用开发介绍6 B" R# z, b# x1 G
0 F+ M5 F/ T$ `( z9 Q4 o4 y0 T
56. HID_CDC复合设备在WIN10的识别问题  7 c/ I% @& b# c( J# x* B
" b. X+ Y2 d1 K# b$ i1 k
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  * Z# _% I! }- S/ g( ]% N# e' c- f
3 {8 j$ I6 [7 w& }
58. 一个关于LPUART输出异常的问题分享  ; @0 X9 Q" r3 @
0 J( ]: g, m6 B$ Y' Y+ j  \
59.通过 DfuSe 工具控制程序跳进 DFU 模式2 c# N( ~) L" |' c: i9 B) E

# h% }6 R7 _. n  X. e  `60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)  }% ~4 A; @6 A3 N" [# E

, X! i7 P8 w- T5 W+ \8 L1 l61.一个因初始化顺序而导致异常的话题 (2019.12.24)
+ D1 C& ~# Y( I: d
1 _! l3 C5 r" n
62.MC SDK 5.x 中增加位置环 (2020.5.29)
. s# s  O8 c/ d: w9 `; i0 W
' d" R4 V) U0 C- G$ K
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
. e5 ~0 d: v3 A+ r" ~' N) g& Q; J( ?. T" ^6 b0 Z0 Y- m6 H) Z& S7 }& \; Z
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16): y! A' x% r# ?- T! S

* U% E( P* U3 ?" I, U二、电源与复位4 X4 ^1 j- M3 o  q( |
! K! A) O  b3 v9 d
1. Vbat管脚上的怪现象
4 ~; o& ?  p2 @9 n6 B5 q* i ' O1 X( d0 w/ e0 R0 [
2. 上电缓慢导致复位不良8 N6 _, E+ q( P4 b$ `5 \
, z7 c- H& q3 S9 _' R4 d0 m
3. 关闭电源还在运行
5 f3 X& _: u0 W. b
; p3 _4 X. k8 F/ r4. 使用STM32 实现锂电充电器' Y& `. |% {/ `! c+ e3 Q& Q+ ]
; l# r7 ^( D) p" m) V* v$ O
5. STM8L152 IDD电流测量7 d5 [, j! z. {* G% Y7 z' y% U

. Z9 {1 J, f7 l9 s; }0 V0 T6. STM8连续复位问题& c" ]+ ]6 I& b+ i* x* o" f' Z$ I

# K' T3 X! h0 [$ ^2 M7. STM32F2电压调节器REGOFF与IRROFF引脚的使用& b0 T2 F8 l' {0 I( m

" T9 M8 ~! s$ e& g6 u8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流( }6 N% C9 V& d6 d) E) g. \, c* n

/ o% [$ G% W3 f/ t; {  c9. STM32F7与STM32F4的复位序列比较
: O$ I+ o; q# f% L+ Z( n7 g2 o1 L# q8 I1 ^% @" i" o( S
10. STM32F107 复位标志问题 # J  N: _( Q- u0 d" l: v2 C( h

1 A8 J! x3 |0 y9 C- ^! i11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
8 t, Q) M  c8 N
6 A- [' Q5 Q' h* }4 j 12. Nucleo_L053不上电也能运行, B# X& Y; X! c3 g3 E

+ U& |' v# X" n! ]13. STM32L4中STOP2模式下的漏电流
! F* l6 f* V+ a- z
) v. c. f3 s8 \. S14. 在没有外置晶振时HSE_RDY异常置位
& k7 ^' Q) G; }( a4 x7 h& Y: ]& j# x' ~6 c: j$ `7 }8 M+ }+ n; H
15. FLASH被异常改写   (2018.5更新)8 B% p0 q' J: i
( z9 d( q5 h# ~! Z
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)" Z6 F1 t: d: |

3 }! L$ h3 [' z" P17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
5 _) Q, s1 H0 M
4 ]3 e: x3 k8 S5 u7 D三、IAP和Bootloader
7 F* Y( {# @+ n
0 \7 W, L8 S# V; O& V$ g& E1. Boot Loader与上位机通信不稳定
" S) w) z$ x4 F- B7 Q- X ( L* P2 M* t: f2 G. g. i( ~/ n
2. IAP+APP 模式下不能启动 RTOS# z5 t" L4 v2 m$ `2 L# E9 A2 n
/ H* ~' K3 k2 x% x3 u' t0 ?
3. 从 IAP Loader 向 App 跳转不可靠
# y' A$ g, H2 b% |3 v 6 n0 i- g, s7 l) R  {
4. STM32 MCU IAP例程跳转到APP代码简要分析7 X2 [2 f& w5 H
) Z7 ]1 X, G- `5 O, o5 X3 `3 s, M
5. STM32F091从自举程序向应用程序跳转的问题与解决! M) S1 p3 {1 E1 g; f" q# y
" ]* a4 q9 n& p! {  [5 k, t% x
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码; B7 ]) g+ n/ ^2 u/ d

, C1 E" n6 c9 P6 A7. STM32F0启动模式相关问题探讨4 j  {+ Z5 z9 Z, C# {  b

6 Z" c) T( j% H2 o2 A8.STM32F091空片使用System Bootloader下载代码
% P% @2 a# i5 M% f: a6 G0 a) J" u7 l  t1 k/ e( X5 @. l
9.STM8L  IAP 应用程序中编程指导
9 x- o8 l. o. b% L 9 \7 ^0 N) Y0 u3 _7 b
10. 如何通过STM32的串口实现简易脱机编程器4 y/ C% Q: y( }' m4 [2 S

4 A) A/ E4 [6 U& L0 V11. 一种从用户代码调用系统存储器中Bootloader 的方法  
( L' d) M. @9 h( R5 ~/ x: X# [7 c7 B+ b/ J* t: T1 _. _
12. 利用 USB DFU实现 IAP功能
! u% g4 L5 ?" u& Y8 k- ?" u6 U# M! I: ~# H: r! M8 M" s) |
13. STM32 Bootloader中 DFU使用限制
! X2 G+ A7 F& M% X) C' v* d4 x
1 _: D$ c( T  u& g1 d# ^% T14. STM32L011x和STM32L021x启动模式注意事项
/ T; s5 h1 ?: q9 q# z3 S; D
3 ~% P3 }# ]" \6 B9 e7 N% l15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
3 O3 Q4 P. y* z& S# [
6 P. F4 n2 \/ P  ~! `; O. k16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级
( |: d, P; s* q: K6 A, J! N2 \' D  t& X  H) i
17. 如何使用STM32NUCLEO 板来测试串口Bootloader- b1 P8 B) D$ e7 O
, D8 r& q4 M! t3 r1 d6 l, K
18. 在STM32L011上通过I2C接口实现IAP
7 v: r* E+ }) O( f$ _
' m4 o2 I( y" l& @$ s. o* R1 Y  x19. 在IAR中实现通过将程序在SRAM中调试的方法
( l; H* X" |& C5 l+ g2 j$ U* H5 c# a: o- l
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
- G7 C5 J, p( G# z7 W" J4 y" a4 K- H
21. USB DFU IAP 例程移植的两个话题
' i, |0 r; y0 T2 {  \' y) Z. g) D  V; g) s* U
22. STM32F769双bank启动- {, w& n, P" B( G2 M3 H, G

2 R! J/ v" g2 e3 W" ]8 W23. DFU加载 工具 DfuSeCommand的使用
/ U- V/ H6 K0 F* U  x! r6 b) N7 L) v) ]/ |$ }6 E+ e( t4 j
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    8 k: g; }; O- F) S7 s# p
1 p+ p7 O/ B6 v) M4 j. m
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)$ T) o! l+ J3 `5 N% s% }0 Y

; Y; P  I( j7 e' x3 e  k: ~) L26.STM32 Bootloader异常复位案例(2019.4)
3 b# H7 V5 I$ Q" L, u. u: @
% ?3 l; e- T. g' q4 a9 D
四、存储器5 C9 i6 M$ }8 ~7 N& A

  i. y7 h% [& _1. 对 Flash操作导致 USARTU接收丢数据7 e) s) u- `% x7 w6 S2 T3 m+ d+ K

7 f. |% [" o+ u1 U2. 使用外部 SRAM 导致死机
/ p, k1 k) Q. E# Y
  t8 l% [" V7 J. r- x: H: f3. SRAM 中的数据丢失- D9 b4 D4 ~' h9 H$ P3 o
9 D( V% E; L3 f4 Y. D, Y0 ~7 k
4. 干扰环境下 Flash 数据丢失$ ]" O( ^2 t0 f3 \3 }, o( Q4 M; T
' p( z8 `" r1 H$ J, m% U
5. 使用 CCM 导致以太网通信失败
+ d# ]2 S  @6 d 7 J; {2 A) `: c7 A2 G
6. STM32F429使用外扩SDRAM运行程序的方法
2 Z/ I2 p7 x$ E  i( w ( a- j' M# w: [- f) W. e
7. 使用STVP实现对STM32L1系列EEPROM预置数据
0 q* U  I% L% D  C. f& E
, u  Z7 @9 C: F: h' L0 J& c8 ^8. FreeRTOS RAM使用情况及优化方法
6 C( T$ `$ W& Z  K
3 r" \% L0 K7 @9 t2 M# y( H9. 在IAR 6.5下如何将数据存放至flash中3 w* Y3 g6 Z# Z# f- D; l, _2 e4 o

2 b) {. A* A3 s# Y1 a7 k10. IAR下如何让程序在RAM中运行1 d* h, ?0 z- C& v% b$ ?

! Q: v( z0 H% r6 L" C  b11. RAM上电后初始值问题
  H  O& `8 @+ W8 s* ?$ o
6 n7 B( i8 Q& K7 E4 }! h! c12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
4 q* f" Q5 U, S7 G+ ]" G8 s9 |; }) \6 T- o& l* I$ [
13. LwIP内存配置6 W/ g2 j* j8 ^# P
* \2 r8 W! @0 O
14. STM32F2高低温死机问题8 M+ d% R6 b3 o0 L0 A

8 u  j6 @4 C+ e" s% M7 I% X15. 使用STM32F427的CCM RAM时遇到的问题' f- h9 E+ K$ d0 \2 ?, ]: |

# n! I! `  y$ O2 f$ Q16. 利用QuadSPI外扩串行NOR Flash的实现  
1 _5 Q% H/ g, f: u* q; v- @
" A. U) a2 ]3 i) ?2 k/ i17. STM32擦除内部FLASH时间过长导致IWDG复位     & G' V0 w8 ^. m- I% T$ y

+ }$ l7 t1 z* q& Z9 T4 ]

$ h, _9 V- b: [$ k+ w18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
, _% w; C6 y- {1 S
) O# K, u2 ]- h- Z- s五、模拟外设
' n7 P' \  K4 J6 o2 z$ {
8 l( N9 x+ [( |  Q) H' }+ J7 }1. ADC对小信号的转换结果为零
& x  l7 Y* _: Q( M
" P2 j& K) J5 \2. ADC键盘读不准
, X- r/ |5 w3 \& `& E" O9 M$ M' N0 M & |8 a: p3 c0 A  k% @' t% Q
3. 扫描模式下 ADC 发生通道间串扰
5 H# [6 U6 J' Y9 F
  L  B& U# ]% W/ _: A4. DAC无法输出0V的问题分析解决! N. O1 g7 n% d: ~

6 v7 m- F' n& ]4 T3 ?% p- H, p3 o5. DAC无法输出满量程电压的分析解决& K9 D9 B4 ^$ b9 \, }) w5 h
" h- W& C# S  K8 g" b
6. STM32F30x 的ADC 采样的傅立叶变换% `( P1 `4 i8 Q( ~6 c+ L( v

0 E+ }, q9 S5 q: m6 n; u& f7. STM32 F1系列 DAC的示例详解( @5 N" i3 F. j7 R; M- Q: G8 a5 o/ ~

  j7 g9 y6 X# a( j( ?1 g1 V8. ADC 连续模式采样浮空引脚问题1 i2 ^: ~* [; I; |1 H9 y2 |* m

* e) ^  z2 O7 F; N! U9 u: G9. PWM硬件间隔触发ADC
$ t/ J. G1 f7 a, f1 b; d, k
7 H/ {$ X3 \0 P* ]! P# L; o10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
, R& V- Y. a  |0 E& L1 r( U  j
4 }7 O) [7 e' Q' x11. STM32L4 系列中ADC 通道配置上的区别  I/ u* `% b% R- p; n/ j
3 d3 R) e; T( e
12. STM32 ADC模拟看门狗及其应用
- C6 s& S5 Y. T7 _5 ~* P# {, y) M) L( L% b5 z4 g
13. STM32L053 comp2 比较电压无效问题
& l: b9 h' ~5 p  E8 b: X% G
  \/ O. i# f5 _5 x5 P2 {) s14. 运算放大器OPAMP在STM32L4上的应用
1 M8 D1 ^2 ^& E) K% m! Z& t" H+ l% F2 x. G$ Q" b- e
15. STM32 OTA例程之ESP8266使用 / I  J/ B0 ^4 `" T9 x0 K

1 U& ^+ v9 E( ?* g: {16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24). C- g- ?$ D, W" V( S2 i1 D: ]0 z; z( f

3 ?, s+ c& d% C( s& u* F六、计数外设
0 W, S! h: \; x- B# {! N 6 N6 Y! Y, K/ W- \/ a# `+ p- b/ G
1. Watch Dog 失效) h* c# H) Z# ]& |& B

! Q+ ~! k2 L6 G8 I" }- Y9 v6 }2. RTC计秒不均匀$ R5 @+ J4 \& l9 S
& [* m: M: K1 g! T, ~. a
3. 软件启动模式导致 IWatchDog 失效
' F2 v7 N- I: z8 S9 ~
7 E  T/ c1 S; J  q& q4. STM32F030R8 定时器移植问题
- w: V9 P* B1 e& _8 y- I2 E% n4 S* h9 G1 O6 K
5. STM32F0使用RTC Tamper的几个注意事项  p! H) r0 _, b- {

+ F/ G5 y0 Y9 P# b6. STM32L053可控PWM脉冲方法之DMA& l- x" R/ s% I9 L' w7 p! u1 ?
, p# H! z" u8 H
7. CounterMode,OCMode与OCPolarity关系
4 C  i- }) ~' W. R1 z) e, g* L* H* d0 y2 u+ m7 ]9 `0 d
8. STM32L053可控PWM脉冲方法之DMA6 x) j) M. s# c' r
& v! U1 E4 {; j" u
9. STM32F1通用定时器示例详解—TimeBase
% k. v6 I% x  O, {! V6 m6 N4 \: g* U6 l
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals- o! X# w4 ~; T: k: j! P3 V

& w, Q' Q# m% d. Z8 Y  H11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
6 v6 I9 P" u- Q+ V7 _/ P0 q( d; ]/ [9 ^; p2 j. E/ M' X
12. HRTIMER的多种Fault事件联动机制$ r$ l$ b- h+ R. @- Q" N0 F% \8 Q$ N
1 K8 `8 B6 ^' b* N6 G
13. STM32通用定时器 示例详解 —One Pulse0 b4 R: I) p% i

6 m+ ]# S. z! g' `3 D14. 如何用LSE校准STM32F4内部RC振荡器
- r$ a4 ]: _8 o8 ?7 _( r$ Z2 O! f& Z* r
15. 一种使用Timer测试HSI实际值的方法
& Y' q. x2 l2 Q4 c% v5 F$ m
6 ~6 _+ i( h% i6 d& d) }. ]16. FreeRTOS定时器精度研究# z) W- H% s" j( |

" R* B2 \7 ~1 D* v6 G17. HRTIMER产生多相相移信号
+ S6 p; v$ X7 q  a" ^% k* C2 \' `0 }3 `, W9 k/ L* |2 p; W& e; @
18. 窗口看门狗启动时异常复位问题- d0 K8 Z% I3 F

3 s7 W  y1 p, j" ]& ~19. PWM硬件间隔触发ADC
$ \. b7 c, U' x- ^/ ?! @- j& p9 s+ k
20. STM32F030低温下RTC不工作4 C9 v( Q: J1 Z: E

$ c# W8 |$ z( B21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
4 X0 f9 C* _5 S9 T  ]* @. R: t5 a% ~0 B# _  I4 m
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)7 ^! P% A1 |9 o; O

, B- d3 S- T" u! @& ~! `. p23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
0 K- X. s8 x7 ]" W7 b7 P0 b4 c8 t, {9 C- F- W: u* _, F7 p1 a: j' U6 s
24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
& f) W' C" m7 O( U+ q/ s
* ~7 _- e* U1 v% [, Q" y
25.MC SDK 5.x 中增加位置环 (2020.3.31)+ g1 h& R' {& ~
0 X1 m/ l, G$ \! J* @$ E( p# x
26.STM32高精度定时器PWM输出话题 (2020.4.29)
7 P  T0 I6 ^8 x  D; @9 j# y. j& O6 W$ q, b2 f: I& a

2 G2 H4 g  E7 y1 q7 r" Q+ }& T4 P27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)( W1 ?" a6 g0 l; x. [

+ `: b( v* V- k2 a' U/ B) Y七、内核& C; \5 q  a9 c( p2 @5 i2 @

6 @& V' d2 y: D/ R; ?1. 使用指针函数产生Hard Faul
2 b0 g3 C* F0 i  y" k2 h / }, w( W! S% ?4 f' ?& E
2. 调试器不能通过JTAG连接器件
  a6 y+ X3 ^) Y; E; | 5 F  T1 s& z3 Y2 |. Y
3. 鬼魅一样的Hard Fault* b7 g$ h3 h! h5 \1 x
+ ~0 K* J* t* R
4. 进入了已屏蔽的中断[
# t+ `/ W$ s- Q , z3 B% O3 S6 }0 B7 B' q( V
5. 浮点 DSP 运算效率不高6 T" o0 B2 i( j) `

* d! C* p& u( H- n6. STM32上RTOS的中断管理4 M3 q4 r! Q( a0 u4 j+ d8 V

  x" o  L$ C; j* S! w2 E7 D: J5 k7. STM32F7与STM32F4的复位序列比较
2 j& \; X3 r* c" ~8 M! x# N7 d# H0 x4 L! X; j7 S3 v
8. STM32F30x 的ADC 采样的傅立叶变换1 `1 Z: s7 t7 @& O

. x, I4 h: M" d3 Y- u* `9. EXTI重复配置两次导致误触发中断的问题) Q8 X6 U: I' l' i0 S7 y
0 m: e5 m- r6 L; J# }
10. STM32F3xx/STM32F4xx使用浮点开方指令
: D" L" t" T' p# M  m( L2 ^- _9 X/ W& h' u/ `
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响
( }1 i1 q) \" I  Z/ }- K
! }! i( N) G9 I$ T5 ^# X* e 12. STM32F7 MPU Cache浅析  
3 u- q4 u  ^' [# o7 Z; F
  s3 P$ A- C" a/ s) j0 {1 W- ^13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)& G+ l- `" c9 h2 W' Z+ v
3 `3 m& D' g" l0 w" O% W
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新). ?* X5 M# M" D# Q, B* x6 l% n
4 M  g7 l+ `! k: K8 c) a
: I# s! `8 v1 {+ x# U
八、系统外设
1 p- x* f/ o2 ~ - Z! r% R" m2 `/ s
1. PCB 漏电引起 LSE 停振
7 I/ R( G/ R8 i$ d, w5 d
& D' s6 u5 v  K' q1 G! L2. 时钟失效后CPU还会正常运行4 {" z* r6 r$ k. S# ~6 {& e
& U2 R, k* a9 Q+ S( H+ f/ D0 k) w
3. STM32F2中DMA的FIFO模式
& R& @9 c; P: p0 g% @# {) Q+ i) h( y/ ^" w% `1 A# `! r$ `8 x  Y
4. STM32L053的GPIO翻转速度的测试' U6 e" L: }  x& o" Y
4 H% M/ q& O. R7 d1 C- Q6 n
5. STM32F4xx PCROP应用( M4 a, k3 }, A. X) [* d
% B: J7 t: x9 r$ f. {1 a
6. STM32L053的GPIO翻转速度的测试9 }7 V; q1 F0 e9 U$ I" V0 z

$ Y5 p% {5 q& _/ Z2 L$ Y8 g+ R; ]7. 如何在IAR中配置CRC参数
8 t  v  B! n$ {2 S7 G( C/ S! }9 l; C  o7 a% t4 M% x* n
8. PCROP区域函数无法被调用的问题与解决
7 w' @4 |% k, q! x0 V! ~ ) K: C% c2 M; W* s! R0 Q6 I7 E7 S
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
' S0 p) O* u) p, H3 i/ K9 d
! @# n$ k* n: L" M10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
3 n4 N( U3 F4 w8 @: e
+ m6 e' V  f4 _9 E7 E  Z4 J; J4 G% o! a11. 如何用LSE校准STM32F4内部RC振荡器
; \/ o: u. p4 Y
( A. }2 ?; [3 f; }  Y. q12. EXTI重复配置两次导致误触发中断的问题  7 B, L; L" P) K- \

/ [7 h( O" [- r# O9 ^" U; G& X7 \$ C13. 时钟安全系统的应用(LES篇)  0 J/ b4 G  I3 r% E6 w
( _- T4 H9 ]' e3 k- \& }
14. 利用DFSDM开发PDM麦克风应用介绍  5 q( r% O4 l" N: E$ g- r0 f
7 u7 v4 S- R0 d
15. STM32H7的FMC外设在DCACHE使能时运行不正常
% f4 r$ \' k4 j5 U4 @/ X) h: f# G7 ^: v% v$ I2 L% [
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)( n' l4 h- \: x' ^8 ~5 C% f0 `
6 @& m: ]( Z% C3 a& C3 n

6 e& @' R% R# G' u" [! c九、标签和收发器6 B' s: X, y4 m! q  I# X5 ^

$ s, G* J! |7 B& N8 i0 n! M1. CR95HF的初始化步骤* e& |; L: W( A+ M; [' Y
# G4 P% L3 m" P0 P3 W

/ d3 s* F+ u" V  _/ u1 q4 ?
3 H, g* X  ~% D4 M- ^( |2 c& B十、生态系统3 B- v' i2 q( c' v7 r* \

' r" B, V- c6 M1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题( i; R: U" m# M" p. N
# o& w+ ~' n$ D  v: P
2. MDK Logic Analyzer 功能在STM32中的实现问题
& s1 ?) g0 a! Z  C1 H+ ]3 \8 C0 [
7 O$ v# m: i6 S4 H* y7 J. e3. 在IAR6.5下如何将数据存放至flast中4 Q7 d) [# m- Q3 H' H
5 z6 V  C- X, K* q$ D
4. FatSL移植笔记4 [# t4 e9 M$ E% z' X+ c0 i5 F. L1 g

# `/ k8 A; p; M9 R3 s5. Keil中使用STM32F4xx硬件浮点单元0 x0 s( f  w! F6 _  F

8 |2 i( t  X8 y, u: \4 j) o6. 如何生成库文件(MDK和IAR)
9 c4 q8 K+ f2 o2 Y + g- `3 O6 B; m" |, K
7. Nand Flash文件系统解决方案
& m: `6 G: g, `
. m4 C8 W  }% D" f8. STVD在调试时弹出“Cannot access configuration database”的解决
- f" w( ?. l- p2 _6 N$ J " v, e, C3 b5 {; U2 c6 H$ g3 x' |
9. RTOS低功耗特性的设计原理和实现
/ N+ T9 R  j! c2 k
: b/ K( |( a9 b5 f3 k  v& S3 H10. IAR下使用J-Trace进行指令跟踪
  ]. ^. U+ [  a! d2 W5 |0 `( v. l6 ?! _' c: [& x3 _" d* m" V$ s
11. STM32上RTOS的中断管理& e7 h' z# c! V, D: L& x9 _

* H0 {% w$ \9 k' C6 d5 o6 u- `12. IAR下如何让程序在RAM中运行
$ ]0 V! x% _, r  s  b$ k! P3 a! W: Y  w8 j2 A
13. 如何在IAR中配置CRC参数
0 {4 @3 l- y# _# ?+ O7 J& |/ t, Z- m" ~. d
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册# i# w/ A  [( Q$ ~8 x

  s4 g* W9 W' _  V15. 使用mbed进行STM32开发及STM32F0的时钟问题
3 J6 U6 G9 g! s5 y# f# l5 Z9 Q  ]( {* e' A
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能1 |( r: M8 o1 n$ a- p0 f

* Y. F- Y- T( m3 S) z17. 多任务系统中的不可重函数使用注意事项
. w$ h9 G# [2 F. v2 e- P# w2 |: a, l" ?- W! E" b* f
18. STM32 utility的hot plug功能
( U# i& c+ }. u: \+ I7 A0 d5 q7 i1 B* S$ }! b- P$ F* X
19. 如何将CoreMark程序移植到STM32上* f/ R/ u2 ~3 o: N: z) g/ x, ?
& y) t+ h7 m3 y' ~
20. FreeRTOS定时器精度研究
. r6 w! u' J0 d- i, g
; X! c# y) _" h0 Y1 I) v4 g21. 如何使用Eclipse和GCC搭建STM32环境
& _3 R! S4 J9 J: {$ U4 s3 B7 R
/ U3 X& r! ^7 n- o- n% W0 S22. 如何建立一个基于GIT的STM32库
2 ~6 |3 ~9 Y3 i% L3 ]5 ~  q) q1 o7 e8 C0 h# ~$ U6 t) m, k' K
23. 从零开始使用CubeMX创建以太网工程- h  w7 Q* H- B
9 _8 n4 j9 Z+ Z
24.从STM32Cube库向标准外设库移植FatFs文件系统
* ?4 h( _' j  E/ C0 `9 v
6 A* W, \8 }0 g# P8 l25. 基于 STemWin的屏幕旋转
! B' n+ q0 d, e8 p1 A' W5 ^" K9 V$ B5 v1 x3 q, K% N+ Z
26. 编译软件 Hex文件烧写
5 O  y& H3 @' a0 R" o; V7 q! p2 x$ f1 W
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
# K) P; ?4 E  q6 L; e4 ^$ x+ f5 Y' [; v: e3 z& r. Q6 J* ^5 v
28. USB CDC类入门培训
2 N* I: H9 b' I+ A1 d3 v/ G; \. u& y+ q7 X3 e
29. USB DFU培训 $ _1 C- ~) Y* P* ?( n

6 ?: K4 ?& r& G& d3 F' G30. 用于量产烧录的拼接Bin文件操作
" t7 ^' b+ v; {; A1 p6 U' D6 z
3 f/ \! w) k* n1 i31. STM32免费开发环境该用谁
# ^. ?% `5 E; }8 ?+ }6 p6 ~
% G7 `3 W  y  R! g0 O2 ?32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
6 K" p4 j! g; w. h3 H' v; T7 ]  Y5 |
; d9 B/ @: M) Q8 e! S33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)% }$ i: z$ _1 U0 J
, X/ m/ E* G( a) h
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
3 ~: V# a. c5 T6 n- z1 n2 O" o# R2 U1 d) r; g5 ]9 b
35. STM32 FOTA 例程之 cJSON使用   
6 S1 X( b4 |& o# ^" B8 j* ]( B7 l/ @3 _+ D8 `( [1 S
36. STM32F769DK 云端固件升级例程使用说明
- v9 g6 a& d+ v! i+ t2 V* d( q2 x3 J
( @( p9 M+ Z7 R1 p* y4 e
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用 $ c- p. B1 F* {  W

  Y" |6 o5 b. h& H( Z1 j3 r4 \38. 基于 STM32 的阿里云物联网平台方案 / G, ^0 F  K$ ?" E8 E( V

$ H, u3 j' K, L% p, M39.AliOS 任务上下文切换原理分析  0 x+ |9 s% d  D* n4 b- ~

+ m( D2 y6 o% L40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  : Q; C8 J- l' j3 L! C2 b

' P$ ?5 F) d3 `$ o: |. @0 p41. STM32F769DK 云端固件升级例程软件开发文档  
' g5 T3 H+ ]* V7 o% l
- r7 K& x! v+ k0 {8 G' m; E, p& G# z1 n
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
- B, ^' y2 a0 g/ g! _. F0 X7 C; s7 C# Q- b6 ^9 L1 p4 Y
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
" B: p" e; B) ]& J: ]$ `0 q6 }/ E' ?$ Z/ C( h
44.零基础快速入手STM32MP1 (2019.9.19)
: F' u7 N: u+ \# Y8 w4 Y5 M& F" \% [
45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)3 o, f) N8 d$ E5 J5 I
0 W/ `" Z" C( D# C3 U1 M
十一、调试
9 k6 n4 W1 l: p& _ 0 f: z7 c, l# R- e- S9 y
1. 关于STM8S SWIM Error[30006]的分析
0 X0 J! Z. t$ n& } : I# s) V! s7 x2 J
2. STVD在调试时弹出“Cannot access configuration database”的解决* W- B1 L4 C$ T2 X
; K9 d+ l8 M( _' S/ q9 o1 M( @4 R3 g; }* O
3. IAR下使用J-Trace进行指令跟踪
& W2 v: f7 o/ B
+ ], S: o3 |& C4. 菊花链 JTAG STM32
  R9 ]: ^  C: `: C6 K2 Z8 \* T/ n# n) p6 B; G; y  [
5. STM32F411CEUx 能下载程序但不能执行
6 ~+ k7 D+ ]. p. y9 n5 A/ d5 E' f  u- W3 J: V5 G
6. STM32F103C8T6 程序上电跑飞
  H% @! a# ?  [& u3 d- a) a  y
+ ]: ]; W* E+ B; s9 W, w7. 使用STM32 ST-LINK Utility 设置读保护后不能运行
+ A* C( ~9 p  W# u* b0 A7 Z1 V
8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
( f" b- P* R8 W2 g5 e9 g' J8 u4 n* L% a/ w
9. SWIM协议的GPIO口模拟
# @" B) l" Y% s3 {/ T, t: K$ I# b4 x9 {1 F* {8 l9 w
10. STM32F091空片使用ST-LINK烧写后复位不能运行用) L3 `: v* G* ?: s" T, Y9 |$ r1 R

3 [1 b8 ^0 [, I+ J7 p! F11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)- g) H  j. F7 ~. l# u
0 X0 }9 ]7 s9 J8 Z" M' x2 O/ f! J
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24); ]5 m" R7 H2 @# K6 @$ {
* J& @( x5 P% h2 Z
13. X_Cube_ClassB代码移植 (2019.12.24)
% {' ^3 ^! T( G( _
$ }2 y* {, T% S2 D+ E  u: Y

' a2 ^8 q8 t) Y: q4 c5 g14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
/ ?' }# u' `" L- _6 U& @- t) Z7 Z1 S8 a
十二、人机调试* f8 S( K, {; k+ W4 c4 X
  a9 X# ^( J7 a6 V1 D/ B" b. n
1. 一步步使用STemWin在STM32上开发一个简单的应用
" b! w/ {% T6 O
  ^) h. t, X' o" p* l" o7 I- r2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
* y$ K5 C; D6 o* F- l! V2 q- P- a. T6 v2 y* c, ]
3. GUI方案中ALPHA通道处理介绍% t* n/ G7 j( p! Y( q

6 [5 T, J0 M: Z  n4. 基于FMC8080接口8位LCD的STemWin的移植9 a& z8 U8 P+ X( I. Q
% P$ Y% b/ a9 ?* N/ ~
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)& I( Z2 U: |$ e# |

! ]; o5 H- z5 _4 l/ C6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)
# Q4 ~$ ~1 _- U1 |
* x4 P6 A; k9 \2 a$ i$ h2 o7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
3 B  R# O+ g  p) f
/ h- l( W  d# Z9 _8、STM32L5中如何关闭trustzone (2020.5.12)8 B9 p3 w7 N6 y1 s7 R
7 k7 {. r; I8 y' k9 Y; x- i
十三、马达
' |  H; E. @* \
, v( v+ V) z. P9 Y" E2 f
1. 电机控制同步电角度测试说明
6 _: W3 t1 _. t8 ?/ F- W8 h+ G" l7 ]. M8 Z# @" V* c

) B' V. c: h/ i5 r1 [
& l. ?( r! m% O( \) l  e( N4 C十四、安全
7 ~" Y3 q8 N% D- `

4 _9 _( Y) v( p7 g1. 一步一步使用STM32安全启动与固件更新(2018.3更新), T5 k9 K' M0 T

' ]" l. d( L5 y( F8 ^/ B1 x( L- n7 M, S$ u) l2 V3 i. U
十五、其他
  c! Q% m9 J$ S7 s% J% T% Y. V
# T$ i6 _+ ?: S2 B; ?& T
1. 跳不出的 while 循环2 Y& b3 N+ A3 P5 f7 R
3 w. g( v  ?3 \+ q
2. 外部IC连接NRST导致MCU内部复位信号失效的问题: B8 x5 E3 _5 ^6 S

0 R0 v; M! q# u. n3. 潮湿环境下不工作% h$ m' k; s( [  K9 _0 B% ^

- h. l5 m% I* g; m: s+ m6 u4. PCB 漏电引起 LSE 停振
7 \- P3 Y, m" Y- ~7 B
8 U2 l2 S. K7 T6 t) o- y( X$ n. e5. STM8L152 IDD电流测量
% a( ~# [2 i& N# X  f
+ [+ ^" \$ b7 Z6. 使用STM32实现锂电池充电器
" j- ?6 b* [7 y/ S! Q
5 f, O& m2 @% A) M" q" w7. STM32_STM8硬件平台基本检查& _. j4 }5 r, U" x7 ]% L( @
5 B: k! j- H9 N4 l7 ^, O. R: E
8. 验证STM32F401在STOP模式下的电流. c1 p, C' r6 ]4 x) x8 W

: F$ l1 a% i$ \5 b: `# @+ m% W3 V9. P-NUCLEO-IHM001 电机开发板串口调试指南7 H- S2 B6 v. r/ Q* ?: G* A

! ]' g( w' Z3 x+ O+ R$ d" h* G10. 一种计算CPU使用率的方法及其实现原理
1 R9 L  b3 D6 G/ D6 U" t! ~+ k0 G
. {/ u' [+ J0 o0 f11. STM32 RTC不更新原因分析+ f# |5 w! g" w( p$ _
5 g1 H' Z' E3 X- D: e* i
12. 关于ST库函数的代码性能对比
1 Y; n) u6 P: |% n5 O5 J, e: q  t, |# I; n5 W* V
13. 在IAR中实现通过将程序在SRAM中调试的方法
+ q- l9 n0 M# w+ Z5 I
) `5 W/ @( Y9 C14. M95xxx EEPROM写保护配置2 l; g/ ]  T% B+ m3 T5 S2 B
; \: c% S; m  u2 d! [, h  u8 C8 n
15. 4SRxx的GPO的属性& [! ~, \' I. ?& u
  x7 r6 S. `# R4 k% I/ G
16. CR95HF的初始化步骤 & z3 L3 c5 T  |8 @

  p- e6 X: s7 m, W17. 电机控制同步电角度测试说明  ) n4 O6 {+ P8 {; N' R$ B

7 ]7 T; [& W# y5 O! X9 S1 g18. STM32+BLE通过 Notification与 Android应用程序通信的例程
9 _! u+ S+ f; a2 W- z: ?8 ]0 V0 U# F
19. M95xxx EEPROM介绍  p0 \! f8 K5 m7 x7 B$ M

. `( N' j" A, ^20. STM32 DFSDM测量温度应用
5 F' I) ~/ l; [
8 U. z# H, D$ T21.代码实现PCROP清除
1 o8 s  ?4 k4 f
, a, w- C) w$ y* e5 P; g22. 理解与应用MPU的特权与用户模式
( |* i. a7 {7 A- b! L, H7 G4 D* y/ x: }2 j
23. 用于电机控制单电阻采样PWM变形信号产生& j% A* g) l+ F# G
- b! u% z# \2 u/ F: |9 C5 I
24. STM32L低功耗模式唤醒时间测量
9 {9 ~3 Y2 V$ @7 q
; `3 D& j* l7 _+ {6 j6 Z25. X_CUBE_SPN7程序电机启动抖动问题
4 Y/ b) X, n+ j5 m% b" @: P  C2 H$ c
. B3 b: \/ Z; r: ~1 _3 n26. 发现STM32防火墙的安全配置: U* @# E; P1 n6 w( t" m

$ J: Q8 h+ _  W: w- w27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
- M' o6 h& {5 F# Q, t( D
+ x, Z5 u+ t, j- h$ l- v( K28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
2 b: C1 }& w& j  g, `
/ l8 O% e. s0 k. u
温馨提示:
, I) b5 K( A: @, Y8 M. P
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

5 L% E7 f5 v8 L; t& V" _4 T  @7 v+ p: k3 I" q3 D

& D! \6 J" o0 M, E9 l0 B/ F* \7 r, G  ^! l) k9 |/ d
0 N. H: J5 F* \# R

: L6 W6 m7 H9 P" `6 x% \- z  \
, M* H" L* s, y- P6 K  K+ l+ M0 \, e. J0 i
  i6 y( e3 m* ]4 R

5 Q9 ]) L) n2 {/ j1 f
3 f# C, u! G! u6 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
好详细,多谢分享
8 ?  ?; D1 w& R, w, M
5768340 回答时间:2018-1-13 14:42:54
HI  
* ^3 X6 n" c8 a4 u: `3 i0 g2 i   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
5 O9 P/ w# H! V1 {' v/ }   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    & ]: k3 S; b# {( ]
  2. 函数名称:Cdfinger_Bspspi_init& ?4 U- p* w$ B' [  G
  3. 函数作用:spi初始化函数
    9 A5 v* ~9 i4 \* N% Z* ^
  4. 备注:0 j2 k' Z  [  [: [! I& X( g
  5. ******************************************/& K- }- w" I$ K& `4 U+ l
  6. void Cdfinger_Bspspi_init(void)5 c, g  Y  K! \, x$ j$ c- M4 M
  7. {; n9 @+ t  I& l: d" c; Y: g, y
  8.         GPIO_InitTypeDef GPIO_InitStructure;) I% h1 s3 w, D- p6 _
  9.         SPI_InitTypeDef  SPI_InitStructure;
    2 q. ]" f* F7 T8 d, }0 b1 q9 v
  10.         DMA_InitTypeDef  DMA_InitStructure;
    - A. V9 V/ i/ K% I! j# x
  11.         NVIC_InitTypeDef NVIC_InitStructure;  C3 d7 u8 K4 _0 ^; T5 ?1 n2 h
  12.   " _% {2 M( N9 A: k; ?" U- o, E7 Q
  13.         int ii =0;
    . Q  f7 C8 r5 b* {
  14.         8 X+ e' b0 N% A9 d! n
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    & z! e/ c5 ]$ O
  16.         /*!< Enable SPI2 clocks */, h/ B8 k+ R0 `5 o, J: ?% s
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);, Y+ z/ c' F  j
  18.         /*!< Enable GPIO clocks */- A8 ~+ e/ u7 q& o
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);# \! e1 ^+ z9 n2 b; \
  20.         /*!< Connect SPI pins to AF5 */' c4 P2 r$ b  Z6 K$ j1 p* q
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    . x: I* z5 v6 D
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    0 i( w; f3 q+ h7 X( a
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);$ T& `3 |) [2 R/ J
  24. & j# i6 G' f1 ^
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    ) U$ R# _4 C+ C& l
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    , r7 ~; k1 ]: ^) n) ~3 `
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    , z) ~6 P" v" ]  j* X4 M, ^
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;1 s6 h6 Q$ G4 Z, p
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    * ~- b, Y  {+ g4 F) j
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    - Q1 M; t& r/ z2 d! F7 M
  31.   O4 h4 f5 @, Y! T9 Q3 X) l
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;2 l" _6 h! w; K, T
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;0 y( U+ N! \  T3 m
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    7 B' t( g6 c9 R, q4 F, r! @
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;4 r* f+ }% @/ k" F1 b. ]
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;3 G9 w3 y7 M9 n# L4 d
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    # S' Q& I6 K0 x4 w) h* T
  38.         Cdfinger_BspCs_HIGH();+ h. l9 R: y  f3 p+ [& D& k
  39.         //Cdfinger_Bspdelay_ms(1);
    5 F9 \' f( \# p3 ~+ i0 h
  40.   //Cdfinger_BspCs_LOW();8 ~0 w1 t" [( ]& p  z; z  u
  41.         SPI_Cmd(SPI2,DISABLE);
      y$ I6 T6 P& a/ O  I  K7 [. Z" a. _
  42.         SPI_DeInit(SPI2);& x1 J4 O8 w- I/ G0 E* Y
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    % h4 l  k2 G6 O' o* ]
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;) L  q1 \  E/ M" e  J
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;2 c, y/ h+ K9 {  n- A' ~$ I
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;7 b: J- @; _3 i( H4 S
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    ) w$ u! e1 Z) A  ?$ L! a- O
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    . t0 h4 Z1 K# y2 c: j0 S2 k
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    3 Z+ X, P5 Q' Y
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    " M0 |3 O$ x) c  L) K6 K4 [5 }* l$ c
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    : W5 |+ K* `6 q/ i$ g* V- j
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    6 W$ Q4 {6 {7 L$ L7 c

  53. 7 w' K8 I1 e9 N" t# v
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);& W1 K0 h. z! V
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/# l% P  A+ m* Q1 f- [" G
  56.         DMA_DeInit(DMA1_Stream4);( Q0 e2 x2 s4 |: {+ L
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    ) r3 ?3 |6 M' |/ [6 [: Z
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);) S0 H, {0 N& x* b3 l! T+ v! p0 `
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    1 M3 `' N! P! n/ |* `: S
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;, l, T% t8 m1 {& A4 `$ n# ]0 Q' q
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;* U- e2 D' i( y/ T& i! Y
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    + Z( j5 m( r% g
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;- }  D- u7 E( [! ]
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;$ [8 }8 e2 z) h
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;/ g  [7 T9 Z$ b5 g' u+ v4 m7 P
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;: s: r9 v, A* [7 T* o2 A: k! V$ |
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    0 m% o6 Y# s* F6 g" i4 W9 J
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    ! h, s9 p" E) ]/ e$ g
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;- I. b! E& u! v# j8 n
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    5 W% d% I/ h0 h
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    ) D1 D. `1 H& {0 {# z0 C
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    % Z$ m' v! Z) a; w6 P/ X$ s
  73.   
    5 ^6 F6 c) X9 m
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/3 g( E6 y7 N% J) z# t/ v  F5 J2 b
  75.         DMA_DeInit(DMA1_Stream3);4 r* v: |* o. a& g% e2 A
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    : H0 ~6 {4 {2 a5 X
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);- Q+ x0 o& S1 I$ c  S
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];- B6 l5 C0 u; H) H5 N5 m
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    + {; R# A& v1 ^  G
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;, c0 _8 F- Z) j$ R3 n$ Q! v
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;4 x  }6 H  J# G. X
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;# K9 ]! e* ]9 }" ]$ K! S, v
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;$ Y+ m8 H/ @# v! V# i
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
      t- Q6 W1 g: U1 B
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    $ H, z7 D0 x: |
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;( \) D$ Z7 i0 f2 W, s# M6 n
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;5 B% l- S/ Q, U. ^  p
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    ) R. Q9 }6 [0 z4 ~
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    5 \: M; o, q9 V" k6 h$ h. N
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;( y* r$ R* v& G+ |4 ?
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    7 F7 y8 A5 d. r! Z: m
  92.         //Cdfinger_BspCs_HIGH();
    ; v1 ~5 e$ K7 f6 C
  93.         & p) N% J9 V9 u- v4 [& T
  94. ' {+ Z3 {4 ~& e* `, `+ k- w9 n

  95. " Y! S7 _* ^) y- F, j7 f
  96.         //发送中断$ F  u: ]5 d' m% K
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);& K7 q7 U7 X% V3 o. F
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    . r9 H6 h5 P6 q5 I0 d0 Y' S3 Q8 L
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    3 q3 e# ~, v+ a: s+ x! b
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;) d. ]1 ^+ d- k* r; O
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ! h4 P" w) q& [1 z; L& Q
  102.         NVIC_Init(&NVIC_InitStructure);- S+ D6 r3 x* M2 y/ [- Q* p
  103.         1 @. v2 L* E& y9 v' C2 ^' E* f
  104.         //接收中断$ j" I$ h1 J) E5 P+ y+ N. A# F. X- Y
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);# H% R' {/ i1 k! Z. q7 r
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     # n0 ^- C' F# g
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;5 B$ o- k' f9 N' m
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    ' D1 S4 {& G, ?: e/ A% K7 q
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;& ^2 u0 n# Y% K8 T
  110.         NVIC_Init(&NVIC_InitStructure);2 b: s/ T5 H) F3 e/ K8 G" g
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    % |- C! `, s; E. t' q/ k
  112.         SPI_Cmd(SPI2, ENABLE);
    7 L6 A  J6 |! c3 k
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    3 e* ?! S" T, l& j- f  P) n
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    3 h9 @! j2 K% m( }8 R5 Q5 s  B. d

  115. / d1 f3 O7 n# V6 H% `+ _% e1 _1 \
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);! k2 [' U( B6 _& l! _7 a
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    - F& q2 ~0 r/ |6 C0 p  g2 E5 V# E+ C9 {
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    8 p& Z* |! a* j3 A! L$ K

  119. 9 n+ C# G% s" {  z( H
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++). a; l- @2 J" @+ s7 x
  121.         {
    8 B* Z9 k0 u+ g1 k8 }
  122.           if(ii%8==0)5 X% m5 q$ H6 \. k3 v
  123.                 {6 a- t% ^/ C& s5 d$ c
  124.                                 printf("\r\n");
    1 O, ~! e. U$ F# n
  125.                 }
    ! z; h& B7 u) J! p4 J7 o! m
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    . S! J: ^: @( v9 ^9 I" @2 F+ D  ^5 |
  127.         }
    1 X: p1 q  A( y
  128.         printf("111\r\n");
    * q' `+ [2 ^2 T5 ?5 ]& y5 g6 ~
  129. }
    9 q4 I* N: d7 K0 w/ g

  130. 5 C! I( Z1 l7 p5 u, z" B! ^( J
  131. - a2 X# S( b# s! J8 q6 Q' x
  132. void DMA1_Stream4_IRQHandler(void)
    ; m$ e( `# F2 ~
  133. {: y+ R2 `. g( V- O5 y6 j# i
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)3 u. j3 B$ D" n
  135.   {
    8 K+ n+ C7 I' k7 ?
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    ' C7 h% f. X9 v8 M
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);1 W, K$ l+ X; z# L( z& o2 _% J  Y/ I
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    ' J3 U  ]% J" X  A) v9 O2 ?
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
    4 X. \$ V; l: n0 k5 j  M& y
  140.   }$ }" |! d9 b7 ]) p! h
  141. }9 ~' x: n5 N6 D6 N* A' U

  142. . u9 h( h+ v( i
  143. void DMA1_Stream3_IRQHandler(void)
    & ]% A' W. ?$ z9 ], P
  144. {! N* J$ T$ @# E
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET), \% V" Z3 J9 U  C1 n  D
  146.   {( w0 q: W0 M  @$ _' c; Z
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    + C' _1 ~* E: f) n: V! z
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);5 ~; E3 n% e) m; [! B; x
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    " q% _- K* c  F( {2 y4 u: N# _
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);+ ?+ a! ]( u6 p* A- u/ Z' z9 c6 ?
  151.   }
    # L' F3 r+ T% X6 R" e: S) Q
  152. }
复制代码
lovelifett 回答时间:2014-1-23 15:10:56

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

楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
* {0 a6 `# r& I: }& T. [. o以下是全部代码:
  P* t! w: U* P5 b' p#include&quot;stm32F4xx.h&quot;: X* _) B( s( P  H6 c
void RCC_Configuration(void);
3 f7 N8 H+ f' p! q( Q% @void GPIO_Configuration(void);
; p% m4 X2 C; A6 Cvoid SPI_Configuration(void);# I9 s- A1 ]9 g+ c5 O2 [
void Delay(int nCount);+ `, M/ O: D6 P0 k: e
int main(void)- h* b' O) w/ i( C& y
{  RCC_Configuration();! ]6 `1 ~2 h1 h
  GPIO_Configuration();! N% Y- x( N, A% i9 f. S/ I; `, G/ R
  SPI_Configuration();
" b7 |, t3 \! m4 b+ T7 `# o5 I/ I' G3 v8 z* V while(1)9 d& V8 _. L( x4 w% W6 R9 R& o9 g" n
 { int data=0;
7 r$ B* |- v" p3 C4 {1 N  SPI_SendData(SPI1,0x55);  M# A7 E4 L3 O9 R
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 8 v8 n; f9 m, B- e$ t
  data=SPI_ReceiveData(SPI2);
  D* ?; q2 y: l" }  if(data==0x55)
3 a$ c% {) \, h5 A; p     {  while(1)
$ q9 j$ z6 v  Y/ O9 G             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);! P: l& W" t1 J9 R4 d& L7 [
                Delay(0xfffff);# ?& n- t, K9 W
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);+ X/ a& R& K' {0 v7 J
                Delay(0xfffff);
6 Q1 k9 d" g5 c; ]" A/ |$ O5 K   9 j! B4 a# O  G  z' h5 d
             };
" a- O9 }1 {2 d( u7 c     }
, n  o8 M  b! P/ ?( J! a5 r+ s& d- N! }     else while(1)
/ t, G6 e/ R9 H0 _3 M$ t            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);9 Z- E, W) o) x6 x  S6 d
               //Delay(0xfffff);
8 P. x- _" t8 X/ i9 e               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
3 Z! T- a: i3 H! T/ t               //Delay(0xfffff);" z9 s% i7 U* \
   5 W2 w. f* F" M" B& ]2 ?8 C* q7 D
            };, b$ Z1 d3 R0 t7 y, F; F
 }
. R. E' y% o4 D' r  m}2 S- o7 n# x+ ]- ]- N# Y; b
void RCC_Configuration()
# y4 ^8 _. \' k{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);: [* t, B) o! M7 f  w; J
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
* h1 \: V# l- p( P+ O1 u9 r  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   9 h3 Y6 {7 o' H: k
}
4 k& |$ p. w3 ?7 f8 M  T) ~, rvoid GPIO_Configuration()3 N/ h' [7 I. a& s
{  GPIO_InitTypeDef GPIO_InitStructure;
' v; J3 ^& x0 H. h2 ~) m8 }  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
' e: U' h- `% r( @1 z& y  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;: R/ }5 w" n. ?" ]" z/ V
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;7 j$ S* m' h/ a( I
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
" |4 O. _* Y- V2 j  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
* ~! i' ]4 W; v$ P' J. W  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
6 v  r) H6 S8 s* V( M5 S  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
8 J) M# d! y; B  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
' r" i3 u; S8 C  c( H3 w% {  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;. i" V; s4 h6 h0 c) w2 ]
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
6 z1 A- K) {3 {$ c- D5 Z  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;% {. E4 q$ M" M0 ~% F7 j, e1 r
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
5 _' B5 P( X  B& V: W  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
0 U2 v7 o! |, n/ D: E) B- q; s/ O  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
3 v8 w  J8 i8 P* s3 V: T) k}
' F6 G. }' G+ p/ Evoid SPI_Configuration()7 |5 [0 V% Z2 y6 v
{  SPI_InitTypeDef SPI_InitStructure;
( d" B& H  ^8 @3 K  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
9 ], D4 x. u; d; F+ x3 \$ ~0 q  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
2 s3 f( Q; g) f' ?  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
2 q; d/ |6 b2 F% X   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
6 W6 M4 b0 h# T- _( x7 P  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);6 V( f5 ~# r% p8 X0 w+ a$ _) Q, i
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);" _% [6 h* o. c1 N0 L1 N2 |3 e* F
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;' m8 c! e3 M( M; D
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
+ O; {' l) m1 ~+ O  |: Z  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;5 D5 c# T: g" n3 D8 {% g% y
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;2 a+ w" \) p. U0 R: K  N
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
$ c6 f; o" B  O( d  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
, c" p6 y* o0 m+ p# Y, g   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
/ }6 v- D, y9 _) J   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
& f3 \4 ]- W! g9 ]5 j8 |. \  SPI_Init(SPI1, &amp;SPI_InitStructure);9 V! v& k5 D* l  x+ ?' P$ s
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
6 ~' t" o2 }) c* N0 h& @4 F   SPI_Init(SPI2, &amp;SPI_InitStructure);
3 q+ x9 B# B, F% |7 Z1 F3 R   SPI_Cmd(SPI1,ENABLE);) G* S: Q/ f1 g; x. Y. Q
   SPI_Cmd(SPI2,ENABLE); / Q5 g, {5 {5 o- G  Z
}- u& {9 [9 w* q* T( i  ?
void Delay(int nCount)
6 z% h2 B4 T# S# ~9 G+ j{ int c1=nCount;
) g4 R  T/ T& U. X9 E int c2=nCount;
  H% _# T# l) I9 y* |) o for(;c1&gt;0;c1--)8 _& q0 E2 R5 `* Q/ l( K  Z
  {% y* Z6 m0 r! u; P6 G" C
  for(;c2&gt;0;c2--);5 O" T3 V  U7 V
 };) E8 o7 E5 \( p$ H8 \8 r0 F1 T
}
  w/ O. e6 w- P: w0 A( ]2 V先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
! d0 ]. E& `- \/ S( C楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信; A2 W' W6 {( ^7 N; p
以下是全部代码:
! d5 h9 T2 w7 a& U#include&quot;stm32F4xx.h&quot;; A  F' E5 }' A' O/ E. H
void RCC_Configuration(void);4 E( g, T* _8 n. Y) @; Q& ?
void GPIO_Configuration(void);
. B$ Y. F& M( L$ A" w% Jvoid SPI_Configuration(void);
$ [' l; e! [5 tvoid Delay(int nCount);
  G3 H. j# |/ ~/ j9 M) [& c# mint main(void)
6 S4 H. V; O4 h- U{  RCC_Configuration();
8 _6 N1 f. A8 \+ C, e  GPIO_Configuration();0 C+ s6 V1 X! b2 u4 m
  SPI_Configuration();. v" h9 z8 u% T
 while(1)/ x$ H# ~: ^. N! i8 O( ~+ R
 { int data=0;
+ ]3 L( w1 q8 F0 h8 M  SPI_SendData(SPI1,0x55);: e# h2 J% Y" ^+ ?$ }2 k& q
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
4 u, y! ]& g7 A8 N  q" W  R  i  data=SPI_ReceiveData(SPI2);
; W" @3 @" j6 N  if(data==0x55)4 @6 Z" K1 N% L9 ?5 o) s2 i
     {  while(1): O1 E4 u: s5 y# `, s
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);7 W7 ^1 j. @; p8 L& ?3 M1 y4 d. P
                Delay(0xfffff);: }' Y. `( E" s7 g) W( u1 q3 ~; T0 R
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);- [( ~. Y% k$ c; P% c: f
                Delay(0xfffff);/ Z) h4 G% M: [1 e5 I0 L" A: L  T
  
3 ?- \) H1 Q4 n6 R             };
( h4 J' Z- _7 I     }
- |/ ^! b# l- D1 N; d     else while(1)
; x- V8 v+ @9 A% j, n            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
. z1 P5 Y- A/ E) B               //Delay(0xfffff);1 g' d4 X1 w' b% L
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
" R# ]1 s4 h5 W6 C( D2 G3 b+ `               //Delay(0xfffff);
, r- W) H' c5 s4 f8 d8 c. }   ; ?8 l2 [5 t% ?
            };3 }; z  v# _5 I$ K' a' ^
 }" S# v  W' Y7 Q8 \, Q" c: B' g4 s
}- q6 n. N: ~6 q' F0 }
void RCC_Configuration()
  i3 r$ W8 o& y& x; t( \" P{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);' U) S& M) M- ^$ l0 A
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
: y) S  F. q) o2 F. o  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
  {8 H8 A2 a; C( |4 P! B}
, N* c* d' m  ?void GPIO_Configuration()$ J  ~9 ]8 @' b
{  GPIO_InitTypeDef GPIO_InitStructure;
5 q7 c9 }3 y% t3 W! e  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
  d8 f% D4 Z6 A$ }+ D- z6 l  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
* S; d) v/ z4 c3 ?  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;  A3 Q+ ~5 @4 Y9 d
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
: b. c( T6 T. w! M3 K  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
2 o5 `0 _" k$ i9 u  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
2 P2 H8 V5 X9 ]4 T  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;& Y9 Q  i8 z# x2 h9 |
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;" ^3 D0 d. k3 R9 l$ J, X
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;. T  \8 [. ^6 L# ?  d, u
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;. K0 [4 |8 k) {! N6 |! [4 P, g; \
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
2 b( G( F) A$ m0 Y4 G- G% o  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);& C) R- U) `4 d% G- q
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;& u& p: O& B& {1 g) R$ ]
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);2 ]+ ^' ?9 K# Z" y* Z$ \/ j! j
}* Y3 q" X. }- B- A* p* e  D
void SPI_Configuration()* H: Z7 b& L) K8 L2 i8 S
{  SPI_InitTypeDef SPI_InitStructure;
0 F/ s1 j) C* D1 o8 }, S  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
- ]7 X1 d( q! [' I  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
, C: |' @9 d( p8 p/ a9 a' o# M  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);- O$ Q9 o% L* }
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);9 C" d5 u9 F' Y# X- V( L
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);( \# a# g1 r  h. `
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
' I4 A/ W% _2 p  R  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;3 }0 ~! k: y' p+ D3 T$ B! A
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;" d+ m" d& A1 W# y2 h- {
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
+ T8 X+ f' n9 ?$ ?5 w  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;0 G- n  r2 G7 P& g1 f9 Y# c. U
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
4 X5 ~" R1 K( I6 R- w  C( ]) f: B& h$ c  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
( |7 i- ?* [. p2 @3 P   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;6 E/ `" A  }0 A$ B6 B' M( P. m
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
3 r3 J$ A5 w% T$ [# ?) a  SPI_Init(SPI1, &amp;SPI_InitStructure);, l) `8 ]6 s% W/ K
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
0 L% O! v; w* v& h) p* a( A   SPI_Init(SPI2, &amp;SPI_InitStructure);9 v4 {% j, U8 K6 G' }0 `: M
   SPI_Cmd(SPI1,ENABLE);
% R/ c" q2 B" ?" F3 V7 r9 F+ S8 ^; o5 l   SPI_Cmd(SPI2,ENABLE); 
# p: d# m2 |0 Q- B}$ v5 n" |% \; ?
void Delay(int nCount)
$ H) y& `' M5 C) H0 a9 a{ int c1=nCount;  a% Y9 O0 T1 w1 d7 `
 int c2=nCount;
. ?) i2 i0 M  L! a6 M- u; w for(;c1&gt;0;c1--)
4 Y, H& q4 e* A0 \, s' ~  {
, w7 W5 O+ @/ V5 L2 y  for(;c2&gt;0;c2--);
: X& ~/ _% X% `+ U( W6 |) N2 ?$ l };5 x9 H* C7 Z% m( R2 v) Q
}/ V! m$ c: U& ?% S1 }" k
先谢谢了~~
& j/ ^7 Q! B4 u8 l$ S# h+ t2 d ! ~% A& h0 _. b4 {- `& J5 {0 X
; K3 X/ k7 `: ^% y$ P' E
楼上的问题,看我帖子给出的提示哦~
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发表:
: t% F' K2 }5 h# y/ d 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。; m' I' S! r( O' U# c0 Z
 
- u# s4 D2 o: I/ ~/ c4 Z9 ~, w4 g1 M) z& ^; C( H2 n$ I) w
多谢支持!!
abner88 回答时间:2014-3-9 13:43:20

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

ST社区做的确实很好 版块引导很好 资料分区也好
stm32f103vc 回答时间:2014-4-3 18:52:58

RE:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常好的帖子,希望可以及时汇总更新,收藏了
renqinglei 回答时间:2014-4-4 18:00:50

回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常不错哦,支持下
renqinglei 回答时间:2014-4-4 18:00:51

回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏

非常不错哦,支持下
Jack·Owen 回答时间:2014-4-13 08:09:50

RE:【ST工程师 MCU实战经验30篇】之鬼魅一样的Hard Fault

都是精品。大大的支持
gougouyx 回答时间:2014-4-16 14:40:33

RE:【ST工程师 MCU实战经验50篇】之鬼魅一样的Hard Fault

谢谢汇总,
anan555 回答时间:2014-5-7 17:49:29

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

  
) @# Q) F' e6 [0 K鬼魅一样的Hard Fault
  h; e2 E! O3 } 9 ]8 [& ?( E# W6 v1 c! H5 h
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
- w) ~% u% O0 i9 ~$ p* J7 M 6 A+ K* m9 K( l3 C
咋解决?
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 手机版