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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表1 }: Y: o% o, _: V5 x5 J8 \

5 l. p; T$ [0 }2 p" h
9 x7 Y+ ^1 w' \, T" q. m社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
7 Q1 X. H# i8 ^0 f" I
) |7 C  ~# D- q9 L. P( s  ?5 D" A& |提示:点击各主题,进入帖子,可下载ST工程师解答详请
8 F0 V& h8 F  ^4 W( \  ?
: N# K3 N* Z# L8 e0 ~  C. Q2 Z' l* I$ g) p
一、通信接口
9 v. j) b: R" {, l! z: E* t 7 H1 O/ ]( {8 u1 c3 ~* y
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新& h0 s3 p) o" l, f6 E4 g% B5 }
& M' e8 y1 d3 a3 i6 C4 L$ j+ X6 x3 S
2. SPI 接口发片选信号导致死机. t7 z3 f+ ~. F. _
2 `& Y6 I3 }; d+ s3 }/ l
3. USART1不能设定600BPS的波特率1 p! B) b3 S. n8 w6 E7 m% m

' m2 Z5 m+ |. l# C3 n4. I2C 接口进入 Busy 状态不能退出
( z; {: ?- J7 B/ Q  b# h6 T% a
: E- S8 \1 `6 e6 L6 l5. 对 Flash操作导致 USARTU接收丢数据
5 `& i( J$ ^+ ~  \$ G' p! l" U" w 9 p  p+ ?) ~9 Y1 c' e! B
6. USB接口易损坏+ o9 {$ R8 I4 P2 {

7 \8 Q. S" F0 m6 S7. UART发送数据丢失最后一个字节
- [7 F; {2 T( }* v % E9 O  ~+ z; y  Q8 W, U
8. 使用 CCM 导致以太网通信失败
. {" H8 f6 h4 o6 G1 }& o
: n. B- U$ a, l) C5 g7 n- E4 ~1 D3 L9. SPI3 接口没有信号送出
& j5 F9 e3 \: r+ b! G 1 [- D8 }- `4 I
10. 时钟延展导致 I2C 通信不可靠3 l! s; o9 Y: `$ p+ K

2 ~, ]4 y' @9 F& e$ w, v+ c/ Q11. M0的USART波特率自动识别问题6 t2 D# B- d( g2 e
3 A5 a! B- P+ {4 |' Q
12. WK15 OTG做U盘主机兼容性提高5 \$ k* h$ L' D
+ @+ n4 D( o; j" c7 r
13. 以太网电路设计注意事项4 \/ E5 ]9 H4 x; A/ {. X; o
! o: V& R5 ~6 y4 V* S4 I7 j+ }
14. OUG主机库在BULK传输上对NAK的处理7 w1 O/ q$ K! {6 i: _

; w/ A8 O0 F" o# H15. 串口断帧检测. w+ |; G! H# D! ^4 b/ d5 Z
3 H, L' w2 q: K
16. VCP例程用于数据传输时丢失数据的处理
" _- X7 R# S$ ~+ W8 C0 T# n' R ) Y# w, \3 t8 l1 [* ?8 z
17. STM8L051F3P6串口UART数据起始位判断的问题
9 j" k/ w: y& ?+ A" ^2 d/ U) n2 G 5 }+ V1 U) k) p/ @) f5 c
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号6 \& a/ [) ~$ x! }

3 g, @/ G$ n1 ^' m19. STM8中UART奇偶校验的使用方法
& r! R( T5 w6 y% s4 b' m, B ' w& P  v9 x& R) y
20. STM32以太网硬件设计——PHY
( b1 r9 |6 _1 t7 w! ]+ a  ]4 t8 p  w6 R$ F: z
21. 一个判断I2C总线通信异常原因的方法7 K& D* ~- L: p$ f8 V& R7 n

# X  A8 f+ Y+ |$ V  O2 |5 b3 [9 O22. USB device库使用说明
$ |0 B7 g. I! a; ?( _- q5 t( s# U5 |5 w( X0 O6 X* b9 `2 f3 x! W
23. STM32F103上USB的端点资源
3 n. R0 |$ H4 b  n! w
* _5 N  N  P' \& r24. 使用CubeMX生成TCPEchoServer程序  n! ~6 k# N* b# M  }
# a& K+ |0 z6 t3 f
25. SPI接收数据移位
$ h) H" r! k1 q4 o) S
( L& g% k) A3 P! Q/ N2 t( }26. STM32F0中Guard Time的设置9 k; }5 a# B9 W

# _: V0 _/ V8 Z/ B" x- l) _/ h27. LwIP内存配置
! y8 A4 u* o- G) y1 u: C' W# R
  {  B: ^. R- X% o28. STM32 USB Device的简易验证方法
5 K; _* S9 `" l, g$ e$ i. k1 Q3 H) U5 b4 A  y! ?  A
29. USART 中断方式接收无响应问题的一种情况及其处理方法
( a. f$ [' P) x+ f' `+ E! u
, m$ |  ~$ ]4 B9 w30. STM32 基于 Nucleo板 CAN总线的建立
9 w& b- Q0 M& B) H% `- f; E6 {# o* M& J8 h6 j& p: x
31. STM8 CAN总线的IdMask模式的讲解6 B: ?% B; ?0 t- D; H' X5 ^: {
: P5 H$ ^& ^5 l3 G6 g1 n
32. STM32F746ZG USB 驱动不正常 1 R  S1 g2 H( _, x* W: L: @
0 N5 v" X! w  ~$ \. \" f
33. MCU在STOP状态下通过UART唤醒分析
/ q- K% M" B& `+ c2 E0 z; U8 i$ y7 W8 z
34. 通过STM32CubeMX生成HID双向通讯工程
- h5 h" t1 B3 k3 _- L
. C, i# y4 I8 c% Y; L/ Q35. 串口工作在DMA模式下有时接收异常 + A. i5 @/ e# x* R* j6 f% ^2 J6 q

