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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表2 O0 }! E7 H4 y, ]- |  A

1 Q. x' h8 q& r9 f
8 |, X1 H. Y2 m# q1 ?, L' K: z1 U社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。1 O- s: l1 n. w0 M2 f5 F

! o* K3 n  X1 }. a6 e# p5 @) ]提示:点击各主题,进入帖子,可下载ST工程师解答详请$ _( ^5 U; `$ d' N

; M! C4 t- N. m8 q% e2 |0 _* q- z* D1 k5 ?( X. }
一、通信接口
% o; T9 A. e0 s3 n; F* S, a7 p. e & P2 t, |) G* b# d
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新& B& m4 s: v6 v
- J7 F5 ]" {# |1 i, |/ b; T
2. SPI 接口发片选信号导致死机
4 `; U  D) ?! v7 f
; i2 o( O  |% E3. USART1不能设定600BPS的波特率
) o1 a5 q. a* `0 D% m
; i" |  Q* v* b( z8 G* f4. I2C 接口进入 Busy 状态不能退出
7 f/ q: Q6 z9 \# d+ n7 j1 N
9 U0 v4 A) t& \. ^$ b8 ~) O/ Q" _5. 对 Flash操作导致 USARTU接收丢数据% O) S% G. l. }2 m( h
$ s! ~( d! b0 N9 E$ {
6. USB接口易损坏
6 Q" M* W: y9 }9 [( [' x
+ x7 N) L, E7 ]( {7. UART发送数据丢失最后一个字节* y/ j) ]! w% Z" }1 v" I" F
# f0 |# R6 [" c5 ~7 y
8. 使用 CCM 导致以太网通信失败
- d( ~) w2 L2 V ) w3 s: G+ F) F. E1 H
9. SPI3 接口没有信号送出5 i( I, i% C  `, o# M' F0 U

" n, F  \  x+ H% d. |  y10. 时钟延展导致 I2C 通信不可靠
! }7 Z# q7 c, g3 D$ K% s. d' w( T
" L1 C2 Q8 v1 A/ ?1 c. ]7 ~' `11. M0的USART波特率自动识别问题+ N* P5 r$ d& v8 e
' `! K, J# L9 a; A
12. WK15 OTG做U盘主机兼容性提高
) A: ]% z) j' v: d. @- L$ T5 H   g* V" ~! u* T7 \0 A
13. 以太网电路设计注意事项5 \. A3 _; ]& D  j. v

- i- l" ?2 g" N. G8 |( ^( c& p14. OUG主机库在BULK传输上对NAK的处理
6 [1 @: A  S. a( V, Q4 r  S
' k+ S& i8 e" g: ?4 f# S) n15. 串口断帧检测
( h6 j" s8 Z2 _3 b* Y & M5 F# I# y& J; W7 `' X7 \+ J
16. VCP例程用于数据传输时丢失数据的处理3 }# A/ b+ Z4 k  c% l
6 D* ^- t5 O* }/ X0 e
17. STM8L051F3P6串口UART数据起始位判断的问题+ n  I& h6 u) \9 o

, g; x( i1 B  }/ F5 |8 w18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号1 q+ V1 q4 p! Q# I- B
. i+ ?; P" ?; q$ t& U5 R- H
19. STM8中UART奇偶校验的使用方法
3 e7 b% O. ]+ N: Z  k
! v/ N0 I3 x" `! Z+ l& n1 [20. STM32以太网硬件设计——PHY
! B5 Q0 C9 X& I3 e$ @5 L( Z& @# p0 i$ X3 H, |& ?
21. 一个判断I2C总线通信异常原因的方法  S( N2 b/ r* G

6 x4 H# H& H+ ~' W9 N! [" B22. USB device库使用说明
: R! j3 p1 f: @. g. o0 B4 ?1 N2 R" z( y+ X. k
23. STM32F103上USB的端点资源+ J  H3 \) _4 g9 S( Q& p
6 b, D, E1 a8 w6 X$ P7 w, J+ C# o
24. 使用CubeMX生成TCPEchoServer程序
. D4 o# |6 c: i& m: i( y) a( u7 _0 o( O4 N* T
25. SPI接收数据移位
% ], P7 N/ V2 X * v* s+ I) v. S3 \
26. STM32F0中Guard Time的设置" y+ p) ~# }- b; |
9 N7 N' K8 G1 q$ K" n9 B
27. LwIP内存配置
- B' ?1 z: P/ F2 x5 m
( z# P# ]0 w& v! n* Z28. STM32 USB Device的简易验证方法
% u. w9 d' N. v. t3 m+ D( X2 w1 Z) q. r- l" w
29. USART 中断方式接收无响应问题的一种情况及其处理方法& r: \! \2 p0 @7 j* Q- V+ e
! A( `( _$ r5 I2 Z' W5 u/ K
30. STM32 基于 Nucleo板 CAN总线的建立* {3 u, q$ O1 K1 \' O

# g( ?5 F4 u$ j1 i, t31. STM8 CAN总线的IdMask模式的讲解
# {8 N2 u* y  m, x8 p8 w9 C6 \8 B4 y7 {5 C8 L
32. STM32F746ZG USB 驱动不正常
9 N/ G. r7 {9 l- G/ E8 X$ k
4 D- i: R0 f5 G& t$ Z33. MCU在STOP状态下通过UART唤醒分析
5 ^/ q7 u7 V; ]( h! ~6 T0 E4 t5 F- f3 K8 K5 l
34. 通过STM32CubeMX生成HID双向通讯工程
/ t% ?; H& h, H" F$ O! P1 p" W2 h7 L! N% v' O; _- n
35. 串口工作在DMA模式下有时接收异常 / Y1 q; E( e1 I

. o2 p) f, n7 k6 x4 D4 A! r( d36. STM32 Bootloader中 DFU使用限制' ]  [2 B/ u& Y& X; w& j

  F6 r4 `8 Y; E4 e37. UART异常错误分析
8 D- q: }7 A# @' |
' u5 R2 Z( f9 @1 C" d5 e) l6 s38. 基于Cube库无法检测CAN2的接收中断 ) m: o4 Z6 u& U& b) W3 b

, \+ H) p2 [2 _! h0 H9 F3 X, |, P; L39. 基于STM32F7的网络时间同步客户端实现
3 o, h( b  t* X+ Y! \; N: \, Z6 q. Q) l4 A/ p0 s
40. HID与音频冲突问题 : ^; {( d( H7 J! Z* z2 g6 ?, i
" j! P9 s3 }# }0 C4 D) h
41. 在进行USB CDC类开发时,无法发送64整数倍的数据
8 s9 M1 K/ i7 j; W( r
; S0 \1 L# N$ L42. 从零开始使用CubeMX创建以太网工程* D) v: Z, a! u/ g% W* |& q
7 d. e8 n9 R( d, Y+ n0 V1 ]4 {% R
43. STM32F4xxx的I2C总线挂起异常处理; w& [  C; S( _- T0 s5 \  l

# B& B# u5 t; I* d; C* E6 D8 g  V# T44. LPUART唤醒STOP MODE下的MCU
7 h  C& R, k: P& m/ d* n
7 a$ `& }, Y! U" V45. STM32系列 MCU模拟双盘符 U盘的应用
/ a9 O% B5 e& V, U. c
% n1 j* O! f' I) l46. CEC输出的数据和数据长度始终不匹配
' W/ M3 O  S" t. I% l2 ?
5 X. Y3 `6 `: h9 T5 u47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
! v+ I( f1 k% B# y
: E8 |0 P" v. }; W. F48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)- n* F; x3 F7 \* {  I2 L1 k8 x& v
, u; e7 A& L! K2 O
49. 增加UART接口应用时的异常分析
3 J0 g8 O/ h2 Q7 L& p$ |
! E; ~2 `4 ?5 ^( R* s# B50.UART应用异常案例分析
9 M& L: ~$ l" T( d# s: c" s& S9 s5 Y6 k4 u: i* p) R9 E3 ~5 x
51. I2C配置顺序引发的异常案例' R* o( Q+ t/ j- j

: z# ]- d6 T7 k5 L/ k9 C3 f( w52. STM32 USBD VBUS GPIO
7 u& D9 i# _# _8 i8 M5 I( L# U3 M3 B, x1 f5 H
53. USB传输数据时出现卡顿现象
% |" W0 f: N# [( k1 E, w! U# H8 t) Y5 P8 ^! A
54. STM32的高速USB信号质量测试实现9 y, O9 I5 s! h; j
5 v1 C  }0 N. N8 q" n* Y
55. 基于STM32 I2S的音频应用开发介绍
- Y2 M! Q6 R4 u4 l; P/ o1 P0 e5 W4 K) `9 O+ {" h
56. HID_CDC复合设备在WIN10的识别问题  
+ [7 J0 j2 n4 h1 k' L) T; _: O* v4 C5 ?
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  
+ O4 W7 B; J. |5 a# a, ]9 N0 ]& B
6 n7 J+ X' u( \7 p58. 一个关于LPUART输出异常的问题分享  2 N9 ]$ S' K# W" I

; P; v3 z3 r- W59.通过 DfuSe 工具控制程序跳进 DFU 模式" C' {4 s+ \9 z, ]
2 I  w6 u$ \; L9 t" W  R7 \8 ]/ T
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)1 G; F; o9 K  G- m( c2 {
- I- a7 V/ k7 `; N" \1 `
61.一个因初始化顺序而导致异常的话题 (2019.12.24)
+ D" v  [+ z0 y/ M: X& Y
) w1 T9 e) h) A* P7 J/ a
62.MC SDK 5.x 中增加位置环 (2020.5.29)+ l2 u8 }; `0 j. G* w4 C# Z* h4 H
9 d* \+ b; z+ c! p# o1 ]2 Y: i
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
* _3 H4 _, s0 N8 ]0 t4 t! G
2 n) w  M5 v# A. _/ k64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)8 C% G. `4 {4 C- N7 d  C; Q
' @  e0 E; ^: ~% C1 J5 w+ C+ v
二、电源与复位  g8 u* k& f0 G; `* m" ]8 ~

  k5 s7 X; u! _  V, k& S% b1. Vbat管脚上的怪现象
- |1 E+ D  D- K! h  x
9 {! `, j9 O; t2 _2. 上电缓慢导致复位不良
' [6 O; W  c* j# h  B
7 A8 G1 J' R9 i: N4 `3. 关闭电源还在运行: S* {5 ]. y/ j& J" ]

% m& M% D% v) L  u% b- Y4. 使用STM32 实现锂电充电器
, I6 y5 w6 `; O- w; J & ]1 x6 c  H8 k
5. STM8L152 IDD电流测量
/ g4 D3 A! j8 K1 q* Z: G 0 `& ]0 c: n8 q9 f# ~
6. STM8连续复位问题
3 e0 z7 j" d2 ^1 ^- F2 i( v
) c& s9 c$ Y: F7 ?( {( D/ ^7. STM32F2电压调节器REGOFF与IRROFF引脚的使用0 Y/ Z; j8 ]7 s6 t
" \6 t7 Z) v; z/ t% x+ X4 z. `
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
: i5 `7 z9 M5 [
+ D3 X+ @5 `" \9. STM32F7与STM32F4的复位序列比较
2 R$ [4 W2 H: C$ U3 y
9 X6 o' ^  k  w8 ]6 H. _/ s10. STM32F107 复位标志问题 ) b2 ~6 _$ Y% A; f8 s  X+ ?

5 F9 N) D: D) W6 C11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
. a; p% |! J) n! c' N8 x$ ?8 h1 g# W7 V; `
12. Nucleo_L053不上电也能运行
7 J$ m( T6 ]) {7 B  u* _8 ~& Z
2 L  X1 c% f7 `  e13. STM32L4中STOP2模式下的漏电流) o+ c$ h, F) b* ]+ ]& d/ a) ^
  X) ?# l( q- c
14. 在没有外置晶振时HSE_RDY异常置位
, L2 [* \" a8 F* g- S- U
# o# J7 S6 T# p: d+ }- A15. FLASH被异常改写   (2018.5更新)1 {. C% s' r+ q0 N5 \8 R

7 ]0 o1 b' ~. q: \- v16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)1 ~( j6 i' a* p9 _1 d

- D6 }3 v- e$ C1 e( \  I17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
, j5 @0 k1 ~4 p6 T- N) H% ^
' j% Z8 r0 ]8 P$ F& O" @; h3 q* T6 G三、IAP和Bootloader
4 V, z9 s7 L/ c: j2 `- Q! A- Y, k 4 S( N! f3 N, T: c
1. Boot Loader与上位机通信不稳定3 C) T6 o1 E8 n# J/ y
  x# t* p* d$ ~. e9 P
2. IAP+APP 模式下不能启动 RTOS0 c$ T4 K4 n# a8 s2 T: C1 `
4 I, i$ y1 B9 k' p8 U. G  A6 B
3. 从 IAP Loader 向 App 跳转不可靠
  R1 V) ]$ S5 S; t
