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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表: f8 g! q9 ?# q( e

( Z% y1 n, v% S9 \  M- R
3 ]2 {. {" t- f9 S  A' |社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
4 v6 z1 \" b% s9 ]8 J4 W
/ B! @  z5 B; [+ G" A提示:点击各主题,进入帖子,可下载ST工程师解答详请
/ D! l0 U4 I. N+ U4 a  Q
/ v( d) B$ `! D) p6 S
6 ], |) W- z! T一、通信接口
- `1 \3 `0 C5 K: j' n
0 S+ J, i/ {# b( I4 ~/ b1. STM32F2x7_Ethernet(FreeRTOS)驱动更新% H! ^1 E3 I# \* p0 r8 {# M" H
( B2 `/ f7 |, o7 @
2. SPI 接口发片选信号导致死机
, u4 x7 E, S3 N4 @$ T2 s 0 d3 `  ], }0 w8 n5 V
3. USART1不能设定600BPS的波特率; U! i! [  F, ?1 o" y
& P7 D7 H' Y$ X3 o4 R/ E
4. I2C 接口进入 Busy 状态不能退出9 |* k1 y) a+ s- v
; r! x: L7 `: n4 k
5. 对 Flash操作导致 USARTU接收丢数据  ]1 p. p, A1 z5 P- X

, N2 v$ ]. K+ |; S# I6. USB接口易损坏3 Q# Y9 j: Q# m3 T; H& B) N
  s: i7 n& {0 I# M
7. UART发送数据丢失最后一个字节
# \3 c8 H0 b3 U6 Y2 N, s) M2 z 8 f$ M% H+ Z8 E( i2 b. w! d$ H
8. 使用 CCM 导致以太网通信失败6 x; S+ I5 a% P/ Q7 ]/ e# J

, v/ e) o7 E! r1 U4 d2 u- J9. SPI3 接口没有信号送出
; A: l3 q( u, n9 E
* k# \" ~; T2 {10. 时钟延展导致 I2C 通信不可靠
' B$ S' \3 R2 E+ f1 u% f6 } 8 K6 H1 D" O! |0 K. }; S
11. M0的USART波特率自动识别问题
3 x$ w& `4 x( q/ }8 N ) T$ u9 T0 d( o& h
12. WK15 OTG做U盘主机兼容性提高
$ R7 f. G) c' D
* o9 u5 t) w7 W+ B0 |* j13. 以太网电路设计注意事项8 u& V+ b* d& u
8 Q1 |: o' h. J% H9 C# d* _) F! C
14. OUG主机库在BULK传输上对NAK的处理  r5 d: ^6 ?) M5 A! j4 C9 K" }1 h
0 M3 s0 f3 _3 w/ Q; \" J
15. 串口断帧检测- c' ?2 z# t1 ~$ R1 ~

1 u" Z1 T, |+ y4 C# Y5 u0 n16. VCP例程用于数据传输时丢失数据的处理+ F, U" q; h$ v( h* Z" v" W

" o6 Z4 w) c- F1 c. ]# A  B7 @+ J  S17. STM8L051F3P6串口UART数据起始位判断的问题
# P+ \# N- d: ~5 t  O8 P ) F8 C2 S$ `8 \9 b6 Q9 O
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号
0 k5 G6 h0 G: E- a
- ^+ d$ @* K7 \& g* k& l. Y/ h19. STM8中UART奇偶校验的使用方法
) x+ K: Q( y+ m& E9 t ' ]& P- d* |( \4 m: B
20. STM32以太网硬件设计——PHY% z' w1 \$ L  a9 O, w
( d/ i5 ^6 ?9 j6 y3 c
21. 一个判断I2C总线通信异常原因的方法
1 j+ h9 g. l/ T7 Q8 _$ V" i( \; w0 U; l/ K7 c5 k7 e) z
22. USB device库使用说明9 Z' f' B% l8 b  j6 ]1 Z
) F! D9 B. {! o- t+ T% ~) P
23. STM32F103上USB的端点资源
3 ~. r. Z$ f' U+ A" u# T- ^  k7 H
1 J& c  ^) |4 l1 }24. 使用CubeMX生成TCPEchoServer程序
9 y9 d  \! K, _1 h9 r( `& |
7 p5 i' l4 I7 {4 Q& }( e1 ]5 s25. SPI接收数据移位  z% d$ j& H/ w2 ^* B' u
; J; f3 ~* V1 K$ h
26. STM32F0中Guard Time的设置- _/ h' @. @8 Y' y% l& _

/ B) D3 L( B0 t$ G4 P  @) @3 I27. LwIP内存配置
+ E: {. U4 U0 X3 c" z# [8 ^6 y2 ?' {) Y
28. STM32 USB Device的简易验证方法8 e5 t* E: P4 x+ a% A* ~, }6 i

; o4 u1 d. F+ J29. USART 中断方式接收无响应问题的一种情况及其处理方法
" D4 \3 e3 W7 p0 ~" ^; d
2 y4 J$ ~- x! N1 a4 k30. STM32 基于 Nucleo板 CAN总线的建立
6 p9 _1 F' A) I6 o) b, T. ]* [
/ d- G7 i) e7 ]  d" P31. STM8 CAN总线的IdMask模式的讲解5 P3 |6 j% J5 B
- n7 d3 x) i3 A0 p4 N
32. STM32F746ZG USB 驱动不正常 & c. c- U% S2 ]
+ b. t; G5 ]! c7 r  ?3 R5 v- Q
33. MCU在STOP状态下通过UART唤醒分析 ' \/ u4 j* f% e9 {- X4 F

( v# c* [0 W/ V) i34. 通过STM32CubeMX生成HID双向通讯工程 1 h2 g+ k( w9 U

2 ]! h9 @8 S( @' N% f35. 串口工作在DMA模式下有时接收异常
2 s1 _$ ?9 ~& X2 t3 ~/ g
3 l# k( l/ \: J' M" A36. STM32 Bootloader中 DFU使用限制
( R1 ?/ N: B) h" S. E6 }: J0 R3 a6 [1 T( ^7 A! O# I! y8 n) y0 e! F
37. UART异常错误分析& W% A% ^! X) e) D2 b; @2 f8 [
) P, ]% O9 s8 i5 }( C5 d
38. 基于Cube库无法检测CAN2的接收中断
( R2 |5 O. Y7 n! Z* v
7 X1 ~: u2 g- @0 E39. 基于STM32F7的网络时间同步客户端实现   c4 \5 M- v( {9 X. P/ n, I
2 y4 ?# ~# C, h
40. HID与音频冲突问题
1 h: G5 U* g7 D8 ?5 h  Z4 |0 g
( r+ a; Q; ?' j2 h7 b- a41. 在进行USB CDC类开发时,无法发送64整数倍的数据) L  u# k" _5 j8 n

0 [- z: C2 v* _: g0 w. W42. 从零开始使用CubeMX创建以太网工程2 o, e4 R" A9 e. [" ~' O) I* y6 J
' Z; W: D9 T5 U* k- G  `
43. STM32F4xxx的I2C总线挂起异常处理7 e' o' E: I7 q# c! r/ ^: I

5 u* b; [" e$ [& `) R9 N44. LPUART唤醒STOP MODE下的MCU. a) z) K; q; G+ W

: a9 J6 p/ D. z  c0 ~  n45. STM32系列 MCU模拟双盘符 U盘的应用
) w, f9 T6 k5 l: ~
4 ]+ S  s: A4 A' \+ K+ L" X* m, Z46. CEC输出的数据和数据长度始终不匹配
/ o( ]0 Q0 x% c. D. g$ ~3 s
7 L. F! e! t4 \( D47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析: R4 U; [. j* i! d1 D. g; X  x

& @" }; g" _) c: f" z: O48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
. I! H+ Z0 l) x% [( L9 s+ m* [5 Q9 I' x
49. 增加UART接口应用时的异常分析% j5 s4 j* h) D( r9 E. }8 M2 V
2 e+ G: ?5 D3 E  S4 p
50.UART应用异常案例分析
2 Y  ]( ?% e5 Q  c: a: r3 l+ m4 |) |2 p3 M- V
51. I2C配置顺序引发的异常案例
4 H# y4 x# v. |  [% Z3 V# n1 i* [0 a1 Y1 R0 `2 ^3 C
52. STM32 USBD VBUS GPIO
: r2 l" K' Z  ^0 _$ @
' m  ^9 V' c+ ~4 A7 M2 v53. USB传输数据时出现卡顿现象
$ X# c. I* |5 I
2 l2 `4 r! Q0 Y! G" m: m& @54. STM32的高速USB信号质量测试实现4 K0 R1 x& x2 g. n- X# T$ {4 s% \

6 J9 }& c, K* z9 {5 ~( U2 d5 a+ [- g55. 基于STM32 I2S的音频应用开发介绍
/ u, I! L' B# O* C8 u; p9 _6 K2 d) t) Z2 U0 x0 C, u: P
56. HID_CDC复合设备在WIN10的识别问题  
% N! h# M' `; p; r; f/ {. A6 O; O# _5 a4 s
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  # P7 k( `7 t. e1 X% l! o

  p+ b, d! |3 W& ]: _0 N58. 一个关于LPUART输出异常的问题分享  
+ N) @5 J7 a: V6 C4 J; M& l
/ Q: D( }$ z% p) m. ^
59.通过 DfuSe 工具控制程序跳进 DFU 模式/ f* P4 N) a" P- o$ l
1 V0 u; p( |' H; H& ~5 J
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
) i% y; Y; f/ R$ D- [

% {  Q! s  m& f2 K61.一个因初始化顺序而导致异常的话题 (2019.12.24)
% I1 l- m# i5 Z# o% j; c8 l( L

6 L+ B: d# l. m. @62.MC SDK 5.x 中增加位置环 (2020.5.29)
) G  O5 b8 Q0 M( C6 _& z# X8 X
) |( E0 o) C1 }4 U2 [' ?- @7 X
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)& J" {1 n0 S# b; x" i