% S2 w+ K! S5 ?$ Q, F/ \1 O36. STM32 Bootloader中 DFU使用限制
* t+ j* l2 [% C8 c( M" Z0 {! z. R, Q4 `1 q
37. UART异常错误分析, S+ g: y- z! _- P! b

  q! Q+ g. h% ~9 k38. 基于Cube库无法检测CAN2的接收中断 + Y5 C2 @( B' k

5 Y3 U4 a2 V% [8 R, Q0 M39. 基于STM32F7的网络时间同步客户端实现 : F; G/ I  F2 ~6 w+ n9 d' d; n

( \% y: B, G; M! l40. HID与音频冲突问题
* w, _. u' S7 j$ {3 A+ C) o9 [
/ e3 }2 q7 U6 C: g; N41. 在进行USB CDC类开发时,无法发送64整数倍的数据
& P" U5 q" c9 I8 R; `
9 G: N: T* U& k$ g! h42. 从零开始使用CubeMX创建以太网工程
4 f7 J( e1 r3 s( I
4 y) s0 L4 j- X( t/ d* n, q  {- U43. STM32F4xxx的I2C总线挂起异常处理4 ^) v! Q5 b+ o6 h/ Y
. c8 }, j5 G4 \0 |- a
44. LPUART唤醒STOP MODE下的MCU( S. [8 X3 T7 Z8 q9 x& y" O
% C6 @. s2 S( G' w$ t! j
45. STM32系列 MCU模拟双盘符 U盘的应用! `# u( q! T* o8 ^! m! i

" J4 q! p% f9 {9 G/ _2 `3 F46. CEC输出的数据和数据长度始终不匹配9 r3 \9 |9 R( E! U

/ H2 |5 _. T3 p7 q( d' n3 c7 e47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析/ V, r( R( L; a4 k* d7 I- d9 U
! C( C4 j6 l* z1 `4 ]8 v& n/ Q
48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
$ D# K8 s5 Q( b" ^: x4 E( R* [' n  O
49. 增加UART接口应用时的异常分析- l( {# W6 `: }/ L

! l) T" F- i$ }0 R4 B* `. o50.UART应用异常案例分析
+ ?- s1 ~5 \6 J( h# q, Z7 k; `8 j$ t! D0 }. M4 Q
51. I2C配置顺序引发的异常案例+ F* v, R( v5 \, L- F5 q! {

' y" x* V$ f+ |9 U7 p52. STM32 USBD VBUS GPIO
: X$ w7 ?  x2 r! Z' H
6 z. z% Z: {( K2 Z53. USB传输数据时出现卡顿现象$ c  B* l  j! H  |! x6 ~0 ]
6 `) z0 c  F% L6 G6 V
54. STM32的高速USB信号质量测试实现6 v9 W! P$ H  s3 u! |
' k5 j& G/ M, q; U( y) A; y4 ?. U6 o* ^
55. 基于STM32 I2S的音频应用开发介绍% K' ^! t8 v8 i5 Y9 n
  u3 l8 C7 }* Z# |6 Z7 B. C! W
56. HID_CDC复合设备在WIN10的识别问题  ' T* O8 z; X6 M6 [6 D
9 }) D2 B, u0 o" r4 E2 o3 x
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  " r! b- J: b  {" f$ d% s6 P
) v8 g. W' e: |, Y' y
58. 一个关于LPUART输出异常的问题分享  3 A7 h6 d) J2 i& {$ u- w
+ t% ^- Z- p$ d
59.通过 DfuSe 工具控制程序跳进 DFU 模式
. K' a+ |5 e$ _5 f
: Y+ o5 j  d7 G2 w8 j# \
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)/ R& t) `6 Q- V' N5 Y7 G; U

: f- }5 E" P- a0 b61.一个因初始化顺序而导致异常的话题 (2019.12.24)
8 V+ m$ Z  ~4 `4 T" a" z7 J
' h  `/ q# {0 W$ W- X
62.MC SDK 5.x 中增加位置环 (2020.5.29)6 U$ y9 g+ o; Z! j9 F
8 c0 G# B/ [* J1 T3 m
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
. S( l4 y& Y: m+ M/ r. J
( O; S; x8 [  z  O4 i9 C64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
4 p9 {' F- z! b/ s
5 p4 k0 F# O( j2 o' ~二、电源与复位
, s& V% G# s" F2 D0 c
( J' P) \  U& h1. Vbat管脚上的怪现象/ y; t: O+ b: ], \* G
& T# K. ]) r1 q' g: y2 p- M, Y% R
2. 上电缓慢导致复位不良4 s  O5 s5 H" ~, I8 I+ X

' F3 m+ Q; R# c0 A4 t" `0 F6 P$ X7 U3. 关闭电源还在运行1 m) c0 D  ?; w1 i0 F: J
3 |5 v7 z( t, W, W& d6 f9 n
4. 使用STM32 实现锂电充电器
4 h. ^" Y: ^6 |% v, `
6 b  p$ u( v' ?$ ~' `' J5. STM8L152 IDD电流测量
3 {# I8 ]7 @$ ?( ]
" t9 F, f) ]+ L9 S9 s. _4 C/ R) \& F6. STM8连续复位问题; c3 l( z1 o( x! a

/ e7 D  y( ?9 O. \- O7. STM32F2电压调节器REGOFF与IRROFF引脚的使用9 o2 a3 \& z# ~; f4 O
1 Y$ M7 y) x3 E& J8 L
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
; K  e, \; \& J. R% y- g% t% p# V; C5 D5 U
9. STM32F7与STM32F4的复位序列比较
- Y. W  |0 U3 e% ~; L1 o8 M: t0 I: N7 V4 @9 y2 o# w3 u( D
10. STM32F107 复位标志问题 5 e5 X5 [2 Z3 U4 U0 F: t7 n

. d9 v5 {$ M+ t! g8 T. Q7 i/ O- H: N11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
( r- R4 f: g4 Q/ p+ v, G# N, T: ^$ a* _- J+ q5 G+ A
12. Nucleo_L053不上电也能运行
4 J% h6 R& d5 Q2 Z. Q, w2 d# _0 b5 Q' o' m( d8 n# @
13. STM32L4中STOP2模式下的漏电流
# n6 G: h6 @$ J! b, F
# t8 B6 ?" x5 |+ R) Y14. 在没有外置晶振时HSE_RDY异常置位$ Y1 d5 x& C0 \2 G7 @0 L0 Q

% R2 d( }1 c( |/ ?' t15. FLASH被异常改写   (2018.5更新); b! c7 L7 P9 G

1 ]. H' Y" ~9 k& p16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)
3 M. P  T) X$ i9 C
2 t8 E% O% a5 P9 `# s17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
: L9 Z" X# o* v0 p  W0 T: H6 q( v" U9 _! H2 L! l9 X; r
三、IAP和Bootloader
( S! z8 H9 P7 d6 d* S / T0 g# i# M  b( L
1. Boot Loader与上位机通信不稳定4 [/ i$ V5 G1 J- \5 a

5 y+ ~* t: j2 `& e" M9 K  N3 q2. IAP+APP 模式下不能启动 RTOS+ u1 ~& [, e. S( h" a0 A# _
8 K% b. }( y' d! F& `( H! r
3. 从 IAP Loader 向 App 跳转不可靠: D+ V# B# h+ p8 h+ V+ O) o7 T
3 p( F/ P6 x& V* x
4. STM32 MCU IAP例程跳转到APP代码简要分析
% p! V8 i& A3 \% V7 a0 I! Y- u( u+ \3 ~# Z/ m9 u2 L
5. STM32F091从自举程序向应用程序跳转的问题与解决
, W( b* v5 V7 }% ^2 ]' `1 q! b( X
7 h# p# u6 l- i$ g8 O- g  n& z7 h+ ^6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
9 E/ k0 R" k* g7 X# u# L; M" Q
; o9 F, L) _7 C1 [3 K# ^7. STM32F0启动模式相关问题探讨9 V) [& i' [, L! ^9 w6 {3 l2 z

9 _2 Z1 t2 ~- W( O2 m7 g6 W5 Y8.STM32F091空片使用System Bootloader下载代码
: T+ J  k2 a; P" m+ ^5 }% K* D. e# N: A, `7 t- t2 u. B
9.STM8L  IAP 应用程序中编程指导7 Z* _' h2 f8 U  C
' z! q9 |& v, `0 ?- i* f9 ]
10. 如何通过STM32的串口实现简易脱机编程器7 Y' p6 H- m* a* z

/ Z' L# j. U4 R4 F/ ~4 n11. 一种从用户代码调用系统存储器中Bootloader 的方法  * F; e* a0 ?& k4 R- {* G4 u. x
/ N) X9 Q" C0 j$ s! v, U: Q* @
12. 利用 USB DFU实现 IAP功能
; x; ]' G, a+ i" O
2 j5 h! K1 E6 q; \% d13. STM32 Bootloader中 DFU使用限制- S+ K; `8 r  \" v7 W0 ?6 [
, ]8 S  @3 v3 s$ j$ j
14. STM32L011x和STM32L021x启动模式注意事项
; J& L) c4 W. {! d
2 l$ W" {2 H2 G7 n. ?15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
! U; d4 z$ s/ [* @, t" _5 v: z9 o/ K# a- w9 G! j, J4 l
16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级
, Q9 H7 B; R$ R! N/ _+ X
4 ^# L5 H( y7 z# a7 \17. 如何使用STM32NUCLEO 板来测试串口Bootloader+ c0 b3 g; o& {% b# K

8 G3 W# C. o% ~1 e6 _8 G( Z6 H18. 在STM32L011上通过I2C接口实现IAP5 @; u8 v# [5 n; O' U7 Q

% l" w/ X- o; I( G# ^8 }# K" s) ?6 J19. 在IAR中实现通过将程序在SRAM中调试的方法
- u3 D5 a2 u# [' U/ U! _7 d/ z
) `, k. ~& G: U20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题. r! }9 G- k$ j5 p7 }

3 Y5 P! G+ ]/ A, R+ d( N+ Q$ q1 t21. USB DFU IAP 例程移植的两个话题
' ]5 {; }. E( q3 r
* c* |6 `4 l2 X. O( y7 |1 J* q) \* @22. STM32F769双bank启动8 q: q9 O: ~2 H& q: X
& y8 _3 }7 `7 k# B5 n4 Y
23. DFU加载 工具 DfuSeCommand的使用
* I6 M; ]' G" {+ E5 C7 y  K  s  V- f# s
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
- W4 v+ Y. k/ A2 H2 v
4 O. A1 o: D7 x0 m$ ]25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新): I) y2 I, _3 @( l, S& z

+ \7 g9 t  R% L& J/ ]7 ~0 J0 Z3 h26.STM32 Bootloader异常复位案例(2019.4)) `% ~$ T% @/ m

3 `2 p: k, [, `; Y# C% b' d
四、存储器% w  D% H  @5 F

) g5 @$ _( j1 s/ H! W- y1. 对 Flash操作导致 USARTU接收丢数据
7 q" @. o6 S+ D2 `4 Q9 M: }  _7 U ' ~- Q! R5 m! q' S
2. 使用外部 SRAM 导致死机
& ]3 h8 A" |: i4 ^9 l ! F' F; ]7 i* {* ~5 T
3. SRAM 中的数据丢失
; r- Q$ x/ @0 p# o% q3 Y9 o, O9 Z $ D* O2 L. q2 Y# M8 l0 y: a4 |3 Q
4. 干扰环境下 Flash 数据丢失
: M8 l0 ]% W' u- M% d# k
8 J( n% V' T5 ]  `/ C5. 使用 CCM 导致以太网通信失败
4 {! x: x1 }9 O& g6 ]- R/ M " g4 x3 v1 ], D
6. STM32F429使用外扩SDRAM运行程序的方法- W: Z) E/ J) ?1 x+ D2 `
) J; n8 f+ l/ Q- j* M6 l; f
7. 使用STVP实现对STM32L1系列EEPROM预置数据
9 i( V6 t& s, [: I1 @
% j4 f3 K. I, H. a' E5 v9 z/ E" Q8. FreeRTOS RAM使用情况及优化方法
' c9 L. J, D, |% ^: p9 A8 G
  j8 l! b7 e" u: @+ [9 }( s2 R9. 在IAR 6.5下如何将数据存放至flash中2 f7 i, {! }: _( y9 A2 h4 s

5 T* k* ]$ i9 M  t10. IAR下如何让程序在RAM中运行) q  T! G: F0 Y& B. F: B; Q; l' a
$ l+ ~0 Z- B8 [1 Z. Z4 \
11. RAM上电后初始值问题6 T  @  S& ~$ _7 S( v
. h1 [% Z3 V& `$ o5 Y5 ~8 H' D
12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
0 j. G1 G5 b1 G! Y! m4 z7 x3 e/ }8 |/ p1 ^
13. LwIP内存配置2 V4 B2 Z  @/ }1 l$ e
+ J' n) E7 r0 T4 p: w$ ?
14. STM32F2高低温死机问题
; I: f9 I$ H0 ~0 J; n' Y0 c8 N8 Z7 y+ v- u2 I( q9 r0 i
15. 使用STM32F427的CCM RAM时遇到的问题+ D) G+ a. k2 q+ M) {2 z

" h! G5 w: `. \+ H0 ?16. 利用QuadSPI外扩串行NOR Flash的实现  ( a' s' l- k+ f" l$ C, n
* y$ u) Q6 ]: V  p9 {$ A+ W- ^6 s
17. STM32擦除内部FLASH时间过长导致IWDG复位     
3 |# x' a1 G5 s( M6 E9 }4 n& G( T

% K, h  ~2 m0 }, e- Z18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)* F' z; G! a' e