6 C. A- A5 m) D9 z- H4. STM32 MCU IAP例程跳转到APP代码简要分析' F' a8 S- h1 `* e
- f, {) a% c  \4 f( a5 r
5. STM32F091从自举程序向应用程序跳转的问题与解决
/ c- S- N/ O" P  a* l* G/ S0 r: W0 [, B5 P8 ]
6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
6 e* F" b& ?/ ]' d( q  \) f" ?( e# ^  @3 j' M, M6 P' N* v) P# Z
7. STM32F0启动模式相关问题探讨
+ U; b+ {3 @2 u. s. o) q
: }+ B3 n, i: W  o8.STM32F091空片使用System Bootloader下载代码( ]* M1 O' B/ ?( ?+ n+ F! Y# k1 g/ n- n
4 i$ I  O, \# e
9.STM8L  IAP 应用程序中编程指导
* y, c- n4 Y# x- B* |
" E! ?& K" \% v. f6 ]6 M" Z10. 如何通过STM32的串口实现简易脱机编程器! Z" u$ I6 E  C) K$ n& j

1 S0 Y1 W2 n# R: t11. 一种从用户代码调用系统存储器中Bootloader 的方法  ' [" v$ x3 b4 w( ?: h" Y' s

0 e6 N& ]# s3 k4 L9 z12. 利用 USB DFU实现 IAP功能* T' ?9 V- u% S  B' z! u
% A* J" J9 T* P% Y* [" ?$ f
13. STM32 Bootloader中 DFU使用限制
; R6 a0 m' {/ X
9 p# h0 k6 ?) W4 P/ U14. STM32L011x和STM32L021x启动模式注意事项* O* V+ D5 z* a0 p* k
) p9 Z. z7 g( d0 D7 ^0 J& b
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 5 I% d. g8 L# |6 c

* L  t: o' U" h1 o, M# O: Q" F16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级
4 y2 S! l/ l5 b" @6 A3 H9 B) H. _% F2 W
17. 如何使用STM32NUCLEO 板来测试串口Bootloader) P5 h' w0 S3 j. r9 Z1 C, x
) @# E/ g  ^7 @& V- u* f, |
18. 在STM32L011上通过I2C接口实现IAP( Q5 ^& h9 q. Z& j" k

, [9 `& K! c$ J) i/ K0 n& D19. 在IAR中实现通过将程序在SRAM中调试的方法
: ^& D0 }4 b6 [9 T$ z# {: }, w( z' }+ X4 w
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题
- e' |! u5 y6 _9 p: G/ ?% N: G" |! J' ^1 S( k/ y; \) @8 Q
21. USB DFU IAP 例程移植的两个话题
; S3 [7 ~/ I7 T! l) j3 Y6 W0 D7 V+ R/ Y2 `
22. STM32F769双bank启动5 g+ c/ z( ]$ l

$ j& y  H% _1 L  N- ?23. DFU加载 工具 DfuSeCommand的使用7 C6 C! |, v3 z

" t. o# {: T% M, {  j24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
6 @) E/ P- H; p' B% V# c9 H) L! U& V# K# r
25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)8 g+ B# s8 p+ q3 `" `' |# Q

: E! Q, P3 Q/ A) |( S26.STM32 Bootloader异常复位案例(2019.4)& p2 r# s" H5 P' V9 M
: `) W9 ~4 \+ N7 y7 O% P
四、存储器
' H4 S( @7 \& o& z' I  c
- \( `5 O1 h& X+ O1. 对 Flash操作导致 USARTU接收丢数据. U6 H+ ~- D' o' t) j

/ u4 E) t6 `6 o5 C. {& W8 Q6 N2. 使用外部 SRAM 导致死机
$ p  B& L9 S* |* K2 R# r7 D ! i/ R- \9 @2 s0 g1 g5 C
3. SRAM 中的数据丢失
( G% @& u7 C% g, w  \9 c0 m6 m# V - x& q' X6 v+ F. M% o) z
4. 干扰环境下 Flash 数据丢失
$ q. C+ B9 U& O% _ 5 u+ [) o/ v- V( s* ]! W
5. 使用 CCM 导致以太网通信失败% u+ e8 p, B+ z7 i$ p3 C

7 e) P! s/ B, U, n6. STM32F429使用外扩SDRAM运行程序的方法
* v" X8 j/ M3 y* e/ e, u
  K9 \% I5 Z# p& e5 I7 P7 Z7. 使用STVP实现对STM32L1系列EEPROM预置数据
; x1 I4 T* n6 W/ Q1 B" b ) W8 S/ p# K4 A+ `
8. FreeRTOS RAM使用情况及优化方法% Q. r  E( V' V7 S4 f) m
" x2 ?# ]7 l0 a
9. 在IAR 6.5下如何将数据存放至flash中; j& c% k2 V) C6 z. u
1 F# M" p6 q. k) k8 A5 J
10. IAR下如何让程序在RAM中运行
; @6 U; z& z  V' Q" Q3 L . ~3 a3 T: L, Y2 u3 @  t& L
11. RAM上电后初始值问题8 h& n1 o0 m/ ~" G# q