% ?. t# S2 `( H1 x! v64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)" E: h1 X& ?" x9 Y' `+ H
2 L/ Q+ I. Z$ ^* a6 K
二、电源与复位! Z& @( L7 a" |
, X' p  L8 r+ r9 b) g7 W$ y
1. Vbat管脚上的怪现象4 }* @8 X5 H; N: t

3 }9 J: s% `8 D* f2. 上电缓慢导致复位不良
% g4 j) h$ Z( _& a. T9 v8 o ( k6 X8 Y% e; T' V
3. 关闭电源还在运行# S* @& T' l( Y2 I
3 S6 z1 `6 l' A% Z
4. 使用STM32 实现锂电充电器2 {/ R# X% E2 S! R, I2 p$ L" R
1 v! R$ I7 Q- n6 W$ _
5. STM8L152 IDD电流测量! S$ M8 k; J$ \% l( Z1 t5 @3 C, e

: {1 ?9 t1 H3 V) ^# W0 }4 D6. STM8连续复位问题8 [: S6 s: L- ?5 q% \
% F! n( R0 t& M1 T' O
7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
2 F' L8 ]  U+ S& R3 F& @
* v7 o( ~' L' p) l9 K8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
5 ~5 u1 V# Z8 R9 I8 |$ h1 O: Z3 O3 ?4 S* s& s
9. STM32F7与STM32F4的复位序列比较
9 I3 D8 m+ f) b' {3 R, K) F2 U3 s8 W! m
10. STM32F107 复位标志问题
# {# R# P+ v, w$ W
: a8 K2 [4 I3 Y6 u* i11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
# R' `0 _( K: p$ p/ ~7 @+ r4 }/ n5 E/ a5 l
12. Nucleo_L053不上电也能运行) E* @. p5 R+ B6 `

% \" s5 S+ n: q: [13. STM32L4中STOP2模式下的漏电流
2 ^+ t/ f; v4 j% ]7 ?+ Y. f: ?: [# B
14. 在没有外置晶振时HSE_RDY异常置位
5 X, D. Q1 u9 p
1 \* _5 E4 I7 T' s! I15. FLASH被异常改写   (2018.5更新)2 x) [! `/ Z, P* |$ |* Z9 w$ H4 c
+ d$ o7 B, j- B; b1 N# C
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)
3 u! D* g% Z/ c  [( w; z* J7 l
7 v1 R: E8 \( l  d' Y17.一个 STM32 芯片异常复位之案例分析(2020·2.27)9 c8 p; U: d% @$ \" n3 e

9 h& d4 E) q$ N( I三、IAP和Bootloader
. q$ l; J3 X6 S9 }( y , c* T* T1 ?5 y$ `
1. Boot Loader与上位机通信不稳定4 Q/ g, K+ b4 o$ m3 F

0 ]. E) e9 }/ n  o: O9 W* `5 w2. IAP+APP 模式下不能启动 RTOS
8 ?9 g3 J2 q' k/ n- _) y- V
6 d  k$ @3 ?$ l3. 从 IAP Loader 向 App 跳转不可靠) s; }# v# ]: x+ }, n
5 V5 u/ B  _& }. T+ c' l
4. STM32 MCU IAP例程跳转到APP代码简要分析: s2 T1 [% H" W4 N
7 y9 Y0 o! s9 h
5. STM32F091从自举程序向应用程序跳转的问题与解决. w% `" n. J3 @; }+ {
. Y6 k9 ]5 k# S. N
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
' Z- s3 U4 W0 G% N( f" @& ~$ A0 ]1 S, E/ A* e; J
7. STM32F0启动模式相关问题探讨
. C, C2 l. S3 @4 C9 t4 S) x
, O3 C, N' M# u: x8.STM32F091空片使用System Bootloader下载代码
% Y7 B) Q  [! N; m; H2 S
' t; f) o6 b2 h. ~  Q) a9.STM8L  IAP 应用程序中编程指导$ y. R, ^; ^! S  u+ p

; ^! V" X5 v+ }# Z& d' h" w* R- ~1 ^/ C10. 如何通过STM32的串口实现简易脱机编程器* v8 {8 }0 C0 p! a' }" k7 D
! ?1 V% \, ~" K% \; Z0 A
11. 一种从用户代码调用系统存储器中Bootloader 的方法  
- W6 F" d/ ~$ D9 f: ~8 H5 A" f9 W. d7 _4 a$ ^
12. 利用 USB DFU实现 IAP功能( z9 O# X. x- X# h  ?: l

  H% I6 I. l3 d7 f9 M13. STM32 Bootloader中 DFU使用限制. u5 K: g. F# j2 l" p
4 ?  ^7 Q* N" S/ g2 e" y) w6 Q. \
14. STM32L011x和STM32L021x启动模式注意事项( p' H- w1 p2 A- ?; A9 }& q

- Q8 m+ [- q' z( b+ A" |5 `15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
& L. O$ b5 D+ i9 m/ D. M6 {$ E+ D
& Y$ Q" ]5 V3 d9 _% `. ]) M16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 : \' n+ }) {! M

9 U( h, L' E4 }) ]3 @$ ^# z17. 如何使用STM32NUCLEO 板来测试串口Bootloader
( ~4 U* b: u7 Y7 q% A8 c8 m# v! \  P5 W; [# l9 i/ l7 u+ @7 D
18. 在STM32L011上通过I2C接口实现IAP5 y& L' \9 d: l) o$ x7 o% v

; G1 P( V6 L' ?2 c6 S/ ]! o19. 在IAR中实现通过将程序在SRAM中调试的方法
/ @# M# ]3 ~4 U9 ^; D# ?9 `7 d, Q8 d4 o" v8 E# w
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
& f* m  u% b& h) _/ o8 ~$ A1 U
0 \2 R, q4 {1 _21. USB DFU IAP 例程移植的两个话题
: l4 o! r0 U3 t" \
' q) C% w" D! r9 _3 N22. STM32F769双bank启动
! ?9 W' A1 E8 Z# |$ r7 i
; q4 n( [8 B; t/ g+ ]23. DFU加载 工具 DfuSeCommand的使用1 q8 w" d0 e9 {* H; G

: p5 f# T: S, [* F24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    # p4 M6 A) x0 a+ ?; z

8 G) F( U9 A) Z% J, M25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)
4 c, |: u1 ?5 [( k1 g2 k# Z0 M% V5 w* j4 U& |
26.STM32 Bootloader异常复位案例(2019.4)* q3 K# n- O' ]% Y
: n$ E4 }( P0 S) S
四、存储器' o3 T' b9 e1 L$ Y% P" I- a9 e

% Y+ r5 |! g2 ~: o7 F  y* y1. 对 Flash操作导致 USARTU接收丢数据
7 s8 z% T- `) e& O1 f) }# ]+ p ' ]% d( g$ C' S2 n4 R, S4 M
2. 使用外部 SRAM 导致死机' A: l" U  A- D0 W
: m9 g+ ^# I8 ]! ~3 p6 X( a
3. SRAM 中的数据丢失
/ Y5 p& O8 y& V" B  l2 r/ H; j   ^' m& }* c% q" A1 `
4. 干扰环境下 Flash 数据丢失
2 N8 A3 A! z9 \* a; r
' i$ x3 D, U+ ]9 h$ l4 v5. 使用 CCM 导致以太网通信失败& y( u- j9 a3 |9 J7 x+ u
  j# D# E5 t3 Z
6. STM32F429使用外扩SDRAM运行程序的方法" @$ i9 \% g, H! K2 {

+ _9 _/ c: n) l! _6 E7. 使用STVP实现对STM32L1系列EEPROM预置数据( M6 D% \# P/ D4 P9 i

. ^8 T) e) _, q* m1 U  ^$ r5 B8. FreeRTOS RAM使用情况及优化方法
' R  k/ o7 i8 o. `7 Q
2 u% {! s* [* `  K& J& q9. 在IAR 6.5下如何将数据存放至flash中
0 L& y; S4 o% R3 q
& E+ Q% E, t; c8 O10. IAR下如何让程序在RAM中运行
+ v2 f  c* k; E9 I$ Y- X) X
# \6 G% ?8 k# Y8 |4 I8 ~% \  k11. RAM上电后初始值问题/ j" w- y, ^# }5 }4 v5 l; G

- i+ r! l% B9 }) e/ N  M) u" q12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
) G) u- y9 Q+ p+ b5 d' ?# X  s9 v6 t- h& D/ v% r
13. LwIP内存配置) \6 Z% J7 L% N# n
) z. A7 S' y& `$ Y" X& C6 [
14. STM32F2高低温死机问题6 y) X0 l, z9 x6 ]
  R) {, X7 X; s4 A: Q3 ~
15. 使用STM32F427的CCM RAM时遇到的问题
  o9 T1 y. a" ?$ n% N5 v; l/ L+ J
+ Q6 i% _2 x- B& g% V5 V6 ~1 K16. 利用QuadSPI外扩串行NOR Flash的实现  / b$ c/ S( G: |% _1 Z

- D9 c; u$ @; n' H17. STM32擦除内部FLASH时间过长导致IWDG复位     4 E. z( [6 i, O, E

1 r5 Z7 H3 w4 K- O3 U6 x+ |

8 T* Y2 N- U5 a( D( ~, t: z18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新): r8 w2 {) m. O/ k! M0 W' H' r2 W
' X+ \# H. Q0 _! [& {/ {! u9 H, G
五、模拟外设2 N7 ~; }  A4 v  {$ C- K% O3 ]) E

% U" _9 B/ q, v4 Q# ?1. ADC对小信号的转换结果为零: T" H1 z9 T: z3 d
5 i8 c# {$ F$ N& T, C
2. ADC键盘读不准: E0 s* b- X/ |4 E

! E5 u+ O3 A1 i/ z8 Y  i7 P- O3. 扫描模式下 ADC 发生通道间串扰  E" O/ Z, c1 q3 n/ K: p- d

* Y1 t# A5 a# l9 e: @" {7 Y8 o' [4. DAC无法输出0V的问题分析解决6 }' k6 M" k) Y! i
- Q7 x7 v! _  V% d0 `0 A
5. DAC无法输出满量程电压的分析解决5 d0 S) D: }+ }9 s3 U9 b5 s

6 w' f4 }- [9 g- i- T; [6. STM32F30x 的ADC 采样的傅立叶变换7 _3 F% V/ ^0 W3 P: ]
$ v' L) a5 C: p2 ^
7. STM32 F1系列 DAC的示例详解( X3 \. K4 X7 L8 l. b2 W0 ^

0 S$ B( I- Y6 Z0 p+ T) X$ @8. ADC 连续模式采样浮空引脚问题
# [( ~! ?4 M8 ^) _( u
1 D) e. v8 O( E8 j$ d9. PWM硬件间隔触发ADC & A; J+ [. ?0 |! j& I0 N
, j* l. g1 O! y
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
) G' I& X6 [1 `- n" }; U, i# {3 Q- R' D5 \9 J: v
11. STM32L4 系列中ADC 通道配置上的区别: `- l, F8 i! U8 e* V% E6 R' {

# `, [5 f5 I6 c. Z. P. D12. STM32 ADC模拟看门狗及其应用# u+ [% q3 q1 L' S% K
( [/ Y% K! ?/ b: ~. E6 v
13. STM32L053 comp2 比较电压无效问题   s) q; A  \5 j  h7 L5 ~' v, J4 I
. A/ Y. E( ~+ j5 h1 ^9 Z7 L/ X
14. 运算放大器OPAMP在STM32L4上的应用
$ O* ^& n* V# _
- n" W! G' J' c15. STM32 OTA例程之ESP8266使用
5 e1 `2 ~9 \0 \! b# O. z5 H1 V" y; f+ \- r" C7 u( g" w+ C& P2 X4 }% t
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)6 e0 s, [8 A4 g! ?: O4 q

" Y) T$ m9 {" d六、计数外设
) w3 P0 R' H5 c. Q
2 d1 }6 _) W8 C( D: _! I1. Watch Dog 失效# Z2 p2 j. V: }; @- U7 x7 N( X
. h+ c6 T+ D* ~2 H: q. D0 {: y
2. RTC计秒不均匀
3 R7 @' q8 y  r$ M) J  Z 2 F. X( `& T, D  e. u. K' A! _
3. 软件启动模式导致 IWatchDog 失效+ T; |5 m  w" i+ v
. t$ J2 \3 X, X6 l2 S
4. STM32F030R8 定时器移植问题8 W6 y, U, I6 \# T4 t
6 `: a4 P3 ?& p
5. STM32F0使用RTC Tamper的几个注意事项
  \7 V9 \8 K( L3 T/ k. M
% T. q2 |8 f9 a, \# [' [6. STM32L053可控PWM脉冲方法之DMA6 G0 y) G6 L& |" P4 d! i2 J* M5 B

# `1 `) x( c; B+ ]% \. h7. CounterMode,OCMode与OCPolarity关系; u! f# d. Q7 f9 j7 H
: \' y- Y* r5 O' V  J
8. STM32L053可控PWM脉冲方法之DMA! b7 i- Y9 D* l0 H+ K7 s9 W# b  i
9 o7 |1 u. P& o. K' |/ J% `
9. STM32F1通用定时器示例详解—TimeBase/ F( R; R& b( L/ D! G

& E7 j8 a! g( l! Q# ?10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals4 p& K$ T( U5 g& @
! J1 D. a  `9 m# @+ T8 U
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生% h! l/ Y2 _7 B% u0 p
7 o; p. c& k* `+ v6 H7 R
12. HRTIMER的多种Fault事件联动机制7 x  g# l, |% M+ B
3 W( I" O9 W) e/ i* c
13. STM32通用定时器 示例详解 —One Pulse
- i' r, K! f# ~" l- X5 m& |0 L, J! k1 q- e" {/ e
14. 如何用LSE校准STM32F4内部RC振荡器* A$ [+ z. f5 }& M8 ?/ L* [

5 @) D$ ~& k' J" R& w0 P) }15. 一种使用Timer测试HSI实际值的方法2 V' w; o- X" ^

4 J8 H, p- X8 _: F1 X' H16. FreeRTOS定时器精度研究5 N; g/ {) [- l& e

! E. ^5 W+ C, @% U, v17. HRTIMER产生多相相移信号6 Q3 V) F0 A: X' N  V7 J# p
! ]8 e, S. P0 t/ |& P; E" p8 b* x
18. 窗口看门狗启动时异常复位问题
6 F! @( p! {; H+ R% i
$ x& S5 j: z: b$ s: p7 O19. PWM硬件间隔触发ADC
* `2 a% w9 w/ ?2 P. J8 ]' T" o: ^# }0 H. b
20. STM32F030低温下RTC不工作2 q) ]- X; S) v8 W0 u! T/ ^6 P
: I- b" ?/ Z# W, E* @% D% z+ r
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   % q% X& O. w: y- T- K
: R. z+ }0 S4 O# V2 L
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
" R+ h7 ^9 t) N" s7 Z" L% I3 l6 e9 x9 J
23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
' `, b4 e4 e& y
+ L3 a+ k. o  f24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24); W% \6 c! m- Y* W- s  A1 L
7 _; ?9 K+ o1 a; ~6 M/ Y
25.MC SDK 5.x 中增加位置环 (2020.3.31)0 l/ s+ c/ M1 M" ]$ X! d

# Q: T) L6 k4 l! @# q8 i26.STM32高精度定时器PWM输出话题 (2020.4.29)
; A9 \/ j3 X2 t7 J& D: R: e3 z- X3 y% S' A2 C1 D
2 F  H/ R. G/ o! E
27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)- f* b& q6 V, W4 ?5 m' Y! B; ]; ^

3 w- U, J0 E8 }& h七、内核
8 q: h' Y0 T* x4 ?2 t; y+ ? $ v' T7 {- R) ?' [2 A8 V4 f" _
1. 使用指针函数产生Hard Faul8 _$ y- U( @6 t, r! w& h
% l; y) `% ^+ R* o( L1 Z
2. 调试器不能通过JTAG连接器件
+ n" |# @; i6 ?" `5 Y
" a) [  p9 h& `, `3. 鬼魅一样的Hard Fault
! T6 y$ O; ^$ F, P' T. X$ ?' w 8 p2 A9 V+ z: O) `, S3 W
4. 进入了已屏蔽的中断[
2 C% j7 U: b# t: H& ~
  \+ F% W3 g+ d/ [  Z5. 浮点 DSP 运算效率不高, ?2 N# e# G1 k1 y
/ p; `! f4 I0 j0 e
6. STM32上RTOS的中断管理
8 t. M" i8 M* g& K* O
% H4 t: P/ x8 d% c3 G; C0 n7. STM32F7与STM32F4的复位序列比较
' V2 l. P1 h  z0 E: L
, C" m, S% E: r3 N! ]3 _8. STM32F30x 的ADC 采样的傅立叶变换1 ~% W6 {5 ~' `! [$ Z& O+ a
7 |* I. R7 k4 a  Y# O  O/ h
9. EXTI重复配置两次导致误触发中断的问题
: q' B7 V: @: p" w, N4 ~1 E' M, n# V) c$ t6 Z) i' y
10. STM32F3xx/STM32F4xx使用浮点开方指令: M% I- w+ E. ?! B( z2 l1 k3 C5 X
8 F% z" c  L' _% L: d1 y3 h5 N5 L
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响1 a# i8 a: }$ W5 Y5 Y/ u4 [
( R5 l+ e$ v: `! Q& i, b4 @
12. STM32F7 MPU Cache浅析  
0 R" f' E4 b4 H0 T9 }& S- {
+ _: t' O/ N1 i) j13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新), g9 N6 S! j% {8 N- }
  }" a/ D) S4 g, i  a4 k7 G
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
3 V. K! g% t' ^" w8 D; h

, P  b" f$ s: Q2 X9 Z  x, y) H$ G4 V
八、系统外设
8 I% ]. k, \! o
& j, Z* _) C, @3 P6 }# o, V% P1. PCB 漏电引起 LSE 停振
+ @2 m2 Z( R; ^  j0 j0 L6 l
0 G: \# L3 Y( z- @2. 时钟失效后CPU还会正常运行
9 _, o3 g  t1 G8 ?! ~ 2 i7 t* ]) r: [; A5 F
3. STM32F2中DMA的FIFO模式
" O1 e# u4 }# i2 y
5 p4 ~5 m: V( L) D5 x2 R4. STM32L053的GPIO翻转速度的测试/ }) t( L  L; W, O
- ?6 m, t# w- h" r
5. STM32F4xx PCROP应用/ n% t# Z0 c  K  s! M3 R. @* t
$ N4 v% g6 Y0 p! h
6. STM32L053的GPIO翻转速度的测试
: O" \. M8 ~2 R7 i9 ~% [5 _! n$ d  L; P- C0 m( K
7. 如何在IAR中配置CRC参数8 n, j6 f1 m: K

+ d3 k& H& |3 w: q$ I4 O8. PCROP区域函数无法被调用的问题与解决( w- J1 }' {, J6 y3 C2 A
$ b( H1 W# }, _" a* ~3 {
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题
# g0 N, H& H/ S$ B$ z: A+ k, e) Q1 w
10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计# Q# M9 P- W* X$ D2 h! w; J
# U) y. d8 `% j( e7 L; Z+ C" z' t% m
11. 如何用LSE校准STM32F4内部RC振荡器& V3 P$ Y2 X/ u

( @- M6 P( G1 M  N+ {. t, k2 {12. EXTI重复配置两次导致误触发中断的问题  
. g7 W% Z0 R7 f. V: a& W; C  i
' e  v& `( A0 z$ @13. 时钟安全系统的应用(LES篇)  3 V/ ~% c  R8 D+ D& T
0 C$ N, X2 q. B. C" U
14. 利用DFSDM开发PDM麦克风应用介绍  
7 C4 w+ {+ F/ [, z, K0 y- o. E
; O& ^+ e8 j( I
15. STM32H7的FMC外设在DCACHE使能时运行不正常
! ]' k) N# e3 q1 h( @& M) M- i. ^
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)8 p. J. J& i; F4 d+ l

9 f+ J4 x; f1 }. j1 z: {
( e# K0 ?/ W6 m* M九、标签和收发器
; N9 s) d( z7 I2 v! v' t
- l9 ^9 n: }) ?1. CR95HF的初始化步骤
0 Z5 ~9 Z- W1 n% U! J) Z ! I* K! B, \1 q# f- H& W( ]8 B
) |* e( ]' ~$ H

% l$ Q0 s- N3 @( u- K十、生态系统
0 m; |  v4 j; E3 K, V) y( w ) _7 T& C/ T) |- a+ L
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题! {9 f, k2 c8 B6 y% F9 z# X
0 z7 H" N# e! @) \" B
2. MDK Logic Analyzer 功能在STM32中的实现问题: V+ V) {) @3 `+ c6 m* v' z' s2 d

4 y1 u9 j% e+ d& j3. 在IAR6.5下如何将数据存放至flast中0 U" F8 n$ G1 c% z4 S2 O
; _/ b! o* i) a. R6 }$ x; t
4. FatSL移植笔记
' Q$ s0 Y3 _& G- ]. P# ^ ; E& `! Z5 R' A0 t! s
5. Keil中使用STM32F4xx硬件浮点单元
3 ~, H; t. C% i7 @6 H% j/ H, l6 z ( T- n" y+ Q1 H2 `2 S
6. 如何生成库文件(MDK和IAR)
* I/ w+ y! K: s) M6 ` ! }3 r: I! n4 X! [* d/ I- P/ f
7. Nand Flash文件系统解决方案
2 z3 G( J1 u2 k . R. s1 T  P+ c# }
8. STVD在调试时弹出“Cannot access configuration database”的解决
% v  F- e" g' J# {% `* x
1 u9 U+ q! v- u, Y* r9. RTOS低功耗特性的设计原理和实现
5 E* p7 H9 x( L- F: z' g , |/ S) ]! t+ g' [, x) s
10. IAR下使用J-Trace进行指令跟踪$ D( M8 H5 U! N$ [! J- K, M
# ~; e- I" _$ I; @" B1 A) ]" A
11. STM32上RTOS的中断管理
& G- w- `& |6 s( j" a+ A5 k$ Z
' R# }) |6 L1 G- z( {5 |) Z. U- j12. IAR下如何让程序在RAM中运行- x! ~' O3 j4 {* `

) b" G4 K  L' U/ P, Y3 q' c13. 如何在IAR中配置CRC参数
& \) b+ E/ b; d, C5 T6 T2 D
. ^, d5 G7 N+ o1 a14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
& }. Y: G2 U& y
  _7 o/ _" v: G0 G5 B, S% b15. 使用mbed进行STM32开发及STM32F0的时钟问题
1 N9 ~3 V' U( }5 H: V, n/ q$ M. }
$ c' l' t$ b" o) }16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能: s! R: A" \$ M( [/ O
* ~) [: U" r0 x, E  v; d
17. 多任务系统中的不可重函数使用注意事项
# u" j' X: d1 I9 Z
$ C+ ^9 ^3 s- G* j18. STM32 utility的hot plug功能
8 e: x' K4 w- o; n# E: ]- ~: r" w/ m$ _7 G
19. 如何将CoreMark程序移植到STM32上* {3 Y7 F* T1 o+ o3 S
& W! v  E& S8 G2 T) b- x! ^
20. FreeRTOS定时器精度研究
- b2 W" Z* o2 w( w+ M: T  O: ?% J: P, G$ s
21. 如何使用Eclipse和GCC搭建STM32环境
* [2 d7 B6 K4 Z. C6 G& _' q( D$ Q! h. E- Y6 A
22. 如何建立一个基于GIT的STM32库7 U7 t' `/ I: d' Q& s% @# n

: x& v$ w' o8 ^. B( B23. 从零开始使用CubeMX创建以太网工程
8 G9 T2 L- U$ z9 o9 `! w
* U" Y( Z+ {7 S4 l, Y# m24.从STM32Cube库向标准外设库移植FatFs文件系统: g0 B5 i9 p2 P: T$ h5 O
9 W1 q5 l) n* H. S: e" L2 }
25. 基于 STemWin的屏幕旋转2 y* T% G# D+ l3 G/ ~

7 Y! ]2 s8 R. x: ?& q' W26. 编译软件 Hex文件烧写
4 E3 V( r2 E  x7 h! o
& l$ {: Y2 c) F$ s6 i7 |27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
" V2 E0 ]& Z- g1 W6 J7 l) y+ x) x; v3 I  U4 X
28. USB CDC类入门培训* h: S+ s( X' W
: q# Y/ d/ y& g' P
29. USB DFU培训 % s: L; t' [4 C! g' {" p

' n( D( N7 ?0 k* P( L/ j30. 用于量产烧录的拼接Bin文件操作
, Y+ T1 a+ E: V) q  ]  n4 t+ D& P
  c  h  R4 ]: v& C31. STM32免费开发环境该用谁
; u: l- _) Y( P- P9 k, W. H# b" i6 _/ T4 p& @0 `6 ]7 b
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新). z- g3 Z/ S3 C, o4 C( e4 a

/ E& L5 y/ u% {% `8 y+ B33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)
7 R( V$ X6 D; K5 k% \2 f3 C( a; X5 c$ |* F6 n  S
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  2 t7 [7 Y. B1 u3 H9 l! ?$ n
! E, _/ z; \% F' f) U
35. STM32 FOTA 例程之 cJSON使用   , y8 j* g; q4 }

, B7 o( S" [2 E! r$ n- V36. STM32F769DK 云端固件升级例程使用说明
8 d" b+ ?, p9 J0 F3 a5 ]$ ?7 J

5 }8 w0 T( u. Y1 q. X8 v4 G7 ^' M4 X) b37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用 0 d! t/ F5 M8 z- o
, [( Q* }& [$ ^# g+ P
38. 基于 STM32 的阿里云物联网平台方案 3 @! |3 V5 o' C+ c6 z

4 s; D$ R$ Z9 j4 ^8 H39.AliOS 任务上下文切换原理分析  5 }( @8 _0 r* q7 C% J8 R+ W
6 t; w; ~% y9 _! h& q, R  ~' b
40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
! _) ^) T  W: p9 H2 U5 y
, ^6 ?$ m$ }+ O# w0 Z7 G5 A3 Y41. STM32F769DK 云端固件升级例程软件开发文档  
7 D3 [/ K/ j8 x( h" y
/ H3 c& {* g7 |& Y: v: A$ n
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新); z! F6 a& G, x4 m8 c% A  J

; I+ l. O9 C, Z43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)# Z! j6 F$ {0 G( W2 G

- U% s) y7 }9 S! H44.零基础快速入手STM32MP1 (2019.9.19)
6 y) d8 r' p. x" R/ |! }$ n6 c2 t$ ^" _% }( x, @
45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)2 I$ |) K' P* @. a. Q: W
: g. A6 R- t' O+ Q& u- ?1 R
十一、调试( R% Q5 G& \3 x4 |- [
' M% D1 d1 s8 _
1. 关于STM8S SWIM Error[30006]的分析
$ \% V1 O( j' P# v3 ]5 f ' \9 z) [! Z8 e4 n+ d: A
2. STVD在调试时弹出“Cannot access configuration database”的解决/ A2 E  n2 f! Y4 j

: P1 T, l' P3 f' Z6 n; A6 I3. IAR下使用J-Trace进行指令跟踪
3 K5 K1 D. c  I7 \4 a 5 F% K6 i0 u) ^; U! ?+ I9 G
4. 菊花链 JTAG STM32* K* w4 \- w( r9 d- i

* u3 p; N" U5 y5. STM32F411CEUx 能下载程序但不能执行3 C! l, F( q7 j3 i8 X% Y8 ~

* D- y! a) {- s) q- J9 e* Z+ C3 ?3 U6. STM32F103C8T6 程序上电跑飞
( [7 r% ~! {* ~+ p6 O8 ?4 R7 {# O" n7 C. K9 S: \1 B
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行/ k7 g1 R1 T+ f  I

; @  K) N( x; z( P+ K3 o+ Y8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
7 l# J5 l+ m! h  }8 |3 |& N& m6 w' r, ]+ M2 Z
9. SWIM协议的GPIO口模拟+ l7 F; R% j& ^; `( b
6 t! G. i# O: v' _6 B% Q5 }; Q
10. STM32F091空片使用ST-LINK烧写后复位不能运行用& i5 o# Q5 ]3 B6 ?; y4 d1 G

- U( W$ _; ~; q7 S11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
5 D3 h5 B( u- ]0 d6 t7 x" U) y+ [. F* [2 D4 q$ Z5 s. j
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)
" z0 k% U! P8 e. s0 a% T4 h; t  a3 ~; ~7 w% d1 P
13. X_Cube_ClassB代码移植 (2019.12.24)
, O! R2 U' C1 I( g8 g0 D' E
4 z9 e$ F5 n7 B$ _% [6 a5 I" z& \, c3 k
$ I6 m, a7 R  k- H1 l
14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)# g4 z* c* a8 e( I4 l
/ Y5 o2 k: \: l: Y6 b5 a3 L- m
十二、人机调试
3 X+ y! j; O  E
+ F' t. q4 O/ K! ^1. 一步步使用STemWin在STM32上开发一个简单的应用3 y1 W% S  O; i8 }5 G% o, \+ E; V

2 A# T/ W: [, E5 d/ Z2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计8 W( o6 Y* L5 c

# v( R. f  d) H! s# f3. GUI方案中ALPHA通道处理介绍) ?& D$ G( n. T4 O% F* j5 s' f
; C7 R5 |3 Q( e) b
4. 基于FMC8080接口8位LCD的STemWin的移植. r0 h0 p4 B, _8 D
! A; S. h  ?+ d3 F
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)+ F; O" D" }' @7 @5 C6 R

, z) z  k' t" T# D: x6. TouchGFX快速创建滑动应用例程 (2019·9·12更新). g* U# t! {0 C( t  ]7 v/ ^- l
4 g/ b+ K) Q' H
7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)6 O# Q) n5 y3 g: @0 N, L

& e2 M0 f4 }7 A- \  V8、STM32L5中如何关闭trustzone (2020.5.12)
& S2 M! }* N+ U( F1 g3 A7 J' ?! ^& T( ?
十三、马达
2 N( \( ^( f. V8 k3 u9 A5 I# l) g& {/ J
1. 电机控制同步电角度测试说明& q) Y* U, [. b& a" N  \

5 S/ ?9 @( W, Y  `9 F4 J2 t* q2 e" \  k0 M- K' @- O  N9 P% E
" q9 s1 Z! W; ^2 W
十四、安全
$ L, S: R0 u/ m7 W6 x1 ?* F# z4 \- \
0 L, |& B9 p9 _, l& ~+ K
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
; V! m0 W% q( `2 Q1 o. w/ H
+ o: g9 Y5 T! z' [) k7 y! z# `
* n6 E$ B4 B' T# G0 h5 L十五、其他% |! q  [' V$ ^4 b' l5 V
+ _$ n1 \* T+ {4 c( {6 N
1. 跳不出的 while 循环
8 W2 Y. J" C) h9 R+ g. g6 h, G & @! |1 o# R# A! ^
2. 外部IC连接NRST导致MCU内部复位信号失效的问题
" h2 W* ?$ e/ R, `6 F
5 m  t; g' O6 X  o( L! S3. 潮湿环境下不工作
  D+ K3 ]$ y  {5 c2 l% b& p" E" Y5 O
, x# Z* j9 U( P2 e2 c4. PCB 漏电引起 LSE 停振
) _1 p+ _0 J/ N- H* |5 Q! i
; ^- \/ j$ ~1 W" Y6 d5. STM8L152 IDD电流测量
6 C+ U; ^5 Q+ h3 \2 f6 x) l
7 ~2 |3 t: U6 D/ z6. 使用STM32实现锂电池充电器4 ?5 l$ ?( h3 ?
2 q8 g; A. i+ w
7. STM32_STM8硬件平台基本检查5 |9 b. l. n5 f! r: Q, t

6 g3 L' d/ t) O5 w2 U3 U8. 验证STM32F401在STOP模式下的电流
; a: E! @3 Q7 m" S2 a, A. V8 H" U
9. P-NUCLEO-IHM001 电机开发板串口调试指南& G( ~& n, t% e7 |' P; t

; }3 O! Q* E* b) V% N10. 一种计算CPU使用率的方法及其实现原理
! c! j6 x- b8 ]( o2 }0 l4 }0 _9 n5 V' \/ t
11. STM32 RTC不更新原因分析1 A1 H- a; o2 ^% z9 V
" t/ Z5 V+ b. Q) k4 U, ]
12. 关于ST库函数的代码性能对比6 Y3 U- M2 u0 ~
5 k3 D/ g4 `$ Z* z/ G: h- b! \) I
13. 在IAR中实现通过将程序在SRAM中调试的方法
! N+ u5 X" k; w: ]5 O9 P1 P# T. d) Z; z
14. M95xxx EEPROM写保护配置/ g  H3 |8 o; s% _0 x/ a
; a& a. x0 T, r
15. 4SRxx的GPO的属性  I8 n' ], ~3 A" }! ]% C
4 r* z& h; f9 w4 R0 w6 [
16. CR95HF的初始化步骤
$ J7 |8 S+ D& m" _* O- p4 r* e: s+ l: F: i( N) p
17. 电机控制同步电角度测试说明  
, N" d- b" G1 k" }0 p9 [
) J- ~0 L8 l) T, F. ?18. STM32+BLE通过 Notification与 Android应用程序通信的例程
; _6 `4 i# N) \: A. n3 u; U' b2 b
; T% [7 r4 u, `9 b; ?3 E: g19. M95xxx EEPROM介绍
  n7 v6 R5 ]  Y- F- c: I1 r) Y
, E3 x7 v) s% b) S$ [, ]20. STM32 DFSDM测量温度应用
# o2 t0 i, ?. B, C* u. Y5 |7 P9 F/ ?7 f9 Q$ O- ~: R. c
21.代码实现PCROP清除3 i# J( p  P9 ^5 m
# w& o* p/ T5 M0 H8 g. U
22. 理解与应用MPU的特权与用户模式. k' w" |1 W) X, ]0 y! z! O
7 T7 y2 W  S, b: }
23. 用于电机控制单电阻采样PWM变形信号产生. A# [8 a# A1 Q& K0 F; M
7 C4 O) {" {" t. b  P5 a- ?5 W
24. STM32L低功耗模式唤醒时间测量
: T/ w( H% `3 E- Q* O0 J) _4 y3 k% ?# I0 l: W( M9 H% j; N& p
25. X_CUBE_SPN7程序电机启动抖动问题" R$ U& G9 q9 k2 e$ d' }; K+ Q

" I) _) T& Q. N, q7 b0 U26. 发现STM32防火墙的安全配置
1 G; W; n( Q7 h- v7 |5 R+ W, s8 R( H2 E' w
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
6 ]9 |* T0 ^" ~  P0 O7 |% f6 y4 z, F, O8 G& `2 i. Q' w
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)0 Y* u" R) q* Z1 ]$ H$ \
7 [0 k9 p$ f$ I3 |4 d" W
温馨提示:
+ u$ Z! t# S1 b  w
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
4 f+ L; p, a! V% I' F0 c; M' z
9 H% z* ^& j# a4 i! c) j0 h
! s0 V* P6 ?1 i" E
  ]0 u: _3 J. v5 f+ @
) m/ l+ K; P9 L1 E1 s# g# b. H) V

: l3 d! c/ F1 I4 w* k1 W
4 a! |+ \& t0 G+ _% H  t( W( x$ j0 B& G2 \2 j# J' X2 ]
9 w) K' W( v3 R) n

, B' b4 G( V% ?5 I
+ ], I& W* l" M+ J( v

评分

参与人数 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
好详细,多谢分享
, N. ?( b# L9 R" [
5768340 回答时间:2018-1-13 14:42:54
HI  
6 d! f  C$ p; v$ L   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:3 p' {! ^8 U/ |2 r6 h9 ^$ h
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************& y9 r- t: Z. c" [
  2. 函数名称:Cdfinger_Bspspi_init
    # g0 ]9 a8 L% m5 L5 J. E0 E
  3. 函数作用:spi初始化函数
    3 M/ j4 Q4 _% k" j: m6 m
  4. 备注:
    : W7 p8 O- k2 {3 S  Q" d
  5. ******************************************/) p4 D2 J- l2 m: V
  6. void Cdfinger_Bspspi_init(void)) o" v9 l3 b/ d* r: l4 _
  7. {
    % @: n; R  @. v
  8.         GPIO_InitTypeDef GPIO_InitStructure;& f  j9 T. k7 N2 U) o
  9.         SPI_InitTypeDef  SPI_InitStructure;' E' r2 ]& W- r8 u" c: y3 q
  10.         DMA_InitTypeDef  DMA_InitStructure;
    2 Z; @- ?# E! o9 X9 ^
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    ; U2 ^, t# Z6 X$ ]0 G& K) r, _
  12.   " `5 c) j9 e# ?& w9 O/ W, l
  13.         int ii =0;
    " Z1 l3 q6 G* n' t- N, l/ O
  14.         9 G6 X* [& r( M0 e+ q7 m1 L+ t3 H
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    3 K- l9 ^2 R; j. a9 {$ l; l
  16.         /*!< Enable SPI2 clocks */
    % P* S7 O; o1 }* D. Y4 A
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
    / x$ {& Z" |* m4 {9 a$ a
  18.         /*!< Enable GPIO clocks *// A. |* N2 i# W7 |& L
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);" p! E* j7 G9 F8 t: L
  20.         /*!< Connect SPI pins to AF5 */3 j6 F. |6 [0 T& ^* k7 r4 x
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);$ X3 W. f  s7 G; c, j% c
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);4 `) V7 B" v- n' @9 M' R
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);* c! x2 t% L, ]% x

  24. % }' x  S# ?/ l! n7 n
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    2 U5 |! n* e; Y" I8 l
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    : s" H( m  p. v# T8 R7 [( U. Q
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;* x3 f) W. g/ m- |( b3 f
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    $ \6 s% [" s$ ?6 E' d7 P# _
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;" W7 u# `/ v$ \2 u$ s
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    * e/ v. Z5 A  I5 [
  31. / J2 b. I( O: t4 t# f/ F
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;2 h8 K; P- N3 B& c
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;* @  ]' Y; B$ b8 x3 I, I
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;1 x4 y  M5 o# r& o& N2 O  o. G/ A
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;4 Z+ e, {2 E3 {& X
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    4 V) P! ~5 ~$ h) U( _9 ~
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);3 Y; K. s/ F' ?2 W; i7 @
  38.         Cdfinger_BspCs_HIGH();8 B4 p7 c) c1 i7 {) h) M) E. g6 M
  39.         //Cdfinger_Bspdelay_ms(1);9 h' |, x/ ]. O* [+ I! I
  40.   //Cdfinger_BspCs_LOW();$ a/ [0 O: G0 t" t
  41.         SPI_Cmd(SPI2,DISABLE);
    + r7 t3 M& j" T: y' A
  42.         SPI_DeInit(SPI2);
    1 N: B. |* h! S) |7 A. Z6 C: S
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;* `4 W/ y. Y. f
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;7 B2 g& X; P0 X0 d& a
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;* b6 W6 s# l; t7 ~7 t8 ]# V
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;, `+ L1 Q' K" o$ C; \/ w
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;* h3 P! U. `9 k, J( B. q
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;
    8 z. C* x- N8 b& e1 B
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;2 |" y1 {% C" v" n
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    ( s- w2 Z0 l& b" Y$ C* h& o$ H3 m
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    + i; x. M0 J1 p6 ]5 s
  52.         SPI_Init(SPI2, &SPI_InitStructure);
    " t# P( M$ ], L) d. b3 m8 o  _4 P

  53. 0 b" S4 r/ V* a6 W) g: S+ v; h
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);$ k9 Y1 s( R# t3 B3 a+ a+ \
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    6 t  A+ |6 m6 O, V. D
  56.         DMA_DeInit(DMA1_Stream4);
    + v( ]7 s$ d7 j/ n
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
      a5 L6 F3 U8 ?/ L5 ]% c' E
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    6 x+ j0 e% n! {1 l+ ^5 |
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    $ v2 h4 h. s) Y* P: F8 U
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;0 _# U6 i7 H1 z/ g
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;7 E$ u$ b( C, |$ B+ o' n( a( A
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;: l/ U1 `, u; x' }) _
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;. \8 ?4 I( Z! u5 i/ S7 E
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;# ]8 k9 J8 R* x  K3 d- H
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    ) Z- W5 ?1 H! y' A
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;+ o# {8 s. A- M* R- y9 l% s- x
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    ) v8 Y) b6 c. K: ]+ i# o% z5 o. G
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;* U. {. b3 I' v* k; N
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    . ]$ k) P% O1 K* p: @
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;8 Z) |! O1 a4 ^* e7 P
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    ( k  d$ Q- e, a( {+ n) [4 t, q% F0 I
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    , S0 p4 I9 c6 p3 [  W1 I$ T. d
  73.   0 J2 o. {  d) A1 X  |- e
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    , P$ q, D5 G$ H
  75.         DMA_DeInit(DMA1_Stream3);" t  m& {+ }" c6 Y8 E7 G- P
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;! E) z( y9 ^9 H. p. Z: b
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);4 ^/ K+ K( l; C4 w7 u4 \
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];* E) W9 v. A; V! q. C
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;) y* g. t1 p+ J, k) F6 H7 P
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    ( `* F. f/ u9 x( x% [
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
    5 T; _6 w8 P) n+ ^; Y1 W+ u) |
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;9 C) @* ^* y3 o# I4 q
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
      y/ n, C" Q& j
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;- R/ j2 N; i7 R- J9 ?8 i
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;6 i3 j5 j8 U3 k4 _% F/ \  {
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;9 e. w- b# Z, g3 s8 d& H
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    ; o5 v" z: r$ |6 M3 p
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;% N/ e- y& R- T% e# `
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    , @3 [+ {# S2 j& ?
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;4 }1 X3 g+ R1 M. I0 E7 y, s6 o
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);/ z3 Y' M. E  O+ w7 x2 B
  92.         //Cdfinger_BspCs_HIGH();
    / a8 x; J/ L, _
  93.        
    : [7 o+ L: I0 d4 X
  94. " A5 W  K) D9 K6 \( Y
  95. & }4 i7 f) |# d. y. p0 O
  96.         //发送中断
    4 D  E3 s: ?& `+ k( `
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);1 T4 o" e. e+ p6 v+ l
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     - U2 E7 B" @" c# R$ |/ c
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& y& W, W& l4 ]  m  |8 w
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;6 H) {- _. G) `+ B# H7 C
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;) [/ B1 [9 R+ e7 Z
  102.         NVIC_Init(&NVIC_InitStructure);
    + ]2 @5 q0 {/ q, W9 h1 `+ @
  103.         - l" s* l2 E; j5 W4 W- t. p
  104.         //接收中断
    8 A3 a/ V; ^4 q8 h: \( o
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);$ ]' W+ Y+ q/ J. P4 H! Y
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    7 h* k# j" O" [7 C4 z9 N
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    ) Y: H& I/ I$ g! T
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;3 p6 {0 @$ w& r
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;% K' D: A; T  K( d
  110.         NVIC_Init(&NVIC_InitStructure);% C" K! s; `5 j2 W
  111.         SPI_TIModeCmd(SPI2,ENABLE);. d7 o5 X/ n( F4 N! h, M3 C6 w& ?9 W( m
  112.         SPI_Cmd(SPI2, ENABLE);
    8 G  B5 Z3 F# y' V: r0 B8 f2 o. }# w
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    ! I. `0 m" S. E  D% a; j/ {
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);. u! s+ U& `4 K' x, n7 ]! d$ ?

  115. 1 V2 A# J% ]4 h7 L" M0 Z4 Y
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    * S. P1 g: Q9 [0 s& P
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);* [6 S8 j7 Z) _/ D
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    ; D, a" o8 C+ X0 [' C

  119. - t$ d+ p" d7 D7 ?
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)* `+ c3 t5 m9 \6 c5 C+ b9 x
  121.         {: T4 r+ N* w! @( ]
  122.           if(ii%8==0)
    ! m9 j4 ^+ p% ^8 V9 O4 F
  123.                 {4 ~0 w5 v. l4 {$ ~- R
  124.                                 printf("\r\n");
    + i' Z8 z) G0 m& j
  125.                 }
    : S" B' d2 J, e0 _% s: a
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    & E$ R3 o7 r8 h1 y9 ^
  127.         }
    0 Z* s; \+ o: C* U
  128.         printf("111\r\n");$ }. b! Q) `7 d$ Y' r
  129. }
    * {4 W! ?9 B- {) n. U, L# ?

  130. ) r% n- R7 ?& Q$ d- L) A( F
  131. . S" [$ H1 m: l# N
  132. void DMA1_Stream4_IRQHandler(void)+ `2 K  v+ G: L  K9 b8 ?
  133. {
    . m- e2 N8 K: K4 x0 \* E1 Z
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)! g+ y0 u$ H' c, u6 O
  135.   {, k( w1 p" z- P+ s/ Q# v
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));6 `- ^7 Y$ z) _3 x% L4 j
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);% T, O! N: s1 ^/ D7 w0 W- h, i
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);5 {" ?2 R8 Z6 e# A2 a2 b
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);8 a0 \+ |/ A! a) P
  140.   }) p$ l- q* E4 U4 R- G$ X- n
  141. }8 R* K% @, F* E2 t6 Z8 k: M' p
  142. 0 ]& d. N) d7 W6 a2 Z# w
  143. void DMA1_Stream3_IRQHandler(void)
    2 A: B. L% I2 K! e7 A8 f
  144. {
    8 F% r3 ?/ O& h: L% V; h
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    / ~- r& D0 }7 d+ j$ x8 S: j
  146.   {0 v6 _$ b9 o4 ~+ Q' p; q7 O# n
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));+ A4 m9 F0 B5 _4 C
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    ) a& O8 Z  x) _+ P' Y
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);" I1 X3 O' B. G- x8 I# a; M
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);+ o! c2 r# ^9 A
  151.   }
    % `% k9 d2 E) J4 E1 x: V# f
  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的波特率是不是必须为相同的,才能正确通信
( z: A0 |  y4 a4 o1 |! z以下是全部代码:
% R# l4 ]7 k* Y( h3 @. G#include&quot;stm32F4xx.h&quot;$ K/ \- I9 ^% K& v% h; [
void RCC_Configuration(void);
( m8 `& H8 g; `: m" \void GPIO_Configuration(void);- C, d" v3 [2 f( h
void SPI_Configuration(void);; r3 B1 J; K/ q
void Delay(int nCount);
2 w/ ]) h9 B' ?; w- H& ^5 V' O/ Kint main(void)/ g/ m$ ]: Y: }5 j2 F
{  RCC_Configuration();
7 t6 j3 x  }0 k; a9 S) k; N4 s! D  GPIO_Configuration();
) |" h4 c# \- R, C, _3 x; E  SPI_Configuration();
- r3 ]. ]" C  Q) N while(1)5 a+ C/ ^& E8 k' s6 T1 u5 O. m
 { int data=0;& D- [/ W. |5 Y& r% d
  SPI_SendData(SPI1,0x55);
6 G9 F$ F; T+ L" L" a8 L. K- N  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 6 q  X  ^. ?$ F
  data=SPI_ReceiveData(SPI2);" z0 g2 A2 j# i$ T* R
  if(data==0x55)
8 q7 M# A' d7 T+ l: P6 @     {  while(1)" q( H* F& D5 t$ h4 b
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
" d1 J0 U. A3 L5 {3 m4 {                Delay(0xfffff);
% L) y; G3 j3 X$ J. t                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
; o$ n! I7 d4 N, |                Delay(0xfffff);& ^6 m8 @/ s& q4 y/ U- Y. b  T* |
   * z5 T, @. D4 i
             };
+ C( W! W' b! e! ?  g# E% G     }
  n# t  Q! t: g* O; f; f     else while(1)
" q2 [1 O9 F  r/ y! y( D            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
' Y' X! N7 w( m$ Z  L, E1 y               //Delay(0xfffff);0 ?2 J) O8 I4 `4 t! t  P8 d3 A- U
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);( g5 a0 x5 U: Z5 ~
               //Delay(0xfffff);# z/ H/ P1 i# r2 X: t: |1 V
   4 l$ Z- F# o7 G) s/ L
            };0 d: }( G1 `( p# X. h
 }. Q' ~( i6 h0 b: G: U6 t$ t
}8 E3 {* s  L# E' J
void RCC_Configuration()8 a9 F: c7 j1 E) \0 t
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);3 _+ P0 o( S( z  g% r. j
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);5 q& w9 B: j: U2 g
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   $ W1 A9 r5 P1 H
}* [$ Z& l4 M* M% s3 x0 V/ |/ n
void GPIO_Configuration()7 }: B* F* e5 [/ x3 I& q8 R& v
{  GPIO_InitTypeDef GPIO_InitStructure;% ]5 z; F$ |8 n. _5 _5 }# l
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
7 G5 x9 J8 ?4 Z( p7 B. V  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
, l* A' ^" M3 ]! `+ c! T/ d6 W& A  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
9 a3 Z# t  A* F  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;; o. s5 o- {+ H
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;. ^5 ?1 g7 z1 F% ?7 _
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
& O% R1 w3 W7 s+ B4 I# A  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
# K! L% d+ B5 e$ X1 v  g  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;) ^) p+ {0 J: q3 i5 d
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;7 l; j- W9 Y+ C4 e5 x, t$ \; `
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
8 E9 e5 T. U6 N" _1 E  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;4 u7 s  z7 m+ G/ i# B# Y, ]
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
" g$ A, i5 q- N# L# u2 p  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;6 ^) ?5 [/ a$ K/ j, L! C# z
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);# _$ ?2 Q; @/ r' c: o9 w( V; ?  G' ]
}# d; F5 ]+ D/ r, ]
void SPI_Configuration()
8 V' F) @% O) o- s" p5 q. ?" |- }{  SPI_InitTypeDef SPI_InitStructure;
" Y& J& W2 f" ?9 p' m0 r  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
4 K. g2 U) u; v; D  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);; B" T5 {# V7 R. k
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
5 s+ ]# b9 I; T2 i   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
7 D3 C1 x% w" x0 S( p: k  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);1 u1 q( d" k6 D0 p) n1 ?
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);) r( K2 @9 G+ @; s8 s
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
' y* ^) ]# Q- R; G# u  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;: ~8 K1 p& t' `) U/ P# O
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;) v- R$ o( A. S$ l2 x
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
2 E* a5 r9 M* E$ {2 T6 g9 _  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
' k7 v" [/ D9 u) G1 h8 t- R  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;0 Y7 r7 F+ T4 a0 V& ]+ w
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
6 v9 G( v  Q: C   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
4 ?) D  q! [) [! d9 U- C  SPI_Init(SPI1, &amp;SPI_InitStructure);
- I: D# `& `7 b( u2 J  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
" O  J8 f' i4 H# @9 u9 j" `   SPI_Init(SPI2, &amp;SPI_InitStructure);
$ R4 }# |. G: U8 b, c0 D! b2 Q   SPI_Cmd(SPI1,ENABLE);
: q* t+ p# _! ~# K  S   SPI_Cmd(SPI2,ENABLE); 
5 j. z" u2 p0 P& N: f6 t( H: x' N}
2 J& |. L6 F) m' ]0 kvoid Delay(int nCount)0 Y6 u4 g0 a$ u) S( _1 Q
{ int c1=nCount;( @. U* _) N  @) Y; @- w, _; r
 int c2=nCount;( S8 m( y7 r4 n9 F
 for(;c1&gt;0;c1--)
3 ]$ z% S9 w* V4 y* P3 ~8 S  {9 F# B8 O  L! n. J2 Q! I# v  C
  for(;c2&gt;0;c2--);
4 o: y# k+ O8 E& s: N- J- C };
% n: ?) ^+ O6 a8 |/ l* Y}  L# D3 R+ c/ \
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:
3 n! j. R1 |1 y0 j楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信/ ?/ Z$ d) `$ L2 j7 C
以下是全部代码:
% R. }, R# V& A6 J# c#include&quot;stm32F4xx.h&quot;/ \7 R7 P$ K/ Z, o
void RCC_Configuration(void);* ^0 p5 n/ e+ A# n, n8 ^0 G
void GPIO_Configuration(void);
/ E6 d; t3 R1 [, G/ nvoid SPI_Configuration(void);
& X9 }) @# h& k. K+ Rvoid Delay(int nCount);& L% J6 {! L* d, {; {  G
int main(void)2 V/ ^2 v7 V7 X# g0 i0 ~
{  RCC_Configuration();
; ?+ k3 s7 t$ ]( n  GPIO_Configuration();, E5 A% Y4 \% Y2 _6 G
  SPI_Configuration();) ^: g0 I8 h' `4 W, W# G
 while(1)6 |( B( t7 Z$ j0 Q9 J7 s' T
 { int data=0;0 `) W5 p1 t& T( I
  SPI_SendData(SPI1,0x55);
7 @" ?) O$ _% a/ Z1 W4 B) S  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
+ p8 g  {5 X9 H( M  data=SPI_ReceiveData(SPI2);$ U" a; V9 B+ p% y8 |' x8 D
  if(data==0x55)( m& }5 X" `2 e! P- [+ k- O- {0 E5 e
     {  while(1)
5 q; d) K! C( h8 n             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
" J6 s. J! c7 W2 v4 b                Delay(0xfffff);/ B8 W6 u3 u6 U5 R$ j& `) v
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);, b4 T6 M, l. P  t. ~+ c
                Delay(0xfffff);7 n/ ]! T: K4 s6 M8 m
   : @8 j: M4 K; f6 d. _( F
             };
* d- V% u3 l2 _4 [0 R3 r     }
2 j: K7 `9 ?! p5 A: P     else while(1)
5 t( }9 a) ^1 e; Z1 I; o  ^            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
! d( l1 p% N3 Y- Q               //Delay(0xfffff);
1 E# Y$ D$ e- e& }* F0 h( S( V- L; d. p               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
- l5 x2 e2 V( \4 P4 ^               //Delay(0xfffff);
7 O1 U- a% i7 F& c  
* ?8 t2 z) m/ E. O! X2 O# f            };
5 B1 y8 N( ]# u6 r/ ~  F) O+ x. G }' _2 A- O( l; u! k1 b
}' J" s5 D( c/ z) [  f" ^' W0 J
void RCC_Configuration()7 b7 K" `* b  ?" A, `1 n5 g
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);9 ]9 \5 e4 C. A+ x/ a, U
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
# J' p* o  Z+ z: m  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   6 \( T- s9 [% L6 V
}
, U% M: j+ R2 O! Z5 [% xvoid GPIO_Configuration(): X4 e) Z9 O( h
{  GPIO_InitTypeDef GPIO_InitStructure;% z1 t% t8 G9 o( `% E
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
* W5 h. H6 Q* M5 {3 z2 P  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;& r. Q7 _3 j0 M1 X
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
! f* K9 G+ ]& j  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;; F9 k8 O* \7 P2 `( M* o
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;2 U9 L9 T5 `& h: [' B
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
% ~2 t/ V$ ]2 n9 y& P  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
: e  @3 g& b9 G0 F. P; ?2 k  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
' Q) B, V# F1 h  J7 Y  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;! m- s- s. N' I" r* k
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;$ X  C& v% r9 Z' T3 Q$ A! T
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;: c9 W3 b" L1 r1 J, V! f3 f
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
1 ?+ M  v$ N: G1 k  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;5 C0 H4 _; H0 ]4 x' t
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
  ^6 Q4 F: o2 A& ~4 L/ M( e}
/ P, n( [7 A: l+ V' ?void SPI_Configuration()
, u! d" J3 @: u6 {: H0 P$ ^' ~{  SPI_InitTypeDef SPI_InitStructure;
6 t- _+ |/ q! y5 i  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
9 Q2 p9 ^+ L5 [! K  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
0 r3 Z+ k8 _, e3 X  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);0 @* l9 q' c! `3 W1 C
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);3 R  r* Y3 g& ~0 z7 K
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
. N9 c( L' ]- |) P  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
! z8 j% H3 C. |5 @  w  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;5 s) U0 z# ]% B
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
/ g$ I; W" L# u* L! U( {7 m  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;$ \" K  C, p3 C) b$ D- G
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;3 x; q% Q& Y: d; b
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;' N: v4 z, H* @1 P% {! Y
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
: E/ e2 G3 z  p9 H- V( `' z   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;, L& M- h6 e1 {; w( Q3 V# S
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
) n, \$ |% F- f: `& X  SPI_Init(SPI1, &amp;SPI_InitStructure);# ~& z. h: G% x
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;: N8 }! h- a, Y0 U% c" c, m& i
   SPI_Init(SPI2, &amp;SPI_InitStructure);) m" G( c! m5 Z2 y# q
   SPI_Cmd(SPI1,ENABLE);2 [0 h1 O. N# Y9 Z; p& w; c& L
   SPI_Cmd(SPI2,ENABLE); 
% v! P' h6 J/ E1 S" h}& x" _, s8 K" m
void Delay(int nCount)* G$ i1 R$ u" C8 O
{ int c1=nCount;
+ S9 O( ~' W( v int c2=nCount;
4 \( p. a& N9 f# _0 X& ]2 k4 _ for(;c1&gt;0;c1--)3 t: ?+ `) G8 A$ @0 _3 H
  {+ y* `8 J, E: k6 Z1 l6 |
  for(;c2&gt;0;c2--);
5 f% ]3 C7 D1 T3 y1 {& t };2 ^* e, W  N+ Q0 W& S: c3 P
}- l4 o9 n# F) p$ e
先谢谢了~~
- H9 E) E0 B0 `: E1 y# N ( U' y4 M# a3 X. ]! J$ \+ q

8 ^: ]% I1 B7 H* z楼上的问题,看我帖子给出的提示哦~
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发表:
' P9 S$ k, B! i3 {6 W. J7 f! a 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。( I" \. E; o& U1 q. [. K' F
 
0 A3 |. I/ t& p& o+ C0 I3 d, h
4 k( A. K5 `2 N! b& @! Y多谢支持!!
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 运算效率不高

  ( n% O9 v$ A; O" ]
鬼魅一样的Hard Fault% ^" l/ g- e6 W! G
 
) B0 L7 r/ J9 {. a) _6 k6 F该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
1 [. J2 h2 m/ B, _( J1 U9 j( U 0 X! u" ?% {  }. w
咋解决?
chunlei233 回答时间:2014-5-7 19:50:50

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

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

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

DSP是MCU的短板啊

所属标签

相似分享

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