! L* K" Y$ O& f/ `1 Z, c五、模拟外设
$ _# J0 F9 D1 P: ` 0 Q- ~3 G3 I$ o
1. ADC对小信号的转换结果为零
9 d* m+ c  q- B: I( ^( h
% B3 h* B7 s6 f* u* A- [4 q8 X2. ADC键盘读不准
7 z1 B" s" s$ W
  p$ I, i/ [& _3. 扫描模式下 ADC 发生通道间串扰
. Y: G0 _- h  X2 H, ^1 h3 {
: z: n; a0 @0 i* p4. DAC无法输出0V的问题分析解决
0 I1 ^7 C9 B) f- O  i/ _
% `- G$ h/ B2 f# J* F5. DAC无法输出满量程电压的分析解决2 _* h8 ~+ _% \/ H' q( y) v
' M, G" h# t% ?
6. STM32F30x 的ADC 采样的傅立叶变换
! |& U+ J3 J  Q2 w% `: K/ y/ U
& Q) O& v$ t! N7 ]7. STM32 F1系列 DAC的示例详解3 u# t& \' e2 W# P! _
3 ]. j4 p" k" d. X* q% b7 Z8 c* {
8. ADC 连续模式采样浮空引脚问题
$ r7 V8 X4 h$ _( E% G
" J+ H# F- R6 W# }$ A9. PWM硬件间隔触发ADC
$ t+ d, y- i8 t9 p# K8 k
3 t6 Q7 V" V5 m0 k) y: s+ a10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC* P# \7 ~! Q8 h. l$ V8 ]$ O
2 ?# ^/ D, V0 d
11. STM32L4 系列中ADC 通道配置上的区别
, O" A6 j: q5 ~6 z2 w/ `- L9 X+ _! E, c- `" ?3 T# K
12. STM32 ADC模拟看门狗及其应用
4 b9 M% L2 h! q/ G! B7 m& |' t3 a6 n4 |6 [" [2 W
13. STM32L053 comp2 比较电压无效问题 ! y  ^0 r' H, A( x% t
. j6 l( V, V, f* C3 D
14. 运算放大器OPAMP在STM32L4上的应用
; W+ w' E' t$ x2 x* f
/ F% G7 h$ n' \- F, i( N15. STM32 OTA例程之ESP8266使用 - y2 H! T. T6 q

( |3 J* b, y6 X3 _% A16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)! l8 {0 O! |+ T% j; R6 z& u6 Q' s, \

- c$ B6 @& W( P4 y6 y: x7 w: [六、计数外设5 H0 x, T5 [+ ^" y" Q& K- Y

- l: o; j* N( @; o& m: F! b2 u5 b1. Watch Dog 失效' y5 r( ?6 |- E, R+ f, z
: w! Z% l" J9 G" [( d/ d
2. RTC计秒不均匀
  @! q* C" t! b" O  U' y5 v
2 Y5 D5 t( }: {! T; Y' X. Q3. 软件启动模式导致 IWatchDog 失效
' F! U% U5 d- {) u7 {! L . \9 v* Y" g+ E7 O$ o
4. STM32F030R8 定时器移植问题
3 l0 S; L/ W1 G; \. L$ n3 F1 L+ v! G% ~# i% J3 w) F$ \2 e
5. STM32F0使用RTC Tamper的几个注意事项
4 e! x+ h% S, n
/ C+ ~1 P  ?; Z: B6. STM32L053可控PWM脉冲方法之DMA5 I2 l- U0 {! E0 l
0 p& P- Y6 W; j; A
7. CounterMode,OCMode与OCPolarity关系" ?4 @3 c+ k! o6 u8 Z" [

3 e9 {! Y9 j2 i  Z+ \8. STM32L053可控PWM脉冲方法之DMA% B! q7 {, r6 F  m& f3 w! p
" Z6 e  }1 ?* `7 w* u2 X" Q
9. STM32F1通用定时器示例详解—TimeBase$ ^6 ~' q6 q) x! b" p; A5 y
  \' O( F1 t" b$ c6 D
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
, D9 l8 _+ Z' G1 O# _. ^: |+ v6 t6 ~4 ]! B, K) y+ \  }7 \, l
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生/ Q5 Y5 ~3 B4 e# I) I
( R' O0 {$ }3 C  X: D, J
12. HRTIMER的多种Fault事件联动机制
- ^" V- O% i3 [3 p* t 7 N( A6 p4 g9 G9 o0 c1 |1 l
13. STM32通用定时器 示例详解 —One Pulse
. P) h1 \$ U" [1 d5 Z3 p+ a9 }
0 D' x7 ?1 e$ N- G14. 如何用LSE校准STM32F4内部RC振荡器# g6 j- F4 X3 D: J. i: Z" C

4 b: h: n+ R5 ?1 \; \3 o+ \15. 一种使用Timer测试HSI实际值的方法- C$ x: t: z3 o6 s0 G; w! W, b( B

2 a" g$ [1 ?' ^7 w! V" z16. FreeRTOS定时器精度研究" R7 C0 @) Z# u+ Q3 ^
5 h, f) H4 Q. L+ s, e3 P
17. HRTIMER产生多相相移信号' g. K  H! F2 I( Z0 S! Z" A6 V4 `" _

7 b6 M' N  H, s; a1 R1 g1 m2 d18. 窗口看门狗启动时异常复位问题
8 ?3 v2 W5 W; o6 M! ?6 q
8 W" b' j( j  b2 v19. PWM硬件间隔触发ADC1 t7 ]# q: i, V) A$ Z+ J: E

0 l" X! f# e) d8 W0 A5 d( t$ v) E20. STM32F030低温下RTC不工作' B) V" g" r  p- e

. o; j( v) }7 Z# h$ e. s21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
/ ~  R7 ~9 d. Q) s1 [) G( `+ s1 ~5 p% [
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
$ Z6 ]# O& z' m% P7 ?: ~7 G6 [$ a  T* g" X
23. 基于STM32定时器实现定制波形的示例 (2019·7·25) 0 ~" }. U: O6 t, Q# |
" s7 M3 c" S4 D8 Q. p6 _$ r
24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
# e+ n- C; w2 M, E1 Z

; `, q2 d) w7 R# E# ]25.MC SDK 5.x 中增加位置环 (2020.3.31)
+ @3 s* z* Z' j4 Y; a7 B5 j" |
9 b8 O8 K. K. b( P5 a4 @5 ?
26.STM32高精度定时器PWM输出话题 (2020.4.29)
0 \1 r& y5 K* Y
' G' W/ F! _# N# J" H
. d' `* a' m2 l, Y; f& Q# j
27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)
9 G9 F8 u& ^9 b& q8 i

* K1 |8 c) ]" E, W8 X+ [3 r七、内核
* C4 Q" x; u, e9 p! g 1 x# E0 z- y5 J
1. 使用指针函数产生Hard Faul
7 n) A& E8 }: E# R" X8 Q 2 d* X+ B& d2 D! z* R- v2 l: f) U
2. 调试器不能通过JTAG连接器件# f  i  |& n! q" n! q/ J) t
& e0 \8 Q. p% b5 i. n/ A" Y
3. 鬼魅一样的Hard Fault
. u' K$ z0 d/ A; \. `; T & }9 g  ?8 n% P. |$ s" ]
4. 进入了已屏蔽的中断[) R) k: Q: v. T+ I

) @5 m5 G4 O9 z1 I5. 浮点 DSP 运算效率不高; h$ {3 b! g0 ~- K) J

: a5 @  Z) \* e- k. D3 S6. STM32上RTOS的中断管理
: ^7 E4 w8 d6 T- X
3 m- Z. i) ^7 R) j" M" o9 ]( T. x$ e7. STM32F7与STM32F4的复位序列比较! S% ^9 S5 j# C5 j$ B3 `5 i

0 B7 B# R/ n/ x/ c9 K1 }- I0 c8. STM32F30x 的ADC 采样的傅立叶变换
7 s! \2 I- l: h2 J6 F
2 A/ M6 X3 R' J* t9. EXTI重复配置两次导致误触发中断的问题
8 H0 o1 W% o' C0 W- S
4 `4 z5 W  U9 O, ?7 v' I10. STM32F3xx/STM32F4xx使用浮点开方指令  c0 r6 i* H( M3 \0 ?

; j' k8 s  V7 u3 z5 z! [; @% \2 U11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响* V4 X6 r( g7 L5 E

& h, w8 I. F# ?7 G3 I 12. STM32F7 MPU Cache浅析    s1 U# ~5 T* j- P/ w4 [) |
1 ]( E/ J- K8 }9 Q; e4 n/ }! y6 F: V' {
13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)
' G5 m3 _/ n, |" u& a! X+ c

+ Q8 q2 n! P+ B14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
8 E* p# o: ^" T# g; r1 U

& b1 r% d* J8 G) L
. T. h: r8 o- N+ I* Y八、系统外设0 j0 e) N- p4 c, ?
- N0 ^5 g& x& m/ T
1. PCB 漏电引起 LSE 停振' w+ H( e, |7 R1 G3 J
  t5 b+ q4 H! Y" p2 J
2. 时钟失效后CPU还会正常运行
, }6 t& O( I1 A1 z- w! u6 q " r: F/ l2 \( V. C0 u' K
3. STM32F2中DMA的FIFO模式
0 ~5 \& _# J" V8 d. c( B
+ R& A  b2 A5 Y% m6 m# l1 s6 C4. STM32L053的GPIO翻转速度的测试
1 a$ I) W4 k. G  o2 n3 ?9 `' ?/ t9 H. Z: u: R- R6 G) i. {$ y* M4 S1 F4 C
5. STM32F4xx PCROP应用
5 Y! m( Y$ p: w0 C( ~- v  k( X0 u, _/ O
  O9 i9 P4 q' s" ~; G! D/ @7 ]2 N, j6. STM32L053的GPIO翻转速度的测试! M' O+ [2 M3 @, G
0 L! P! C  K" G& P
7. 如何在IAR中配置CRC参数3 `: q4 p! z. a* @' i

' G% I: L( ?" m" M+ D9 p  p8. PCROP区域函数无法被调用的问题与解决
; G9 c% C1 S0 _. T3 F3 f4 i& Q ; n( S, Y1 r; z1 c( ^( t8 j
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题+ S& @4 G! V4 e! W5 _

6 r/ I" `5 W( Q; r: k2 L10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计& m9 w3 h$ j+ F% R7 H& i
7 P- ]6 Y  B+ |0 x1 W" A! z4 g
11. 如何用LSE校准STM32F4内部RC振荡器& E: _7 I8 D$ i3 g. }& }% u6 W* t# i

+ h1 z$ U2 [& o12. EXTI重复配置两次导致误触发中断的问题  , ]: z# ?& |+ m9 I- q0 ^% N& L" g

- j9 V& o3 C7 C2 i0 N5 ]0 Z13. 时钟安全系统的应用(LES篇)  
( o' }* Z) P  d' I! {: R3 h' \
/ ]  Y9 G+ [5 n- n
14. 利用DFSDM开发PDM麦克风应用介绍  & }9 C+ p1 b/ `# B; p; D

% p1 E7 n1 e+ g4 h2 ]6 ?15. STM32H7的FMC外设在DCACHE使能时运行不正常 % q6 b' s8 C. X! E
, o. x9 H4 j3 y+ n0 ]/ _
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
4 B9 n. P9 D" A2 T3 [4 Q9 l% b
: F$ L3 K8 S5 u) a! f+ N5 [0 E+ r% S' G1 Q( M! s+ q
九、标签和收发器
5 h( j8 C$ j% l% r6 H: \# V " J0 o  w  K2 V; |
1. CR95HF的初始化步骤
. {6 O' U* ^6 |7 z ! o  @) M- v( _' ?9 ~

( n" o4 V9 v) T! Z
- k6 n5 l4 L; a4 _" o十、生态系统0 E' q! v3 I% L$ Q& ?- T
8 |! d2 M/ g/ K4 S2 y4 y
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题3 C! h) O- n5 [: a$ }4 e+ w5 w

: w8 `7 Z7 a& ~- R2. MDK Logic Analyzer 功能在STM32中的实现问题
, \3 z# T  ~( u3 ?: q+ }) ]  W3 h : p5 c, W; ~" B5 Z
3. 在IAR6.5下如何将数据存放至flast中* E, I0 W3 n" Q8 E& D
- u. Q4 n2 _" v0 m* v5 U9 N
4. FatSL移植笔记
4 j- L. M' h1 O+ g( v) J ! i3 U9 H* g8 E! [+ n2 ~/ J
5. Keil中使用STM32F4xx硬件浮点单元* K9 @; J& R0 J9 i( @4 y! t
' Y: r1 q  }  m) }! l
6. 如何生成库文件(MDK和IAR)
6 H$ d# U# i: X1 n
. Q' f1 ]# k9 b/ W% F9 k6 q7. Nand Flash文件系统解决方案
3 W. v' K& K' r  `- _0 v$ x9 n( i5 | 6 a0 Z& O9 \6 n  a% J9 k
8. STVD在调试时弹出“Cannot access configuration database”的解决! ~# M! B/ t6 ]" m  f4 c

4 D# C( j; k8 ]3 e9 c" p+ F9. RTOS低功耗特性的设计原理和实现
# _# X) O1 ~4 r8 u 9 Z2 ?/ I5 T$ [  {1 v  \' X. m
10. IAR下使用J-Trace进行指令跟踪* u5 }* u2 N+ ]  v2 s7 T
% p* I/ M5 h! ~
11. STM32上RTOS的中断管理2 W) d! o( b" x% @
3 o* T7 y5 A1 j" f7 u' x- ^0 E
12. IAR下如何让程序在RAM中运行5 ?( {# C4 \2 C7 }
8 Q# Y# v# W  }) u
13. 如何在IAR中配置CRC参数7 D. d# Q9 h7 y) G% v
5 G; f1 {. D) ^) X" m, Q
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
% d7 N% J! m0 v  S( `! C' d4 [9 b  M' {
15. 使用mbed进行STM32开发及STM32F0的时钟问题
6 g2 A- ~9 m2 u9 N8 v" [$ Q5 G/ X( `# L9 ]
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能0 R8 O" f9 n; c0 {
0 Z, e3 v) V; {' b& [! q6 j* ]- N
17. 多任务系统中的不可重函数使用注意事项( L7 h, H# `# _6 s7 Z: Y) K7 ?

1 n1 ~6 O. q6 ^2 O" C# N18. STM32 utility的hot plug功能: M2 v  c' y1 @6 L8 k: s! S+ E; m

* Y9 H( O0 k' w! X- G! O19. 如何将CoreMark程序移植到STM32上
) b% C" V! n7 Q9 i. l
6 j! ~- }) v+ ~' e" B: ]20. FreeRTOS定时器精度研究/ t1 ~! _2 |( R: b) H1 N0 V8 `  P2 f

# E/ K' ]2 b7 s. |" d6 \/ ~21. 如何使用Eclipse和GCC搭建STM32环境% W' r( v$ i5 j7 C5 w2 p

2 F3 g7 _( `' {" Z22. 如何建立一个基于GIT的STM32库
# w( L1 b/ ]8 w* D% \- h  e4 p! n! x* h. P9 v% q
23. 从零开始使用CubeMX创建以太网工程
) S& ]7 ?; W& `+ c% L4 V
; c/ i$ |  ]* S24.从STM32Cube库向标准外设库移植FatFs文件系统
. n+ _) _2 a( D; y- C7 |6 ?' s+ T4 Q" C, ?0 c
25. 基于 STemWin的屏幕旋转, l5 b7 E( F1 N6 r. K9 O0 d1 g+ Q

- r- G9 u" ?! `( f" a26. 编译软件 Hex文件烧写 ) ]3 t/ S; P6 g+ X
7 ]- H# j# p2 s4 }
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
: {9 j: A' b, b2 L# y  `
$ L. }5 v8 y; H: @' F5 t# w1 e28. USB CDC类入门培训
. R0 ^  r5 q: z0 S; Q$ W  ~9 ?5 B$ i/ r! |
29. USB DFU培训
5 q3 U3 h- C0 T2 A! `5 h8 l
* j4 d) M, k: d8 T30. 用于量产烧录的拼接Bin文件操作3 ~5 ^6 s( x* |" O$ L" i2 l
) A+ x  v5 s+ j
31. STM32免费开发环境该用谁
  Y( e7 t9 N% I; C* R8 J1 ]( s5 i
+ V' G9 C+ O, j. u1 j( W32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
, ^8 `& c/ Z0 a/ B" F
) C' D9 a( E! U& U$ }# r: X8 m5 x33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)
  b7 n; @2 P* T2 D9 X7 X" X* P5 @4 s; x* H! v
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
1 s5 g$ e4 e' p# [4 E
. s# G* n1 }0 L1 D2 b6 e. O3 z5 T6 X35. STM32 FOTA 例程之 cJSON使用     |" u/ r; X# B* Q7 y

! P. |8 S" K, k5 j: R" q* ?36. STM32F769DK 云端固件升级例程使用说明 ' k8 U) |) p, g- k2 F- s
/ j' `( h( h0 Q  h2 F4 B2 t3 Q: j; @3 z
37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
! ?- A7 G9 i+ r0 A( D
$ P5 f; Z  X# }4 t3 z/ P38. 基于 STM32 的阿里云物联网平台方案 4 E4 ?8 Z& j. e8 m  N% A& T' j. U
+ \0 c6 a8 Y$ N; ~" w4 M
39.AliOS 任务上下文切换原理分析  
% H! O8 {! ]- _3 ?! M
& \: e" V* X; g/ C' t1 }+ }6 j40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  1 g4 l8 A: V/ C& N$ S, J" k
( c' T) u) O* U3 @. V
41. STM32F769DK 云端固件升级例程软件开发文档  : a& W( [# A/ [: t
- s& q4 M/ B& L
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
5 b$ A( p% E' E4 y2 e% v, u
: W7 \0 w- a' a1 M6 Y7 I43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
" ^8 Y# l: A6 t5 C+ J4 N
7 ]* `0 `: ?8 g( t4 {. v! o8 K44.零基础快速入手STM32MP1 (2019.9.19)
; E) b2 a! u8 y2 k+ g4 _
" ~: {  {  {0 k/ J" l45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)
) K  D1 O$ I# @4 Z6 `9 R6 s3 I5 ]7 |% y6 Z
十一、调试
! S& N: }5 `$ v. |3 ?
+ c! G/ |1 }6 w1. 关于STM8S SWIM Error[30006]的分析. Y: u' C/ f# u" g
1 a- e& V6 k7 C+ t4 H! R
2. STVD在调试时弹出“Cannot access configuration database”的解决
' }' J, ]) F+ M7 [' M; N7 U
- Z7 e3 K# d0 B% n( q7 |0 l3. IAR下使用J-Trace进行指令跟踪9 m) G, z7 g3 C+ J) E
- p; q/ \# V, ~. H5 M7 f
4. 菊花链 JTAG STM32! N+ m( J# Q. t; m
2 Z" Q8 ^0 e+ e- e9 B7 [0 I8 w
5. STM32F411CEUx 能下载程序但不能执行
( s% U/ w  g. `8 v. T' t  M3 Q+ H% Z  R1 ?9 B, h
6. STM32F103C8T6 程序上电跑飞
: R) X4 y2 a1 b4 C! N
  f$ Q8 f& O4 ^, E8 C7. 使用STM32 ST-LINK Utility 设置读保护后不能运行2 X5 i8 h# {; n/ v& d  i

- s( A4 Y( {0 T8 Y1 y; b* I  P8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
( o5 r3 s% a' J2 Y' x5 N; \9 u9 f. M* y+ W- N2 o
9. SWIM协议的GPIO口模拟  P) M5 z8 p7 Z+ Z0 K! M1 @

+ q- W3 D) T* j. {; p10. STM32F091空片使用ST-LINK烧写后复位不能运行用
0 I& p% r7 r/ B
/ i: l. \. T/ H, \11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
( I/ b2 `6 e6 _% _& p; k8 q+ s/ U
" g) Q3 [/ H" c& o, a12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)' N8 b( `- q* X8 O1 }
# o9 m* L( t% o, S8 ~
13. X_Cube_ClassB代码移植 (2019.12.24)
* l8 V: A. _  M3 g& c' p. b
3 E" J4 S, D6 e7 \2 o! n; L$ |, Q
! d/ K; v+ c/ F$ Y8 b
14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)  A! T( q( X6 b0 r  g4 H  [4 U

7 Q1 U- N7 p& F5 [十二、人机调试8 u- L. u  X6 L. {9 A0 t0 u
1 n7 q+ @. j/ J' l
1. 一步步使用STemWin在STM32上开发一个简单的应用/ r+ Z" n4 y# ^( h: @

$ X3 L. ?; r1 n8 r& w( ?3 m2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计3 O! w2 B: d) M3 q" I5 X( M
' @4 K2 {* }; m4 Q! j
3. GUI方案中ALPHA通道处理介绍
5 k2 S  G* ~: L0 N+ `3 s0 W) W% y0 o+ A7 Y' Y/ t1 h
4. 基于FMC8080接口8位LCD的STemWin的移植
4 @  H% Q5 Z& \# ^# P# a" A3 D0 m9 x* ~
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)/ Y! n% N9 J- _; e9 i( ?
" V: T$ a+ W0 }2 L: Q  H" ]
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)" o8 ]9 r; K; I- a7 i8 O0 ~2 _
2 u& w( L- z2 U+ e6 V- Z9 ^  z8 B$ q
7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
' v/ x, F- l7 k) e! `( o2 M/ e0 e
8、STM32L5中如何关闭trustzone (2020.5.12)
& `3 W# j% D  z, K- ^
: ^/ a, ^' I% k* I1 p' I2 L十三、马达
- g: o/ P; T, B+ c
+ R, g/ O6 U1 {* q% |) `3 V1 H
1. 电机控制同步电角度测试说明
) t/ b# B; R' c
" X9 H; D4 _3 x$ ~  y
$ J5 h) y4 s$ E7 m$ ]* G  a
  P0 i$ G! H- Q9 q" p  T) _十四、安全+ P* B: l0 c7 E3 o% m/ U# ~2 H) ^
9 |9 p% n  `  d
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
" z  Q9 x$ d1 s
5 \7 Z7 ^1 \3 [% L# p! k% d+ u0 B* W) u& r4 x
十五、其他
% `, A( l  U5 |# u% O  `) n/ S* Q

+ i- ]+ T2 G- r; B) I& e1 i1. 跳不出的 while 循环! r$ L0 }# P7 y; t0 e  m
$ H. n  W, c: O- z9 n- j6 w
2. 外部IC连接NRST导致MCU内部复位信号失效的问题1 i7 k7 Q/ m9 \/ D$ W
+ Q: z% G5 e  F" X- o
3. 潮湿环境下不工作
7 H, s2 V! _! `* }6 V 7 \1 q( }3 A3 _$ L  ]9 U
4. PCB 漏电引起 LSE 停振3 c5 ]: D' n3 P- M* P( }+ N
& G! u9 [& |" I9 I8 R
5. STM8L152 IDD电流测量; u: ]0 o5 v  Q9 V3 T

$ L0 `+ j0 W: `& j$ o6. 使用STM32实现锂电池充电器
* ]0 {1 W( }( v" W  d0 E
( w* a0 f- O* T" }7. STM32_STM8硬件平台基本检查
1 b& _1 ]7 p8 Z( T' r  k$ Q7 W# B; f2 v3 v) T
8. 验证STM32F401在STOP模式下的电流
4 q! g5 V+ W$ T2 d
; ]! Y4 ^- g7 o# }% m9. P-NUCLEO-IHM001 电机开发板串口调试指南
; o8 A8 w  j9 Y1 D1 y; ~, p 2 M6 |6 `+ |& V& y; u' `7 N
10. 一种计算CPU使用率的方法及其实现原理0 M9 u, v2 `8 _5 z5 \& H' G: E* M! A
- o; h1 p( u; Q( u6 \  u
11. STM32 RTC不更新原因分析
/ ~& k1 i" w, L7 r8 [
2 n; f" E, Z3 e  [3 _12. 关于ST库函数的代码性能对比
" S6 z( q) A  e( ^+ V: E9 S) d) X$ Z
: I5 u, Z1 i1 @& L% L/ H13. 在IAR中实现通过将程序在SRAM中调试的方法/ }1 m$ T% `, M4 w# O  h( V8 J
" |) a7 y& t1 g, \; o
14. M95xxx EEPROM写保护配置
. s) S8 X9 Y6 }$ D4 F& Y# m) N/ K) J, `: L, G  H" ~* Q$ N* b
15. 4SRxx的GPO的属性
& A( C- w! d9 l0 f/ Q; U; ]
7 P4 J6 q1 p! R+ {2 H, |4 R. W( h16. CR95HF的初始化步骤 $ M" `) J0 j( S: d/ g

% ^5 |/ P% h) u9 [& U& b3 f17. 电机控制同步电角度测试说明  ! L, Q0 w* R; A# F
2 f( ~; N4 q2 M$ |5 ?0 p. t1 |
18. STM32+BLE通过 Notification与 Android应用程序通信的例程* R3 ~4 ?5 U8 P0 _3 `3 D! c% l

  K. ^+ W3 a; W# q& a; z19. M95xxx EEPROM介绍
5 S/ @4 {6 W" s9 y8 r. X- g( ?) Y& |& O! }! [3 W- {  e
20. STM32 DFSDM测量温度应用 + I; w/ m9 t& D5 k1 D1 F5 K- _6 f( V

. h" g! i8 M9 K. W4 H4 _/ e6 x$ Z21.代码实现PCROP清除  Z; T9 W/ g9 _/ s. r0 t" a

: \; N+ h) L0 p" F& {5 g( \3 }* E; `22. 理解与应用MPU的特权与用户模式
* m6 G- X2 S7 F' J, ^6 k6 C+ E% ~# `. S6 P
23. 用于电机控制单电阻采样PWM变形信号产生
5 M  `3 L: `+ n7 q9 Q
) b3 D/ K  g& h' B1 t6 h24. STM32L低功耗模式唤醒时间测量
1 \& A5 V' ~% P& `* o! A1 @( Q4 J  E' R
; [/ M- O( ~8 I2 y3 r' C& g25. X_CUBE_SPN7程序电机启动抖动问题9 j* g* I- C0 ^+ a2 `& B" k5 h

/ e/ e+ F( \7 `! d# k1 x. j26. 发现STM32防火墙的安全配置
5 }9 {1 y9 a4 P8 [6 c- K7 s) S
/ `" I* r& C1 G. ?6 C" n27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改7 j) Y' n9 g+ v2 |
* X$ U  r( N. D% u. d+ E) W: `0 Q* g
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
6 j* b/ @, y; f+ \( ?, E5 j: s+ h& ?, y
温馨提示:

+ N' t* N8 `; T
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

# O3 g3 V8 u6 Z) [' e8 _. O! k5 p
( B1 ?& m9 B9 i- I5 q
' f, `2 s* M1 j! o
  F3 v1 O1 f! Y9 a8 R. q9 q+ @6 |$ |* r; v4 Y0 \0 m3 x

' c! P% e  l3 B- ]! }  ?% L4 M: v, o7 G- [, m0 X
1 i6 V/ a1 g2 D4 N( k' d
$ [- s* `0 K. T" s  K0 w

7 `. B$ h) J* x( r2 A) D  M4 P" T9 V  I% a* s; }3 F

评分

参与人数 6 ST金币 +6 收起 理由
t525 + 1 很给力!
dsctsam + 1 很给力! 赞一个!
北极熊 + 1 赞一个!
wangziwei111 + 1
tian0yan + 1 很给力!
电子星辰 + 1 很给力!

查看全部评分

11 收藏 157 评论278 发布时间:2014-1-23 14:58

举报

278个回答
michaeldeng 回答时间:2016-7-26 19:35:55
非常好的帖子,THANKS!
Paderboy 回答时间:2015-5-18 07:01:19
好详细,多谢分享
8 h8 r- ~- r  p* S+ e
5768340 回答时间:2018-1-13 14:42:54
HI  
% ~4 u# K% e1 M3 y   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:' I9 ^2 E7 S% \8 t6 @! q& k1 U8 B. b
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************! A7 C$ R$ U" s1 Z$ A3 f
  2. 函数名称:Cdfinger_Bspspi_init0 K3 A  N  c- r/ O4 s) }7 M
  3. 函数作用:spi初始化函数
    % j5 x$ F2 Y% v1 {# Y  ]+ p
  4. 备注:
    1 P  i$ R! z5 C# V, h) H$ A
  5. ******************************************/
    9 @$ g# ]1 f, N2 _  f+ t6 y4 _
  6. void Cdfinger_Bspspi_init(void); J( f' |9 r/ H2 H1 H
  7. {) J$ j. ]9 v! Y. S
  8.         GPIO_InitTypeDef GPIO_InitStructure;& T& J$ a/ m  l3 [5 Y
  9.         SPI_InitTypeDef  SPI_InitStructure;
    & p' z9 K+ K3 G1 }
  10.         DMA_InitTypeDef  DMA_InitStructure;
    7 K8 E2 a5 ]1 b# p' f) W: {
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    * \8 S9 ?/ A( [7 b& A& i" o+ d
  12.   
    7 l2 T& _2 R  s! s) g; r
  13.         int ii =0;% M; y3 |4 q& f9 T3 ~& z
  14.         - [) C6 ?- h6 H6 ~; _
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);1 O9 K5 O4 F+ f, z
  16.         /*!< Enable SPI2 clocks */" M$ f) l6 |0 I% N" M
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);# ^; P, M$ k1 S# [: M/ b
  18.         /*!< Enable GPIO clocks */
    5 t  D4 A3 D# u8 T
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    + b; }: h7 Z' E* Q* k2 n+ r
  20.         /*!< Connect SPI pins to AF5 */7 ~. M. h# V. P1 y; c
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    & X6 R7 \- t. E# s
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    + G, ~/ q5 W! \1 b5 ]8 N/ i, Y
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);3 Z, |5 p% B1 d+ ?$ C

  24. ! k1 v; B  _5 X# s" A* e4 C
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    " t, p- i0 l9 H' P, V6 m
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. k3 P5 U( y, G1 {8 V# ]
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;6 S& q: s! r9 o6 V( l
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
    * V0 m  o) f' s5 V% d1 K0 C% `2 V
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;$ ~& i* ^( ~# |
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    . I9 ]) F1 R+ T+ h5 Z3 @

  31. ! v2 T$ K% p) l
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    2 l+ B& y9 @1 C7 p% u4 _9 v$ W
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;$ T$ ^) ~, {8 t+ y% N
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    , E9 E2 ]4 ~: j! v6 A8 A3 r
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;! p  o& }7 _, M# F4 i
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;/ D* T# O" ?7 V, y4 w
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    5 y: i. e* X  L4 z' S. p
  38.         Cdfinger_BspCs_HIGH();
    / h, c; X4 W7 |: X2 I
  39.         //Cdfinger_Bspdelay_ms(1);+ |4 A8 W3 B, U. A" B5 |" u" A6 p/ `9 \
  40.   //Cdfinger_BspCs_LOW();3 C- d+ X1 L( Q" H
  41.         SPI_Cmd(SPI2,DISABLE);" Y6 `& r7 @! X, y6 g
  42.         SPI_DeInit(SPI2);! E* x, x( ~+ z% ]
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    ' b; N) K+ x& J$ o9 ~8 N- X  x
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    0 q8 }; ^* E6 n
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;  y2 m% j& N* U' y! b# |* o
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;; I* V, ]" x0 k$ _6 `4 F( E
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    ) R# _8 s, @4 x) Q7 }3 a8 q8 \
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;4 ~! \  K! b7 u! m2 n' f) C
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
    * N* h, {3 l- v( p, U  O* ^+ B
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    - n' E7 v. X1 L$ `" Z% f* W& K
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    & k; w4 G0 v: a7 a- |
  52.         SPI_Init(SPI2, &SPI_InitStructure);+ R! [/ I8 q" n
  53. ; m2 F5 l, y1 w6 R+ p. Y
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);! i: o4 S. J- u& }! H
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    * j1 ^3 @" l7 v, m$ G4 n0 g/ ]& ?
  56.         DMA_DeInit(DMA1_Stream4);
    # H7 T$ Z$ r+ k" o% q
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;! I. M2 V: E1 r: {, ^1 e
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    0 R! s0 j' {7 V2 z- U
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];; D4 k. m; U' b$ ^+ J8 c4 p% O
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    ! u" w; h, E; s9 P5 ?8 }& {( {
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;6 S1 D" A5 T7 S1 {, ]! {: ~
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    6 I' s0 u$ l0 I( s: {3 ?
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;2 H4 }& _# i1 ?' L. g# i
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    ) V' i/ U: w2 U
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    , c, W: {- ^) y* k
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    " L+ C$ S; ~( O/ i, n
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    / u  {/ k$ p0 V3 X6 I4 f
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    ! A+ Z( n  [5 d% a. h2 {# u! f
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    + h6 J2 ]& R5 x0 s+ {# B( f
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    / X& D% [7 G* J6 T
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    7 U+ ]# B: e  O1 W" g3 o
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    " W+ [- ?$ B# \2 ^* I; F
  73.   
    ! T; `6 Y2 l6 ~* N1 e
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/1 z8 r4 ]( `* s1 x9 N8 f7 G7 i
  75.         DMA_DeInit(DMA1_Stream3);
    $ A0 p: p/ K$ o
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    $ T5 @  w- @1 q5 i# S/ t6 [
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);, R- b1 c( t& T; c+ q1 {! [
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];7 q. H8 K; _$ o
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;3 d$ t# K& b/ g5 ^
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    0 u  N% b" @5 f! \; a8 W" c: A
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;, n; }, [& M5 R/ U" i7 P+ n, M) j
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;! G- @+ n  W7 L/ X
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;6 ~3 w) `# A- e5 v+ l, o6 R
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;2 f* y% l$ r1 x+ J2 O. V9 n
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    : i/ ~) x& ?$ Z  a. d- ]
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    ; b  O: s, f1 O  [" D
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;- Z4 y+ C, x) G" o) W
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    ) `' {. O" s4 J8 E, o
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    ! c' q# W- t6 C4 K" T: J1 Z
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    . [3 d0 J  ]  |- Y( H- F! D' s
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);  V) u& M/ K! O! h# N  }% _4 ~
  92.         //Cdfinger_BspCs_HIGH();$ h9 C. J0 Y' u! A% b  @' `
  93.        
    # b! f( G& E0 f; C1 H$ v

  94. 0 S8 ]0 }( N( L4 w5 j% u; u

  95. ; M  m) B8 f2 x6 S
  96.         //发送中断
    * c3 m/ {8 u& W) _& d5 W' e: W
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);' y4 D. G$ U3 g6 r
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     + I" J4 K0 |' b- l8 U
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;: V4 c, z2 K' p) u; Q
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    4 z( s- N; l0 M+ Q) w9 O
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ) Y: p9 ~8 d4 z" o" d
  102.         NVIC_Init(&NVIC_InitStructure);
    9 `) D' [1 {# t- U: t
  103.        
    8 ?( z2 @6 j; |* ]
  104.         //接收中断
    / q  B) l% [  _
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);  C9 \  H6 C6 S5 X. Q  f( O
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    / `0 @# R/ ]5 \1 O, ]
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;5 I8 L6 U$ A, a% X- Q
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    ) f: j; u* a; _; c* {. i; ~
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    $ ?: @  i% O# ^6 w5 j
  110.         NVIC_Init(&NVIC_InitStructure);
    2 I6 ?. ~' a- }0 A% m4 {
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    , ]) W: k8 n% @
  112.         SPI_Cmd(SPI2, ENABLE);
    , b: y& b7 D) X& H- q3 Q. t
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);5 J. v. X& ~$ ?0 ^
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);- |+ G* N# P; ^) i5 a% D! [

  115. ; r) o" F/ p; A8 r4 D
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);' x7 G* s% [9 I& m. `! w* C4 e. z- f! z
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);, ^5 p5 N; `, d# _$ f
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    - g. N7 L. @% I- y; F& E

  119. 9 f2 x6 ~9 U: c% m( Q: X8 X3 O
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)8 t$ F9 d' j# `5 i4 R1 I
  121.         {! `* b/ u2 D  k4 k% n5 L+ k2 o/ f* d9 D6 U9 \
  122.           if(ii%8==0)
    . F  i9 ?- M: N, ^" G3 F) ?5 D9 _, f
  123.                 {
    # P2 ?+ @- E* x: y& i5 ~
  124.                                 printf("\r\n");* k8 N5 Q' s: W
  125.                 }+ s. |+ s& O: |* Q
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    7 d, m( ]7 [  n0 @' @6 u) f1 ~- r
  127.         }- p" L# l( W! o, Z! N
  128.         printf("111\r\n");! z" D. y& G6 E( l7 @7 h' |
  129. }
    ; ~7 @% ?% r2 N
  130. " o0 I9 [  r' \) s. Q3 [# [
  131. + t! t$ [: @9 T
  132. void DMA1_Stream4_IRQHandler(void)! O3 w3 A" X" R/ B& ^
  133. {
    $ c0 L) O$ O# ?: x3 y/ y: Y6 b0 k
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
      c4 K% M3 I7 Z  y; l: t% q+ P
  135.   {3 R7 P; ]2 ^9 v; p
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));1 j: V4 Z2 Q; ?
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    + ^2 E% `6 ?- o
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);# A! J9 ]! {& e1 E  D
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);6 e0 _% w2 }3 L, d. [8 W; q  Q
  140.   }+ U) o; f( b# f: g. P
  141. }: I, `: \5 U+ E
  142. - r/ L" h- U( ]0 B! `
  143. void DMA1_Stream3_IRQHandler(void)
    ' [8 _: i% Z; X$ n  M0 ~2 v, ^
  144. {
    . `" e! H8 q7 b$ c2 a: [, g
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)* B, n; ]0 _4 `7 _( d# q4 V
  146.   {& `& @7 u& C/ o4 K  b) e5 w8 ^
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));$ }( X; p) b( B6 ^8 }" h- C
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    * u! d# u! ^# b
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    % O& ]1 K7 }: U5 F6 y0 K% H/ |8 X
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
    " w8 f) s9 H, f: ]7 k& f* _
  151.   }
    4 S8 G/ O2 g. M1 e% o
  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的波特率是不是必须为相同的,才能正确通信+ c2 g5 _1 N: Q7 Z4 V# p+ Q( h4 _
以下是全部代码:
4 N9 {9 n9 J1 M( h; V#include&quot;stm32F4xx.h&quot;
* K0 E# m8 C9 f9 D; yvoid RCC_Configuration(void);4 m; m3 i" {/ f
void GPIO_Configuration(void);" }' O2 D* {% v6 v& v. I2 m/ i, l
void SPI_Configuration(void);
, c5 L8 m) _3 E% K% U  Pvoid Delay(int nCount);
2 i$ m! a. B; aint main(void)
. B$ e3 k5 s" f* s{  RCC_Configuration();
( v& o) Z% y; \  GPIO_Configuration();
8 K5 b# ]; i) X* C) U  SPI_Configuration();; b8 m$ z- x" D) ^1 D
 while(1)
4 j* {  A  `' p4 s { int data=0;; h9 t: w( \$ j9 h7 R' o" p
  SPI_SendData(SPI1,0x55);: N2 s3 m, c( j0 C
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
/ w2 v0 X' `' ]1 a  data=SPI_ReceiveData(SPI2);1 ^9 m- _2 t, ?0 p4 p. U- M+ `
  if(data==0x55)# j5 b$ w# A- q8 d6 [' i5 }* U
     {  while(1)- k& E9 @, E7 f
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);% v; f6 `6 y, m
                Delay(0xfffff);! H: Q- L  P4 j7 Z
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
' ^* e9 e2 L9 r3 R3 h5 ~                Delay(0xfffff);! b5 \% v# z( H' g
  
8 Z0 K( g% Z% A, d             };
" o' z" x+ I7 m- B7 `  d" ^     }
; {9 E: O( i1 p$ E& B5 K     else while(1)6 n2 B/ R( t# n# A' I0 d9 }
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);! P; j, v, b  N# z: X
               //Delay(0xfffff);( M, }2 ~9 k) }, m) ~6 e
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);# [5 C) Y" n$ m3 U0 j
               //Delay(0xfffff);9 ~5 r% y' n2 g5 @5 V& U( c
   - v% H! M: C. S0 Y% a* k( J& F
            };. o. W3 H1 i8 B$ x* a+ p
 }* |. u- S: R" x9 g% A8 S( w
}
, ^! S  D+ p' s$ dvoid RCC_Configuration()2 ]: z; U6 M; E! e4 |# K( x$ d  S
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
' V9 T1 B) t& L  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);" f! }& b7 j$ b( D7 U
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
/ z7 S5 s8 [: y, A}
3 c/ J2 }4 C6 x: \5 o1 zvoid GPIO_Configuration()
' S4 T, n& s  W# ^{  GPIO_InitTypeDef GPIO_InitStructure;
" y( Y/ A: b7 w' L  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
% |: |$ X* ^1 E0 S  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
$ o( w: v& U4 A+ K  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;, D! W  I5 \7 L1 {
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;# f. \( b& y. o( a3 d. k( d, {
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;6 f! [( W  f& N6 ?& @
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
4 w  T) w3 K: w) J! v  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;+ z. L! o* ]7 M/ ]
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
" a- m4 C( M7 L+ O5 @; x! q) e  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
. Q- n" h! E! j; Z# ?0 w& V  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
5 D3 S$ I$ D  B- G: @. Y0 y  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;& a! I6 }9 n5 w& n
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
8 \; k+ j% g: L! o  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
& ~, M7 @: \, b+ b  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);, u& h6 h. n0 t/ ]  ]
}8 S9 A1 F$ T/ W/ P0 T3 h# [' ~
void SPI_Configuration()
5 f( }, o3 Z9 |( N; _! i{  SPI_InitTypeDef SPI_InitStructure;
1 |$ E' r, x% V% Q; w# N  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
9 ~1 z9 |( s. x: W* v- ?, s  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);1 _$ T8 g" l% Q1 h
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
% d- ~& u9 n! R: d6 a% J3 y; \+ [   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);* l- Z# v( ~+ _* K3 N$ u, z
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
" I, v. J5 X; J2 a# C  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);: m' j% A& n& b
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
0 T/ k. x% |9 t' W/ x& j  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
0 n& s4 M- w0 e; c  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;/ ]  g- ^& ~: K, S9 w, f" _
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
1 J/ o' j2 I1 b  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
' e) S% r9 f9 q& r+ ]: [9 F1 F  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
. k# O6 {  W4 R0 X   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
* A# I1 H2 O* S6 A& I0 x' a) B" w" A   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;% m% T8 E/ s" c+ [
  SPI_Init(SPI1, &amp;SPI_InitStructure);
/ P. m8 e/ S# E! r8 \  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;3 Y) B! m+ ~6 L1 w
   SPI_Init(SPI2, &amp;SPI_InitStructure);
  ]5 h0 I7 T& F2 `% O   SPI_Cmd(SPI1,ENABLE);
  G, x; N( w+ s) Z( V$ J   SPI_Cmd(SPI2,ENABLE); 8 L1 x# e- H( U' Q) u7 A
}
: |) N: L' B/ V. D* g; evoid Delay(int nCount)" H% ?/ j; Y- D; y& u) a
{ int c1=nCount;
# F4 L2 s  Y" W- s int c2=nCount;% P7 J4 `( s5 W4 f9 b" j
 for(;c1&gt;0;c1--)
$ W3 ]5 q! ]! |0 m  {8 X' q; {5 {4 r8 ~7 W
  for(;c2&gt;0;c2--);
- H/ t' f" A' Y" ]5 _6 ~ };
1 I: `% {; q$ e/ U8 m# b}% D  I+ G, A9 T- H" |
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:* K4 ?& m* G, I  l# H3 M3 I& W7 B6 }
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信( y  G+ x- I. x' y
以下是全部代码:
* ?, y3 _+ L3 _& i$ l#include&quot;stm32F4xx.h&quot;
: f6 @' r3 K5 n( |void RCC_Configuration(void);% B+ y  V5 j4 A# ^! ]
void GPIO_Configuration(void);& e. p8 i$ [, M, A
void SPI_Configuration(void);
; g& I. e( O' Lvoid Delay(int nCount);, x3 p9 [  I6 S6 Z# C
int main(void)
1 h* i# e/ G" t8 c1 T8 @7 g, G' l{  RCC_Configuration();7 W% H& U) }3 @8 s- o; m% V' p
  GPIO_Configuration();1 w* d  I9 O8 b0 C2 [
  SPI_Configuration();
+ E+ R+ v7 P7 v% E while(1): ]9 G9 A, J$ D7 Y; s7 Y
 { int data=0;
5 w  K2 H) W3 |: B  SPI_SendData(SPI1,0x55);) e; M- v4 Z6 _& ?# r7 f* t
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
7 t: ~6 }4 {3 }  data=SPI_ReceiveData(SPI2);
6 c* Y9 \7 j, c- C  if(data==0x55)
4 z) C- v) Y! I: {( V4 C     {  while(1)1 n! I9 i7 R. G% `. T1 T
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
, K: |8 \' z& |- X5 c, H8 j& b: X                Delay(0xfffff);! ?! P" l3 C) [* D
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);  M5 B" v4 k' D9 {
                Delay(0xfffff);% c- s; ~, M# |8 Z/ e
   8 J: P7 h5 |; i5 o, Y  b
             };: m& t/ V( B4 Z$ e7 P1 j
     }9 m7 s* E/ Y+ V
     else while(1)+ ^# p9 w, C- Y# u9 [9 ?
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);& R: ^% Q; Q4 J9 M" ?  @  I1 M
               //Delay(0xfffff);6 E: d1 ]2 |& Z1 u' y; q" J; ~
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
& N! k- O  E% O& P1 ^: s4 t               //Delay(0xfffff);
4 C" P2 b; ]; w6 j! a  
* I5 K$ u2 w- A# ~            };
5 g' |- j+ x3 I! B0 g( I2 h }
  f3 i/ B* h/ `: \+ c/ O+ ^}
/ Z3 d2 p% a( b- x9 Ivoid RCC_Configuration()1 c% y, {* ?* q1 h+ C# p: W& C
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
* n0 f  A. Y/ N, H  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);1 N6 L9 [3 b: {* o* H* W
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   / F( D% c0 a1 z- P
}9 `: ~$ z1 W& A6 r6 y! D- ~, \- |
void GPIO_Configuration()
$ s$ P; v* G  M$ l. T% V{  GPIO_InitTypeDef GPIO_InitStructure;& ~6 s1 |/ u4 s' ]$ x. s
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;  }/ q$ t- Q& D9 W5 ]3 U. x) v
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;+ E" U* X* I9 a$ }( k
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
0 O5 @; O( ~6 w5 w7 h/ p  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;. k! O( ?( J0 ~9 D6 i- M
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
- j5 D7 S, R2 b6 f& b  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);% _$ m0 ^' E5 G; w
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
* M+ K% I2 |1 }" b* U: N7 Q3 Z- [  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
7 y( F% d$ x4 D8 }: ?4 a  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
7 o2 z" ?. b+ [: N  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;+ d$ q8 M; f/ [( N0 m% r  V
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
+ I( Y* q* c1 K8 H  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);' m6 O" i1 K0 `9 b
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;- C0 D* N; z) ?) w, h
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);/ H3 M* Q/ ^' C3 f
}
8 ^4 |  \4 m) D2 u5 Y! |1 pvoid SPI_Configuration()- @3 _, T# @0 {3 _) s! k
{  SPI_InitTypeDef SPI_InitStructure;
3 l4 p9 c+ R2 f9 H8 V2 ]  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);( _, V2 l% r' D
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
9 f9 R- C! ~' t1 z/ q0 Y; o$ M  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
' A- u" V# q2 ?- K! r   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
4 J# l# P  j- G: F2 H  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
7 i8 C2 Q4 m1 |  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
( D: _1 c2 o5 x# f9 |) R5 G6 [  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
. n( W" Y6 M) ~( D9 z  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
9 Y+ e9 w  S! ]) d9 v% K  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
) o8 z+ q7 ?& x; D  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
+ T, S' Q6 f; u, q  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
) a4 Z  y% a5 i3 Z  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
! {: m/ p+ m# [* @3 ?   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
' a% b- \' g& c+ O$ o   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
# d( ?2 g$ K( n! Y4 @; F  SPI_Init(SPI1, &amp;SPI_InitStructure);
9 X6 o& ~' U( J) L( e  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;. b' z; m! j9 ?# ~7 z6 @
   SPI_Init(SPI2, &amp;SPI_InitStructure);
, ^1 C) h  j; |9 A   SPI_Cmd(SPI1,ENABLE);
8 G* ^, h6 I7 L  Y6 A' n   SPI_Cmd(SPI2,ENABLE); 7 y, k) T1 j+ P4 u; n1 i2 P
}
7 \; h. _* l8 I6 r( i6 bvoid Delay(int nCount)
% J- K+ K7 G6 }. n{ int c1=nCount;/ l/ M9 a2 m. v+ I& X
 int c2=nCount;
. r3 A" \7 A& w& j for(;c1&gt;0;c1--). @( d; J( N7 m9 W; R
  {
# V" o& ?8 D( l  for(;c2&gt;0;c2--);% n4 @& Y3 E2 S- |% C1 z1 w9 i
 };3 i" G5 j& m# t" a7 y
}& E( o( e# ^9 G( ?6 Z# g
先谢谢了~~
& r  Z4 M" q/ s$ f 
( X# K9 N+ R# ^4 p
- G6 E- h- r: @4 \' M, Z3 @楼上的问题,看我帖子给出的提示哦~
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发表:+ ?+ |5 ^" y* A* Z& ~
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。# H: Q" {1 h. ~0 h* N+ }1 o- a) R
 9 X/ q# P' \7 I+ V4 e# T" }
) V" t4 S. ^  @9 B1 N$ z3 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 运算效率不高

    j( h/ ]0 ^+ W- K
鬼魅一样的Hard Fault
3 [- M) Q- W& x# T% X : J. r# U. f9 _* B( s+ W
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
+ t+ K. X+ G! G/ u/ b 
# R8 R/ a+ r0 k/ k' o咋解决?
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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版