6 ^& X+ G: d2 n& |8 ~12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计. R2 y' z( J3 d' H4 A
& r5 {0 s7 D1 {8 D! D% [5 |2 I
13. LwIP内存配置
: A) J& {% k7 S5 F2 |
) G5 P/ v0 ]: o* P9 O14. STM32F2高低温死机问题
, e1 Y" U2 l1 V5 D6 U( Z. a$ [4 }
& D, m% M) D. N. b. U8 x15. 使用STM32F427的CCM RAM时遇到的问题! q' B8 {" o' }4 M& z
5 w/ R! j6 E8 a$ C2 Z; U6 L- R
16. 利用QuadSPI外扩串行NOR Flash的实现  4 x  J$ [8 N5 {! a# p0 j
) Z# i- O' `3 I$ v8 W- Z
17. STM32擦除内部FLASH时间过长导致IWDG复位     + b( _8 e: Z4 l* C( a
; Z+ v  J: T' x- g& T7 @
; D3 ]' L) E/ U
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
, Y; f$ t" A# ]9 p, k: Z6 @  {
. w3 D$ ]& D7 _& |9 y$ F: s五、模拟外设. G% M) H7 a" ?

1 H* @) ?  S. ?* }1. ADC对小信号的转换结果为零. ~3 o7 U( Q$ S
# q; W8 D/ `: T: g+ z
2. ADC键盘读不准" A- J& l# n' {: v
& V1 r2 t% }& S, N& y; m
3. 扫描模式下 ADC 发生通道间串扰) ]9 c, ^; H% H# P! J1 w8 p

0 @( \' A& v7 H) H$ |4. DAC无法输出0V的问题分析解决
3 i6 I( m0 K8 d5 r, m& a
# A% @3 N& M3 {" I1 ^: a5. DAC无法输出满量程电压的分析解决
5 v4 [- U+ {4 Z
2 h/ k, X& G# [3 u% |+ V% \6. STM32F30x 的ADC 采样的傅立叶变换
' @) J+ P& t6 L' u, T9 U+ H4 i: p6 p( X' ?! j# `3 s
7. STM32 F1系列 DAC的示例详解
3 O7 }. u6 O- }7 m( t* q3 ?1 h+ Q
8. ADC 连续模式采样浮空引脚问题/ o4 ~. W! R% b" n! P
* j  H8 m. R0 Q. I$ b& k) _
9. PWM硬件间隔触发ADC
7 U* s4 ^5 F3 T/ e
2 `. P) p3 H3 n4 Z/ q; |* p10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC5 W4 q# S9 O6 y

& I: V+ \1 H% @: p; M4 l$ e( o( w  ]; {; U11. STM32L4 系列中ADC 通道配置上的区别6 w3 K- B" O9 U7 L4 i( |

" v+ x$ F1 a3 K0 }3 T# L" R' k12. STM32 ADC模拟看门狗及其应用
  b- w: r( u7 A, Q5 @1 J, H, a4 e$ n0 b% Z8 L7 S) O
13. STM32L053 comp2 比较电压无效问题 2 m  k# K2 {) g1 B  s* X; G( H- e
0 t2 Z- J9 {. b( [$ M0 e1 N0 ?
14. 运算放大器OPAMP在STM32L4上的应用
3 H$ b: U+ T, P( y, v2 I$ n4 |
( y% y' Q- p  i+ w8 K, e! ]15. STM32 OTA例程之ESP8266使用
0 i$ a) s$ [/ z- Y( f; Y/ i8 r* K# @' m# T' |* m
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)
4 C/ r( l5 P* }! ~' y- ?7 q% g- l) d0 {0 Z
六、计数外设: T$ E% s# P* P! l8 L' k
  y, n# e; o6 D) r1 m* S, @
1. Watch Dog 失效
. h% M; ], H3 R% E/ R5 `# m6 P
8 Q6 m/ J9 q. A2 W+ p1 f0 P# t2. RTC计秒不均匀% I4 P" C$ p4 d& D) u6 y6 a

- t+ ^6 L8 h4 ?' m! d0 p0 l5 P4 j3. 软件启动模式导致 IWatchDog 失效1 I1 g2 c, A( H8 @. k
+ G" X1 Y6 x0 g: _
4. STM32F030R8 定时器移植问题$ R, s  r' Z( E/ N& D  C
; p& m7 d0 d/ A4 \8 F( }
5. STM32F0使用RTC Tamper的几个注意事项
& y( f3 t" ?/ _3 u
4 s6 W  ]- l! A- C& ~0 g  ?6. STM32L053可控PWM脉冲方法之DMA8 M1 Y' c% D6 b# {* O& h5 m  [% J

* R9 u% m- o% A7. CounterMode,OCMode与OCPolarity关系
6 x8 P' @5 V; r# ~
5 h( F0 s" D! x% `7 S8. STM32L053可控PWM脉冲方法之DMA6 U: ]1 L- `/ u" T- j( O
% S; A! F' m$ R4 M  \+ P' ^) ]
9. STM32F1通用定时器示例详解—TimeBase7 e2 o) j  X  R, v& W
8 V+ I' }$ |+ o
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals4 X& q; p, u! l: R. y# I1 }

, f% n0 f( t: d" G4 R11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生; Y" E, T# S: O5 [% P9 d1 `% b' j
5 b" ^: v) Q  @1 K
12. HRTIMER的多种Fault事件联动机制$ M1 e0 E" I# L: Y: W6 y
2 t0 i+ o/ Z8 y
13. STM32通用定时器 示例详解 —One Pulse
; S( N, ~0 N7 o+ g( V9 i" Y5 G% _* S9 h" [8 e8 g) H
14. 如何用LSE校准STM32F4内部RC振荡器* m0 G. Q" K5 B* R) B
( }1 i. y3 G, E% ?& {
15. 一种使用Timer测试HSI实际值的方法" |: K. V$ E  g+ l) U( d
# O2 Y$ r9 A2 {7 C& d6 a# U
16. FreeRTOS定时器精度研究
; Y2 t+ J' z+ x$ Q! i/ ]! N2 O8 w* A
17. HRTIMER产生多相相移信号8 e/ b) x6 H1 v! e. ?& V6 h* o
% U. J+ N: c9 D- Y" e0 Y6 i2 t
18. 窗口看门狗启动时异常复位问题
0 G/ a4 Y/ \: w& J5 n4 w; |  e( ]6 E  h# i- o1 }# B/ g
19. PWM硬件间隔触发ADC
0 v: V7 w5 S0 {; V
9 H* c3 k2 S' q" o" I20. STM32F030低温下RTC不工作
" F. ~+ E4 P6 A) `
6 {, L7 _% K- H0 m21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   
4 z: j, v3 G; w2 {% r" G( o$ R5 p7 {6 R
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29). P7 U3 K4 J1 s) h

( G$ n. j; v( M1 Q+ t6 g23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
  R- U% O1 m, l& `& h+ o) K  ~
" F7 F% i7 A6 b24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
* d: x! a+ ]% ~7 e
4 O% d% Y1 k- a0 S) j0 Z4 n9 Z
25.MC SDK 5.x 中增加位置环 (2020.3.31)8 w9 w4 R/ N+ u2 H8 z7 D

; c7 T8 g! A" T  R* ?26.STM32高精度定时器PWM输出话题 (2020.4.29)
- P/ y6 e" h; O/ c0 R4 [6 y+ p0 j7 O$ D

0 k. b! }/ H6 e$ C' ?" w) M7 m27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)+ ?! I. ~# v; V$ a9 u
1 M1 }& M8 M( [7 u% V; h2 f  a
七、内核8 ~! D% p9 z, T" K" ?

& I7 \2 l% x% d0 e. q+ Q& @! ?3 g1. 使用指针函数产生Hard Faul* X: p$ J* x% {4 Z+ G# {: `4 }
0 d4 F  _/ Y! R
2. 调试器不能通过JTAG连接器件  g, A9 y, t& I! ~. Z% S

: C  c% C2 T) J5 A( x/ A; y3. 鬼魅一样的Hard Fault
) w$ }+ x/ K7 j0 ?- D3 V& ?
2 [/ \) ?( D- c" ~% @  n  A4. 进入了已屏蔽的中断[- Z3 g  s$ t# D4 ]+ O- H2 O: N
  S: Z. O) P9 Q" Y+ ]1 _7 U, }
5. 浮点 DSP 运算效率不高
) i4 e8 `' A# K7 V' S: Y0 f+ x( Y8 b3 o, J3 d- P! O. W: {2 u9 g
6. STM32上RTOS的中断管理7 c7 u9 u. ~6 J1 W' C

! r" E4 E% Z) T9 C7. STM32F7与STM32F4的复位序列比较# A2 {5 A$ w0 S- e4 _
, a" x, j+ w, O
8. STM32F30x 的ADC 采样的傅立叶变换
& [9 i; h/ ?) ^- g. \5 D# X/ T* e4 b5 B- t
9. EXTI重复配置两次导致误触发中断的问题4 \, R7 w) S2 F" I2 G, m

7 \/ r- ^+ v: n! D. W7 U10. STM32F3xx/STM32F4xx使用浮点开方指令' h! i6 p, J( J2 ?

% d8 |' E) C; v/ p- P11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响
( U7 q% Y6 Q1 P2 I  @/ X9 L
- y6 E# g# d' l: T" M8 Q  _4 W 12. STM32F7 MPU Cache浅析  
! T! K3 Q  d3 [' ?" ]9 {3 }$ W5 z3 L+ e6 B5 P) s
13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)
* j2 r0 v: m$ {* |( T: d

9 z7 {+ `! v* A, j14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
; c$ O2 ?8 c" {$ T% G2 m) Z4 t" \6 t

. q) V; P$ B1 H! V7 h% N4 T* X( ^
八、系统外设9 X* o# G/ W( }! o8 x8 B- @# @7 t

" V# _. f. `# _, m" E; k1. PCB 漏电引起 LSE 停振
2 Y( h2 V7 d9 R: S4 m
) r1 D8 |0 V8 ^: ~2. 时钟失效后CPU还会正常运行, f2 h6 ]: M3 w

) B2 v) L# P# [9 r5 z* ^% t+ Y3. STM32F2中DMA的FIFO模式$ t' z- y' a# a

* N7 c" j' \! z, q" p0 [* r4. STM32L053的GPIO翻转速度的测试
* d$ I( X0 Q, G; {8 A9 S
& a' u8 ?1 V& I9 `5. STM32F4xx PCROP应用
8 x4 b3 x% q" \  ^4 ?0 r  h8 s, k; A  i( D
6. STM32L053的GPIO翻转速度的测试/ E" ]& k0 E* }$ }8 g& A( H
- A' T% p7 _. C, l; Y
7. 如何在IAR中配置CRC参数, H* I: Y0 l  o  H4 f( y

  c% N5 ]) ]1 f5 V( j3 Y+ L+ \8. PCROP区域函数无法被调用的问题与解决
* w$ C. |1 }8 W7 [. z 7 s- }, f2 }( v6 E
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题, t/ B" o- u/ O% E
# i4 S$ B+ Q3 n: D$ B- }/ Q) C: D
10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
9 B# {2 t& H1 \
& |$ z& S/ ~* g7 I4 C11. 如何用LSE校准STM32F4内部RC振荡器
! _' j/ @5 X6 J1 S# m# x; S3 r6 B# x$ n, O+ R+ C
12. EXTI重复配置两次导致误触发中断的问题  
( K6 Y% X% d3 ^2 _, F% [
- A2 P5 C% u0 |6 G13. 时钟安全系统的应用(LES篇)  7 C+ C5 P% j5 k4 i/ a0 @
3 v* }1 S, Y- o5 h! k! w) e
14. 利用DFSDM开发PDM麦克风应用介绍  
0 q& o5 c3 G* Y1 q' o7 e
- g# W0 _; X  S8 a9 Z3 b. E8 k& S
15. STM32H7的FMC外设在DCACHE使能时运行不正常
3 J7 B+ z0 X- Q/ T: a
2 h9 W0 s/ o8 e: B& `2 ^+ L  s16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)
+ }% o$ b, A4 z' i$ }9 y# D: \) P) o3 G
2 f# V+ g' v0 `
九、标签和收发器9 U& w8 f; X9 }6 O' }1 r. X7 `
$ V* P5 p4 o  U
1. CR95HF的初始化步骤
" @* A0 j2 t) x 9 j3 v. q* O% ]- d# R# _9 o9 c
5 l, G, B% ?: P% P0 g
' [! S% f3 J6 {% Z9 {
十、生态系统3 I( ]1 Y; E! Y2 u7 F
$ T+ ~# i$ V3 d! R, D; |
1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题' g. [2 r8 K- j. c: j4 W

' p6 K) g8 f( u3 D2. MDK Logic Analyzer 功能在STM32中的实现问题
5 Y0 J3 ^1 q7 p: a& g 5 M) o9 u0 [. }& k2 D# x1 |" ^
3. 在IAR6.5下如何将数据存放至flast中
  G9 k* A6 Z6 ~9 X, u& s" g
) c  M& I" w9 P0 {4. FatSL移植笔记- A, c' y9 j  Q& q
1 Q3 A4 W5 n6 ?) [% L' ]! u
5. Keil中使用STM32F4xx硬件浮点单元/ b: U& q: _4 u# Z% j! h5 }: r
: g# N: R$ ^! F' K7 `
6. 如何生成库文件(MDK和IAR)
- W2 d8 J- ]# e- G7 C& ]4 a) s' H
. L6 R0 t( M# e% d) t7. Nand Flash文件系统解决方案
2 H8 P: ~- {3 i
6 B. A5 M" T7 E9 v& ~3 I) P; n8. STVD在调试时弹出“Cannot access configuration database”的解决& V# R& N" ^4 Z4 y+ S) y5 m

' g- j. T8 M' @* E: ]9. RTOS低功耗特性的设计原理和实现2 q: P3 v$ }, J, Q0 j5 j3 G: Q; r

$ P9 J% R  f/ o10. IAR下使用J-Trace进行指令跟踪
* M1 s& V" J' u2 E. j# ]
1 l' J0 Y" X( t2 p11. STM32上RTOS的中断管理2 V7 |: x2 A4 A8 o7 ^' L

7 l9 @2 e  q+ \6 \/ q12. IAR下如何让程序在RAM中运行
9 W, U0 r  ~1 V
0 W4 a' ]$ y7 `9 _13. 如何在IAR中配置CRC参数# C0 v3 D$ _" O3 V$ G" k. _2 |

/ H6 W% J  |) S& C) S1 ^5 u14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册
& Q% L8 W1 q" |/ ^& E1 t# I) Q, g8 W/ L8 s
15. 使用mbed进行STM32开发及STM32F0的时钟问题+ H/ E2 A6 |7 V! D

& L; v& V1 y/ k, @8 O' M16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能2 c4 m& x( Q0 }( c; F
2 l. H. P& X! S" {
17. 多任务系统中的不可重函数使用注意事项
! `5 s+ k5 M, X$ x7 I1 F& w  t/ Z# ?4 Y1 G
18. STM32 utility的hot plug功能3 o% E, e( p. h
) b1 P1 S4 W1 V' o9 g
19. 如何将CoreMark程序移植到STM32上3 X& `3 k, f( d# I- b

( j2 y6 _. ~- {# f7 _; i; Z( J' ~20. FreeRTOS定时器精度研究
2 c* I& {3 k3 y1 [/ A7 ^0 v* C" L1 e; ?$ Z/ `' N6 J: f- n
21. 如何使用Eclipse和GCC搭建STM32环境
0 G8 }- C: I) Z0 i5 e$ ?
3 D  ~. Y' q' n  R22. 如何建立一个基于GIT的STM32库
$ U# u" c$ v1 n' u! X* O2 t: O  b) c
2 t* M9 U! J' D2 g5 l23. 从零开始使用CubeMX创建以太网工程
8 ^  v; [( u( o4 A$ f! |6 p7 f
. t0 Q$ l+ U3 X' y8 t24.从STM32Cube库向标准外设库移植FatFs文件系统7 {+ `* ~6 T0 N* R( _3 }: D
" V5 @/ @; p  B# Y% _( ?& u
25. 基于 STemWin的屏幕旋转
5 M: z4 ?% @# N! V! y! s; t+ G
, [% e; ~) N% h. F5 d! Y26. 编译软件 Hex文件烧写
7 Q) w3 A) o! `) c3 L6 J3 k
0 \9 j. L4 X( z4 L, b& Q27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
8 g9 ]; k+ U9 |# ~3 Q
5 `2 w8 f. ]( m5 F$ {. y! s4 E28. USB CDC类入门培训
. Z3 e9 _: w2 R1 j
/ P# A6 \0 t; r) q, {* e% ^29. USB DFU培训
! m' a& a; I$ i3 ^1 X5 P, i( J& h' W" ^3 G( b9 S- _8 K" Y  o
30. 用于量产烧录的拼接Bin文件操作
+ t$ Q7 E% K. B! ^' K) T
) a  Q4 b4 H4 A9 x: C2 Z" c% A9 {( {  m31. STM32免费开发环境该用谁
# R0 C. r( \1 o+ y: @; x: w8 O2 j( X% K- g
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)8 _% j3 [. l8 v

. d( a/ J& f+ K8 ^6 [  {33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)6 u9 ^% D1 i+ Q/ n

  H! o0 x( t* \  r34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  
$ P& x9 f* u" B; O% V2 ~5 s5 n& M
9 U9 E" r2 Y$ s# V/ }35. STM32 FOTA 例程之 cJSON使用   
& Q% q  l8 s1 Q+ x- j
6 B$ D% ^) j, b36. STM32F769DK 云端固件升级例程使用说明
4 |) ^; T$ Q, m# i- r! P; p' T

3 ~6 I9 Y5 G9 _  g37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
0 i) C9 y3 @8 F  R- s: H9 y
5 R/ g% `; A7 B# i/ l' x3 I" p. g38. 基于 STM32 的阿里云物联网平台方案
" o- E9 ~+ P: ?  ~
: M+ ~/ d( k, c& Q  i+ O9 }39.AliOS 任务上下文切换原理分析  
6 R8 ]* D+ @0 x. s! a9 I
: D" p7 a* o+ P, q40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  ; F: ?9 r. r+ C  [* {% }
* b( k5 @- Y9 J6 K" r' D, ]
41. STM32F769DK 云端固件升级例程软件开发文档  ( g! _1 Z; r/ h6 ?' w

$ i7 }+ i! v- u9 Y% N5 }42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)
2 o# i9 \# v# D3 Y
7 ~* e8 o# y/ Y! c6 N43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19); P# @& a4 h% R; v# W

, l) L, q8 N" m9 |# P5 V9 e6 @44.零基础快速入手STM32MP1 (2019.9.19)
, A! i! f4 S3 ~# R* F1 u9 |9 F4 [/ U4 Z6 H  _# s- ~5 w1 N$ N
45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)4 m, g3 ~- Y4 P4 O, W/ g1 z! o) X
6 i+ ^; J1 {7 R# n6 [- d6 i( n
十一、调试
2 D; t0 t( L  t( u" O$ @
& f; E" }/ S" O1 ]: [+ C3 W# r1. 关于STM8S SWIM Error[30006]的分析
* D6 j" {7 I- B% C) ?& }- v; } ( h5 Z0 ?0 O, f# W
2. STVD在调试时弹出“Cannot access configuration database”的解决
  _% \5 N! V1 r' K( h: ~; U
6 S3 z' K$ U# _" O3. IAR下使用J-Trace进行指令跟踪
! l5 w* C( d5 ?. D/ J
/ w& q, y* f9 R' [, m+ }& N3 b4. 菊花链 JTAG STM32
) Z+ X- S2 B8 s1 I6 F$ @2 H3 n# B" _" C* e1 t& [
5. STM32F411CEUx 能下载程序但不能执行
5 m# q  w" K" g
1 c& O5 w4 x; P8 L, p6. STM32F103C8T6 程序上电跑飞' h; v( ?+ J& o; a% g' ~- I
! j9 K- D8 C& G1 t! Y7 d
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行/ S% y9 ^6 J( j9 F3 h8 C) z3 O, z

" Q9 u# D  a9 }8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
4 }. n) r; t/ a/ Q
4 C" `: F* s5 R5 j3 H9. SWIM协议的GPIO口模拟  ?1 \( @, ?+ I; c" B! O1 O

4 z! f" y1 W) i5 o" I0 ]$ G10. STM32F091空片使用ST-LINK烧写后复位不能运行用5 h0 L& S; s0 g: W* U8 J- s
/ a1 ~5 ~8 ]4 V  i5 d2 ?+ d& D! B& @! e, U
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)
- m, O7 c( N/ }  y3 }. p& s
2 Z1 ?) Q( }& ~! t1 _- d8 V/ k12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)# f, e) Y* A& D2 Y, I

/ x% n7 o1 C' u13. X_Cube_ClassB代码移植 (2019.12.24)0 ?6 \) h  F7 @. O1 S* j5 }
: T2 m  C' L. b4 I* p& Q

, ~0 F2 w' z, ?14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)2 @# k% z+ i4 m
' U$ a# g' H% _3 J9 ]
十二、人机调试
! N5 b7 B: g' u* ^  B. f% ~. U4 m& {$ z& {2 K, P
1. 一步步使用STemWin在STM32上开发一个简单的应用+ \3 O/ S) G0 {1 z. O. R/ V. O6 [

7 o" M& u4 D2 J7 X. c2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
- C  x/ P* C( G) U& ~) B  |/ ?6 I& o4 J3 c6 I% ^
3. GUI方案中ALPHA通道处理介绍; p( i* F; J$ p2 s. t. ?  i2 ]# F2 I
, g5 @6 K& @9 |: v: M; b! r/ o9 r7 ]4 y
4. 基于FMC8080接口8位LCD的STemWin的移植
( T4 o4 B& N" r* P# u
3 _( v9 h0 S, B9 S  {# O; A/ \5. TouchGFX中Callback模板实现原理 (2019·9·12更新)  v* @5 D% K, Q3 y" A( r
6 q, L' M' {9 I7 I( T9 U* k1 g* l
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)4 m  U/ d( @- M& l4 V& j: C+ O

" u# j" K* X" f) v/ |8 O7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
; |$ M! r& u+ b+ v6 F6 `! U6 z' h' l! C2 @
8、STM32L5中如何关闭trustzone (2020.5.12)% T6 s! L# y# e1 K  V
  j) E; H' l" j5 D) S
十三、马达* `0 ~: ^9 m& g( X
( k7 K  R9 w5 J) b" H" e3 j' {
1. 电机控制同步电角度测试说明! P# c; j" A( R4 t9 J' v+ p" S

- V5 j6 ~) p. r4 x0 r
3 N7 e$ l- R- e& |0 d4 p! z! h, y9 Y* T3 \/ h3 B$ P
十四、安全( h5 r, v& V, t$ R9 f
3 x0 s9 M7 N1 k0 _1 {/ H7 i
1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
* I# l6 W8 |( S( d/ U
3 v3 C. ]6 W) g, E5 }2 J
7 Q7 j7 N; G: Q' @9 ]十五、其他
" M- ?; K( M7 F: v& G& e( q$ t

9 i5 Q; X% j. [) k5 v1. 跳不出的 while 循环
4 S9 \8 q( q# |' }2 g0 ?6 E ) u: k1 \- M0 q/ ^# d; J" i
2. 外部IC连接NRST导致MCU内部复位信号失效的问题
+ n( \3 ^7 z9 g  N7 D ) z* A" L' a5 Y* M% O% ^6 f
3. 潮湿环境下不工作
. e! |* `9 V0 m6 |! c4 [
$ {  g% H9 b# N. j. O9 X4. PCB 漏电引起 LSE 停振2 d* a- h0 x/ t) Q9 g! W

( E" a  M, V9 b- ~6 g7 {* ^5. STM8L152 IDD电流测量6 ?7 Q! d" f4 l: M' n$ b
! a4 ~) m# I) T  S/ O( S
6. 使用STM32实现锂电池充电器1 K( J, \% k( B$ b

8 ?5 x0 k1 R) I8 k7. STM32_STM8硬件平台基本检查
- O% |9 C5 a$ _" B! I4 `. u# ?1 H8 }" @: q' ^/ T, G
8. 验证STM32F401在STOP模式下的电流- ~1 T% L% M9 M9 i

6 z4 T& ^  `( p3 X9. P-NUCLEO-IHM001 电机开发板串口调试指南
' L0 [; ?# W2 t3 y
4 ~& a# Y6 v- i' u3 h) X10. 一种计算CPU使用率的方法及其实现原理
' |3 k) }/ t( e6 ~: ~
; F! @: f) r, c11. STM32 RTC不更新原因分析
1 v; A1 g1 a8 W  H0 q2 R
1 j- I9 B" z. s" ^& |12. 关于ST库函数的代码性能对比8 ?2 c. S+ j& R4 L

* j" t/ X& c8 A' P13. 在IAR中实现通过将程序在SRAM中调试的方法% ^& j0 Q8 T3 R7 Y' `, d
7 {5 V. @% ?! @- R( n, f1 G! w* B
14. M95xxx EEPROM写保护配置
' i; f% U$ @- m  S) v, S; p) t; h/ B) Z
15. 4SRxx的GPO的属性2 c3 |: g$ N6 K% e) I& l; L

& J1 ]& l7 {& r- w% c9 K6 x16. CR95HF的初始化步骤
/ }3 B. \7 p, M$ G/ s9 e* X  |8 R3 I/ r
17. 电机控制同步电角度测试说明  0 P& O2 ]/ _) |2 s# S
  v1 Z+ g5 k0 Q& C" r' M) m2 O
18. STM32+BLE通过 Notification与 Android应用程序通信的例程8 ?- Y3 a! q1 O) j& M
0 a7 |- x3 j( N: Q' `5 l- Q7 r
19. M95xxx EEPROM介绍
- \% ?# c$ X9 `1 `* q  V9 K  K' u' f( P; x
20. STM32 DFSDM测量温度应用 2 L6 C0 A( n2 R; f+ R
% f( S6 J  h  c) D4 ^9 D
21.代码实现PCROP清除
$ Y: `  X) _% C; \# @' z- q7 Z, w0 H9 o& B( l" r, V  c
22. 理解与应用MPU的特权与用户模式
1 u" n; c+ t; J; K/ O/ ?; _2 K4 @7 ^& j' V0 {+ `
23. 用于电机控制单电阻采样PWM变形信号产生$ i: y* S: Z* {- T3 \
) t* [( x& J+ n' k1 n& @; m
24. STM32L低功耗模式唤醒时间测量
7 ?6 S$ r$ x* D: m: J# W1 z; [  A2 Y
25. X_CUBE_SPN7程序电机启动抖动问题, G) u; n/ \2 C; R+ l+ j: c
2 }& Y% _9 k7 G( {
26. 发现STM32防火墙的安全配置
% s$ d5 e7 R0 a/ U, s6 w. B0 m) A6 x/ w5 R) f) D
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
7 T5 R5 {" A" J) @9 u4 A9 f3 g/ K6 x
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)( z/ Z$ z* Z3 e# ~  n; r
5 p: S2 Q( |) J2 J
温馨提示:

- {5 ~+ p& p; j) S: d' k
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
# g  K0 |. z; |6 ^% ~& V9 Y
, v0 }9 L8 ~8 k6 S* c
( o8 N" j6 L9 d$ p$ u' o: \
% \4 v, F  }  d; ?( [  s
9 \1 w; ^" m+ [2 Y4 A& ^+ j
- ?* O  @! }& j+ |5 s

. L2 N  j# M& l% t! M
1 C* D* w9 L7 ^1 I! X
! P1 y: g- x( [- T( F) I' l
  I' W# S" s' P. k4 g$ u7 N+ E, M. \4 X2 M' y. Z% n& F! P9 N

评分

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

查看全部评分

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

举报

278个回答
michaeldeng 回答时间:2016-7-26 19:35:55
非常好的帖子,THANKS!
Paderboy 回答时间:2015-5-18 07:01:19
好详细,多谢分享
) o$ s8 C: {6 {4 U4 z; U1 L
5768340 回答时间:2018-1-13 14:42:54
HI  ) A9 Y- ]5 j/ T/ h: @: t
   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:9 l8 A2 Z3 Q2 t9 c0 n  d- i& h
   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    3 p) n+ k! h& Q
  2. 函数名称:Cdfinger_Bspspi_init
    : I1 t( f3 U- s. ]5 P- H0 u
  3. 函数作用:spi初始化函数
    0 \0 j- |0 J; o9 h3 M8 J
  4. 备注:
    / h6 I" j) O) f
  5. ******************************************/2 g/ ]6 d4 j3 Z" q9 I  {6 z
  6. void Cdfinger_Bspspi_init(void)
    1 M# e; @$ U" R* `% z
  7. {
    , D9 I- o, f  {# K0 M% S0 U# K
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    $ Q8 F/ q: ]0 e
  9.         SPI_InitTypeDef  SPI_InitStructure;  k9 }# [+ G2 A9 K) Z0 [, Q2 e1 V
  10.         DMA_InitTypeDef  DMA_InitStructure;
    : y5 G' V( B0 R' w6 g) N8 R" a
  11.         NVIC_InitTypeDef NVIC_InitStructure;% c0 r3 M, J1 M( V5 ?4 J/ I
  12.   
    $ C2 A4 ?+ T. e/ O2 M: p
  13.         int ii =0;
    2 A0 Z& C2 A# V( y6 J, x
  14.         7 p0 H0 i& N4 |8 S7 t
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    $ E: l7 o, Z* j7 x
  16.         /*!< Enable SPI2 clocks */
    0 o! O) w/ Y5 O  W' K, {
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);$ u7 O: N8 u) g3 P* e
  18.         /*!< Enable GPIO clocks */1 G; D* S. Y) K4 b$ B  p; l- l& J
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);+ h6 J% n' H: N! U: R  f. P
  20.         /*!< Connect SPI pins to AF5 */
    8 ]$ F: q6 A. U  c. ~# y, m
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);/ B5 N4 ~9 m1 q: Q6 i5 L
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);6 }9 U+ B* ^8 Q: d
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);: j+ q% A" ?1 l4 v
  24.   m; r$ [; h4 W9 |
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;) T  w$ I/ L" L8 f3 u. O
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;. q+ c3 e% k  I, H: [: n
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;% M. d% c! c$ j
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;- I# O2 }* y# h) H
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;5 Y' W/ ^. Q3 m1 L4 }& Q1 P0 v2 I3 ?
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    + ~6 f3 t5 |$ O5 q: r1 R
  31. $ z& o4 g4 {2 C; q
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    " V9 \' L$ k2 x! X' u
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;4 m% V* ?- u' w$ g1 @3 k3 J3 N
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    9 r& g0 m$ @# f1 E  K2 M, X
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    8 E* B6 [& U+ y3 p
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;1 }. J+ h8 ]' b3 |5 Z5 S( C* z( s
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);% I$ ?; Q0 k, W
  38.         Cdfinger_BspCs_HIGH();
    " ^0 F. C; I& \% G
  39.         //Cdfinger_Bspdelay_ms(1);
    " p. U$ k% B; `$ b& W/ O+ Z6 f
  40.   //Cdfinger_BspCs_LOW();
    . Q' J+ ?- z( D
  41.         SPI_Cmd(SPI2,DISABLE);9 R4 e" Q- B2 R* h7 U
  42.         SPI_DeInit(SPI2);
    % F: h" P7 w0 d/ i- I% Q
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;7 A$ j; u* A9 v1 {3 E6 \
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;% x- |6 G! a4 _1 r
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;' @" N" T8 s$ N, H# x4 r* p, t) T
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;* C, a  K& x# x9 S
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    , B. v0 c  b/ P  r5 `9 ^
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;$ u8 x9 L# a* q8 q9 Z
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;! y1 U6 h- ?: N7 {& H& M
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    9 R: H* j: \9 u
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
      @1 o2 S7 D. ?+ D9 a% ]
  52.         SPI_Init(SPI2, &SPI_InitStructure);% g1 t( \9 d* P! Y! s7 L

  53. 7 b# e- C/ }5 w* o' n, Q
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    8 k; T5 T' |# B( y5 M
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************// n( F5 Q9 @4 ^" A# D
  56.         DMA_DeInit(DMA1_Stream4);# y" g8 J) `5 {7 U9 j9 d
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    , w" c' B! ^. o# s  [  O0 X
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);  L  e8 @! M, |" p# q' G4 O( h5 }% }
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    ; z6 A: L5 C( x; p* A
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
    1 x& ^. M5 N5 }) z, o7 X
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    # o. G, c1 n) e; v, A( N( o# `
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    , u/ Y* A/ t/ b3 Q+ G
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;& t$ A2 i9 @# o) k' E
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    8 Q! Z3 k3 Z! K. o
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;& X! W  J1 c7 J) ~+ R% }
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;; g$ {+ C& H. J( E9 T. u
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    6 [5 O% K6 r  d1 l; s
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;2 J1 A- k0 B' C& w  q
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
      |. \* X; M; I
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;: K! X/ o" Z1 B3 P+ j8 v  p
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;' j$ O4 Y2 w+ q
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);
    $ D5 \/ i4 b5 c( z
  73.   ! J/ @/ L$ p5 {; g9 Y
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/
    - S2 m1 O. s1 b: l, k
  75.         DMA_DeInit(DMA1_Stream3);% J* Y) V6 K% ?0 O! H
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;* ]+ l) V8 J1 e
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);. ]0 u( ], l+ U: Y2 K- n+ A
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];" t3 |' d9 ~" c3 |8 o8 q0 ?
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
      F) K" P$ m& U4 u( t
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;
    . ]- X5 V( C9 @9 H+ z5 u
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;$ u; Q8 u. Z, _% O, L/ f3 C
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;: d  o; j$ Q* v5 ~/ ]
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;! ]- ]6 ?" O! c% H  l
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;" p4 d- ?+ ]' q: M6 ]" k5 m: ?
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;5 D& ~6 x% Y6 ?4 e; W
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;5 ~3 M- T& z5 ?
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    3 T; }0 C# ~0 @
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    * [2 Z1 k2 x' I' V" J2 k
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;+ A3 q" H: q" u- G  z2 S% I9 U' @3 |+ U
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;4 I% d$ M% {0 n. v+ A& k
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);* E: w  S, X. D( w
  92.         //Cdfinger_BspCs_HIGH();
    + U3 a$ S6 U' }( {
  93.        
    ; [/ }$ t9 v6 k. `% o9 E

  94. ( w0 v! O3 I4 L& z

  95. # u- C, q  E5 ^) N& G
  96.         //发送中断
    8 ~1 y6 M8 u7 C6 Z! g3 A0 A, u
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);* e3 R  H" D- o; x( \+ L( t, p
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    " r' J; v) L$ X, n
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    . I$ i' X/ X$ b7 {9 n  [3 u. B
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;" e& Q3 O3 i5 }) Y# C) `
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;( S5 r% S; d3 N/ t$ W" @& P
  102.         NVIC_Init(&NVIC_InitStructure);
    2 Y7 y# i$ _: Z7 Z* L4 \
  103.         ) u$ ?1 D! L* t1 T
  104.         //接收中断8 g) ^/ f" m. S# [1 w
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    ' v- w7 B3 [1 O$ W
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    ) Y8 e3 G$ [# F, q' ~9 e
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;5 P1 W5 R; R5 T. Y* `% h
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;0 K' [7 t( ?# z- {# K  S, y
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    : Z" F( p! B# V7 P
  110.         NVIC_Init(&NVIC_InitStructure);" k% y5 p0 l, I$ o5 t- L  C$ v
  111.         SPI_TIModeCmd(SPI2,ENABLE);7 W/ F5 o6 e# C4 N* q, b& p5 E  T
  112.         SPI_Cmd(SPI2, ENABLE);. w- J& _9 Z( b! \$ V' t+ g) v# P
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    ' P9 N6 u" C* M' z) |
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    ) z, D. i$ r6 \. _1 X3 a0 s

  115. - s$ X+ `& o0 s4 V2 O+ t1 s
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    * w6 _8 i  b( I) ]0 x
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    : S  L( Z! f" ?7 }5 I* k  q  }
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);8 D( g/ z1 X  w

  119. . _0 N9 L( E. N  H" X* J
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    + O' H/ p: E9 t6 Z7 K6 Q8 k& s; c7 N
  121.         {
    3 h' U; F( \/ ]2 B' U$ k/ f) p
  122.           if(ii%8==0)2 ^( i4 P( V- a, k2 ~2 j
  123.                 {
    & `* x4 j4 c6 ~' D/ Y
  124.                                 printf("\r\n");$ D2 y5 D4 X# {6 Y) f5 B, \# F! y
  125.                 }
    0 z# L3 N/ C- I  Y1 F4 x
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);# @7 c$ v* ?/ B- B3 H" r  E# c0 R
  127.         }" g# }1 }8 t, ~" B
  128.         printf("111\r\n");
    6 f+ ]& K1 I7 O* }- e" \% f
  129. }
    % I1 }2 o8 U6 z' e5 @% p8 p4 o; r
  130. ) Z, u- A$ D7 q8 h: c* z/ D, C
  131. & w- d7 T6 o4 b- Z
  132. void DMA1_Stream4_IRQHandler(void)  ^# i; ]$ B: j9 Q9 E
  133. {
    & Y" h2 r+ K. g- Q
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)0 s, s' }4 C/ k/ p6 C0 _
  135.   {2 M0 w8 X# M0 h; V* ]6 J
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    6 Q: l8 d- c4 b- \) b% Y& C
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    / e; A! c+ t5 ?
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    6 r/ e- k8 i1 ?7 }0 R7 _7 C' a
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);
    4 y' P. P5 D. g9 F; y
  140.   }& P4 x6 P7 K: ]$ s0 w
  141. }% m: U+ L5 k( m: |/ x/ s

  142. & @4 m/ `, i0 n6 \2 n8 R2 p
  143. void DMA1_Stream3_IRQHandler(void)- Y- B* T, Q) S
  144. {
      B7 K1 ~9 ^6 W# V. W) R( Q3 d3 b
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    , `! p  u) ^7 _; b" m9 {
  146.   {
    8 q, W" `/ Y+ }  i3 `* N  x
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));7 R2 J% a( a% x. {
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);
    4 a0 y$ W( B! m6 n
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    / w. h3 {# H  W; D1 ^7 T
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);* g$ F( z6 P  B( _2 u; s# u
  151.   }
    / D  g- D; E5 L/ Q& a
  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的波特率是不是必须为相同的,才能正确通信
! ]. ^/ }! R) b* b# S3 `以下是全部代码:
2 u5 R9 \+ s* V) N#include&quot;stm32F4xx.h&quot;2 N; p  k: u" z  D6 ~
void RCC_Configuration(void);
2 u# Y$ A+ s3 m# yvoid GPIO_Configuration(void);+ H8 G4 \" l2 p' o% Y: `6 h. [
void SPI_Configuration(void);
# w7 T0 i% p% l* O. a8 ~void Delay(int nCount);; [# F% _0 \# p
int main(void). U& S" l. L1 b; O$ e
{  RCC_Configuration();; q) i- b  m5 _
  GPIO_Configuration();
( m7 X: i7 Z3 n( k  SPI_Configuration();
  ^, Z7 i- `' W" @. ^" \$ a while(1)
4 j5 ]' k7 S: t2 H- V" _ { int data=0;
, h* C# h6 Y+ G8 F" ?  SPI_SendData(SPI1,0x55);
( [9 Q! c3 m. x3 Q& ^- D  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
# v! g* k- M1 d1 X+ A  data=SPI_ReceiveData(SPI2);
& ^3 L* E& g  u( H0 @; a  if(data==0x55)
" a$ C/ Z6 d& D- ^/ f/ S     {  while(1)4 ^. M) k$ Q' s* _9 W, _/ b
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);- [2 s. U$ R$ c  Y! W/ X
                Delay(0xfffff);
( \. a5 X: R6 b. H                GPIO_ResetBits(GPIOA,GPIO_Pin_4);# k# b6 t7 E5 w) o0 P4 H2 L3 b
                Delay(0xfffff);
2 F$ K9 a8 C" V4 {$ I* |     I) E+ L7 z$ Z! b$ J- o3 @
             };
5 {5 ^' V' g* i) ^     }
% ~0 H! b$ @; b; _5 @  [     else while(1)9 k  F, X# K' Q0 v$ L) i7 v+ L
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);3 {6 Z9 ?8 J9 R* Z, I- t% G
               //Delay(0xfffff);+ q1 ^* u. y' y% a# x
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);. {8 T, B7 @: Z) h2 ~) w
               //Delay(0xfffff);
; F, l/ n" }% q6 G4 a0 D  b3 c  
7 C/ i2 f0 E) ~            };
1 i# @* R3 I% T# Q  M6 u }
% W% H: c1 w- A7 n}9 d9 V0 J. E8 d) Q9 P% j3 O
void RCC_Configuration()
% N& w$ j& v" {* m3 ?5 p* X{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
' h6 C2 }% U9 Q& h: K  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
' Q1 T9 r: ^4 b: @* r( s7 J9 Z  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
  a' a# x7 }0 ~( b% r% P( `}" _1 t# Q1 G4 g9 Q( Z% f
void GPIO_Configuration()( ?9 g* I  r0 a
{  GPIO_InitTypeDef GPIO_InitStructure;
, R8 J* f  |( A0 ]+ R  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
9 Y9 U* Y* k- U1 \  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;0 M( l9 w3 E6 ?
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
( X/ q1 F& N# S# d2 ]3 b( H  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;6 o6 S+ u) A, _
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;2 B8 o9 c: c/ y3 B6 q" Y
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
. V3 Y9 s: I, z! J- |  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
/ \2 P; i9 g! Z: k, O  b3 |  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;6 P+ n! B: ?/ a( Y2 [" _7 x3 x
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;5 c6 n: n4 c" ?* b8 v* O+ Y
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;4 ?% L* q+ ^& g8 V4 u
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
6 f6 g3 x6 w  D8 {7 Q& X9 W+ O  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);% u7 o6 s3 L6 p. L& n# j8 h6 D
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;: ^4 u1 Y2 l2 R
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);2 b% l0 k9 I3 r1 X& |6 J9 m
}
) r, Y+ ?, f9 p5 U3 B) o, jvoid SPI_Configuration(): M; V7 Z$ s' y! b: H0 p3 m
{  SPI_InitTypeDef SPI_InitStructure;
! m: l' V, w( ~7 t( r& v, k  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
1 k0 r$ g3 ^3 M: ?$ }5 W+ g  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
/ W3 X0 s' X, Q0 ]/ T: \. N  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);( S  G" H8 W" Y$ X5 U9 I
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);/ b0 M$ @# d, j( k
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
* K" X6 I$ N1 p( @  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
  T# g) ~  R  p$ l- [* H  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
; Q# N$ U  P8 p7 w, S# N9 S1 _* q& D1 }  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
" x$ M( B" r, m; b7 ?( t1 ?- d' v  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;& G9 P8 k  M$ _5 J$ o3 y2 L- h" f. {: ^
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;6 ]4 t  ~6 u( X2 `0 m
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;0 I7 B. c, |8 z5 k( Z
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
( ?# {# p& D9 B/ ~: Y* y   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;; P6 W4 E' k  X! a
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
7 _& p! T4 ]7 e  u' ~6 L+ N  SPI_Init(SPI1, &amp;SPI_InitStructure);( y( o, }5 f; ~# m
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
& T5 b" o+ |6 h- L   SPI_Init(SPI2, &amp;SPI_InitStructure);
$ \' B$ o& d& k0 a$ f# t   SPI_Cmd(SPI1,ENABLE);3 w+ n0 {! Q) n) l) l
   SPI_Cmd(SPI2,ENABLE); 
* D- S3 K# t& r# e1 ]}
( O+ ^: [, c, @2 a' o4 M' t3 Yvoid Delay(int nCount)
; y' s  O2 Z+ e) v! Y{ int c1=nCount;
, N: l% z  @- O& S) v int c2=nCount;% R: ]4 n& i6 x: ?, G" ]( ]
 for(;c1&gt;0;c1--)
) Q# @  j- [$ A  t2 a  {
  o: r) @: h1 a. f8 J+ ^  for(;c2&gt;0;c2--);$ n4 D+ ~  @; q7 k3 N1 V' Y8 u1 [
 };3 S. W6 A! L, r1 l5 a
}1 v9 I+ F0 w8 y' ]4 B" t$ P* v/ {
先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:9 I( ~4 E* e* b
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信8 m* A4 f$ n3 k% \8 t/ p, M7 _
以下是全部代码:
0 \6 Z/ i6 ^% V1 S" L. X: V9 P#include&quot;stm32F4xx.h&quot;$ h( ]/ ]# {2 `
void RCC_Configuration(void);! }8 f5 F% d2 @+ W2 A
void GPIO_Configuration(void);1 C! R. |0 S8 j8 m3 v
void SPI_Configuration(void);
- O8 L: {7 c9 J, i5 e  m4 lvoid Delay(int nCount);
' ]2 S' p/ |( J/ d: Aint main(void)! f8 r; F- w% |" f  w4 a3 L- f; N* S
{  RCC_Configuration();
+ t) m: f# ^6 \! k: G  GPIO_Configuration();2 d/ o( ]! j$ b) p5 j
  SPI_Configuration();1 u* }5 T2 D: B
 while(1)
9 A6 }! I7 B# f5 z { int data=0;
. q. [3 e5 X) e5 U  {1 ^  SPI_SendData(SPI1,0x55);
! P6 V# W& C' @6 x2 n  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
) Q3 S5 U! u! ^1 c1 A5 T% \  v) s* f  data=SPI_ReceiveData(SPI2);( g1 x0 |6 V9 J! I1 c- r6 ]8 l
  if(data==0x55)
2 k$ m0 C3 G9 v$ G5 H7 P     {  while(1)9 S9 r, w# h( ^/ u; u4 k% m
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
6 Z' r1 G$ D5 P                Delay(0xfffff);1 d" T5 y$ a2 y$ ~: A( b. K; D
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);3 Z/ @$ E3 n. N/ ]" D( S
                Delay(0xfffff);
8 I- Q- i  B1 [7 z- f8 _" S   2 Q0 Q# e9 }9 o, r
             };9 f' u. y! ?. Y/ l1 r+ h1 G% D( Q
     }
, l+ d4 E* n5 T3 P$ J* F4 a" W     else while(1); _$ I3 }9 E  Y! G! e
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);8 l+ {. o" y+ J* W0 \2 a# C
               //Delay(0xfffff);
4 S4 p$ Y; E* o9 D4 z               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);# F3 S# n, \+ O8 P# a, N
               //Delay(0xfffff);
  u3 I# G2 F5 L" g: d* Y( [7 |$ T% d   / N' P! `1 M0 }5 l7 [/ m
            };1 R1 j6 V3 A& D, {1 i
 }
' ^* M& i: y5 Z5 {# I}3 K3 i( u6 O/ a0 V1 m6 ^& b( c: s" j
void RCC_Configuration()
7 W2 P. k0 l3 H- I7 s# ~( ?3 B{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
) _  w' X& d8 E5 O5 c9 s" f  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);9 N: C% `# T- C' f
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
& k& ?9 j- ~' w/ H}2 V: x# I) V$ }7 c% V( Y  u3 o8 t" G2 k
void GPIO_Configuration()
! w% i; _7 E  `{  GPIO_InitTypeDef GPIO_InitStructure;  F' t! [# R9 f9 @8 }; z9 y
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;& B2 j  U: ~& c* ~  D7 Z" h
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;5 P* Y  U& R$ e) H7 p0 I7 Y" ~
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;- h7 |4 D1 H/ Y8 [$ g1 Y
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  e2 Z4 N4 d8 J' d: B4 H6 `, C  z6 g
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;8 Y/ @. F6 V, p7 A, C
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
2 y6 b5 J/ H# t; v$ C& z  d  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;% R( b, B+ c8 V5 X! x
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;9 L' c" P2 ^1 L1 x+ t
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  n/ _! s! j" B, T3 A* \
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
! b2 b# W% E/ C; G4 Z2 M  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;; ?% U! J8 w3 p, o  x
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);$ o' K9 M* b# N+ _0 J& x" d8 j; Q; r
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
% {2 p- y2 Q- X0 Z9 F5 C  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);4 x, k$ r4 I) x6 D1 Z
}
# w  v" K0 @( @: A; Uvoid SPI_Configuration(). Y) B$ v; }5 t6 {+ L# }; C
{  SPI_InitTypeDef SPI_InitStructure;
7 w7 a6 n4 z3 Z  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
6 y% w% L- m. ^! c5 b$ d, ]  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);. f, O3 k7 @( P' z# ]3 j* S' W
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
9 K( t! h8 I: e" i, Q- ?, S   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);, e8 z$ Y2 }4 F$ V, m9 {7 N* O! s- |
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);+ _' s. _0 U7 H( `, n: I
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);) q4 r- O/ x& n* ], T5 J$ J6 e' g
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;% l% u( Z9 o5 Y/ N, ]* G) Y, a" f+ R
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;& c# I- C. b2 T9 J. j. n
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;# T% n' P. q& \& z+ t/ ]: C$ L- [( V% a
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;& j/ X! @% s6 ?( I5 Q5 B
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;* @. I7 @2 m: L# ]  C
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
, e$ V- K+ U$ ]9 m4 X. f   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
3 M2 i# Q+ S. ?* E   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
& y) {" A- U* _" x  SPI_Init(SPI1, &amp;SPI_InitStructure);+ p5 i5 |, F9 B5 A% g# @1 s* c
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;) G4 J' L) X' n1 L# b1 Y% W! R
   SPI_Init(SPI2, &amp;SPI_InitStructure);
- P4 P2 Y5 Q7 Q. b   SPI_Cmd(SPI1,ENABLE);
. X) Y9 \" O, s& @6 I   SPI_Cmd(SPI2,ENABLE); 
, p* R) Y: Y3 \, n}
; ]5 G" c# _  O1 w* b4 e& rvoid Delay(int nCount)
7 J1 E* q8 c: o! l- j$ d; S0 \{ int c1=nCount;# t' _* X6 m0 t+ Q7 ?' |& p1 ]
 int c2=nCount;
9 B% G9 ?& O+ W$ j5 n) f) G for(;c1&gt;0;c1--)
6 y9 D- ~) {* g7 J  {
5 H# M6 P1 w& }  for(;c2&gt;0;c2--);
. G8 K9 s: t" m* C$ [3 `) p$ n };
1 ~0 @3 x+ ^$ Q5 v}
  Z; b. E0 ~# c7 A9 o5 R先谢谢了~~7 w8 b& y6 l1 Y. _  j/ y% Y" i
 + V, f1 l* o4 J( p) {# J9 U. Y

5 H+ v) J( c5 `' a7 L! p6 B" B; \( P8 j楼上的问题,看我帖子给出的提示哦~
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发表:) ?* B& c( Q) d2 d- w$ t+ F
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。) L- X  s3 @1 K: v
 5 p8 r5 z  K# i% B$ H+ p1 m
% c. |2 |3 l* C; D4 F$ @- z
多谢支持!!
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 运算效率不高

  * M  g" Y. Q  N- ?% \
鬼魅一样的Hard Fault9 a/ J: Q7 Z1 H" b* {
 * o& ^+ m1 G# q. G) v% x3 R
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。
/ k3 ^! W: k- d! N2 x- [ 
4 C- e( u8 U: S4 V: X咋解决?
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 手机版