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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表5 t  C+ R% @2 Z+ |' L7 L; j
* h$ n+ E7 m- o
: G' a0 z! z  A& B
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。" c8 W; b5 F9 l2 B; _# q
; A3 [3 z4 P$ @' Y: i
提示:点击各主题,进入帖子,可下载ST工程师解答详请
4 I0 T2 D3 e& L. I( Y1 P
+ Q  e. O$ d: H8 M/ p8 t- s
0 [2 n- @  W- d6 t' g  k# @1 k( u一、通信接口
  ^; T7 [$ Q& Q: g9 f# f2 r$ S
. z- M8 d; d& e1. STM32F2x7_Ethernet(FreeRTOS)驱动更新3 K# Q( \; a4 i, p* {7 c) L
; f* v) S* V# c+ z8 l
2. SPI 接口发片选信号导致死机
) P6 D7 a! T4 u7 U
3 R: ~. _5 d+ D3. USART1不能设定600BPS的波特率/ |+ B3 A" S. R  A$ l

# _& _  {. M/ q4. I2C 接口进入 Busy 状态不能退出# e9 Y5 s9 D$ m. G7 u" j+ {$ c) c2 O

2 d# q; O0 P0 ^5. 对 Flash操作导致 USARTU接收丢数据
0 u8 X* R8 Y9 [1 b$ r6 Z
0 m  e) [* p, \( j2 ]6 ^, E4 V2 m  J6. USB接口易损坏4 f2 ]( G8 g# n) @* D
& ]: Z& B2 z, L6 h7 z8 A
7. UART发送数据丢失最后一个字节( B6 `2 \2 ?: c. T
* V; O- h- G$ {* ~1 W: T
8. 使用 CCM 导致以太网通信失败$ u( b. g7 u* R" Z, D
7 m0 ]0 t9 z/ b2 H! U
9. SPI3 接口没有信号送出/ b- j- j0 R( D! I

$ `" |2 h0 k' `+ f, T10. 时钟延展导致 I2C 通信不可靠2 N; h; M6 u, F7 O. U3 j2 |$ x) Q" w

; H: o/ h# @/ P% V7 c( u11. M0的USART波特率自动识别问题
+ U% o: e! b. h/ U2 f3 k) b
  K/ }& R. c8 ~, Z12. WK15 OTG做U盘主机兼容性提高
" G; A. D2 |( X # }' i  s( T2 |9 G6 A- R1 ^
13. 以太网电路设计注意事项
0 a4 |) w  ]; u6 e7 o& M - H9 k, n/ @1 w, f) q
14. OUG主机库在BULK传输上对NAK的处理
# L) `  C/ x$ ]/ N+ @. B. h, O8 H. \
  c. w0 ]; k; M! d( {& t$ j4 u15. 串口断帧检测
5 Y& @, U! M) V# l& D 9 P* T% b, w: N: c7 g% I' ]
16. VCP例程用于数据传输时丢失数据的处理
: u7 d+ ~+ j( e* P8 f' z6 O: r
  d5 w6 V8 F5 h) f2 z  ^17. STM8L051F3P6串口UART数据起始位判断的问题
. r  s  f1 a/ E9 \' H
& y4 `( s% p* o+ |18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号* b* T3 K4 M" n/ \/ O3 u
& y6 {0 B' K% F8 `+ ^
19. STM8中UART奇偶校验的使用方法  F4 g4 I( Z) x+ g) v# ]
6 C8 v- W' u* |, d
20. STM32以太网硬件设计——PHY5 G% x1 S: U, V

% t2 }  g( F) A21. 一个判断I2C总线通信异常原因的方法
$ h6 B" j) O; w# k4 m% s( E) K  x3 l  N+ K1 f
22. USB device库使用说明
5 d1 }) H5 g+ i. T" S' z) z# h1 U7 l  r( v& V8 E5 H. b9 J
23. STM32F103上USB的端点资源: D0 G( I1 I! {8 Y
2 h7 \' W/ g) P$ M& ]4 U
24. 使用CubeMX生成TCPEchoServer程序2 z, W0 W0 B3 Q% _3 _* k

0 W2 Z6 y6 B" D' w& ^25. SPI接收数据移位- _) Z& v; s! U; n8 t3 a
+ X. |' a7 J. _/ {* f. w) J% q, _
26. STM32F0中Guard Time的设置' `, L0 T* F  `5 y. v

9 k. W, p3 }2 E9 M, w) d+ r27. LwIP内存配置
0 f  D1 B6 s5 h# G) p
7 g4 P1 u  b+ l+ C+ W28. STM32 USB Device的简易验证方法
; V9 q9 A- t) y/ O* }* S2 a
1 v9 \; G* I4 F1 B1 R# Z4 K7 q% e29. USART 中断方式接收无响应问题的一种情况及其处理方法- _2 ~; f. V1 m0 z' m. P! B
+ o5 E2 N' q2 ^7 A; h
30. STM32 基于 Nucleo板 CAN总线的建立* _- C: {/ U  K

  b) x7 c, u7 Z) x) |31. STM8 CAN总线的IdMask模式的讲解
3 l  `$ Y! w5 I: T, ]4 P4 _8 u# L6 ?% S- |4 G* F' B5 c7 F( g
32. STM32F746ZG USB 驱动不正常
- x% ~- n. `7 T+ l% T' d0 {0 S
9 z% T: b& f- J33. MCU在STOP状态下通过UART唤醒分析   a; H) O) X* s. }( s

+ r4 h0 b' B3 s- p34. 通过STM32CubeMX生成HID双向通讯工程
3 l5 `) r) L. A0 V" N- `) g8 S$ n
35. 串口工作在DMA模式下有时接收异常
' M: S  r# x  L, f9 \) o6 S+ P6 t: R) i) |
36. STM32 Bootloader中 DFU使用限制
) Y0 _2 L" R+ c% L, X
  h2 Q, w3 ^7 W- \5 J/ C# ?; L3 N3 R37. UART异常错误分析
5 ^0 r. B9 _9 A7 [, {0 t0 }# f8 ]4 t" l) @0 [' d
38. 基于Cube库无法检测CAN2的接收中断
+ h! k: u8 Z; o; f( [
1 q, \, y) s4 ~# K39. 基于STM32F7的网络时间同步客户端实现 " P- n, t4 h3 @8 g( k

+ ?: Q  ^% p+ W7 X40. HID与音频冲突问题
  O: Y  j5 U/ j' ^, e' ~+ X2 z3 l$ f0 G& q
41. 在进行USB CDC类开发时,无法发送64整数倍的数据6 W5 S1 |5 _4 u6 r
' r: e; v* H( D- R) ^- s' L- W/ y# z
42. 从零开始使用CubeMX创建以太网工程6 S& U! ^) r3 _% l

( k# d: E9 _& `8 V43. STM32F4xxx的I2C总线挂起异常处理1 r8 F4 N3 \- K( V- a' d) t$ U

0 u) E1 H! a9 w, ]44. LPUART唤醒STOP MODE下的MCU
* v2 Z1 R5 w0 G% ^9 ]1 T$ e5 c$ B& ]+ `6 }8 d
45. STM32系列 MCU模拟双盘符 U盘的应用& `$ h6 E( N  V; v6 ?
* Y- X( s- s. V; X6 e
46. CEC输出的数据和数据长度始终不匹配
  }0 R; l- N/ c0 i; a& t+ M
, n, N* R% Q1 J. \. s  e47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析( _0 \3 @# ]& |4 p$ t

) J' g. D2 \# }  x. j# i( P48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续): u5 Y5 L$ E: J. m
9 E0 ~7 i( ?" c* p" C
49. 增加UART接口应用时的异常分析
5 v' d$ M% g/ {; I* r
5 z( {( j( ?: e3 w2 l: U( A50.UART应用异常案例分析
' @6 ^9 K. e7 w
  A4 l9 h2 H% V51. I2C配置顺序引发的异常案例
$ N/ K& _7 y: _% }+ c9 e) V( L' B. b
52. STM32 USBD VBUS GPIO8 i* r# T# c! J) {. E  b; x

) u, B/ V7 q+ J0 N9 y53. USB传输数据时出现卡顿现象2 `, T- v: w- s) L) w
1 J# X' d/ d6 k: M$ R  Q
54. STM32的高速USB信号质量测试实现! S, u* g; w6 m0 {5 ^4 n

0 z/ w1 N. |7 n5 G55. 基于STM32 I2S的音频应用开发介绍4 L- Q& ~. V! u" p; ]# T# ^
" ]7 p& L  S3 p, N# U
56. HID_CDC复合设备在WIN10的识别问题  
8 H2 O4 s$ w0 G+ b. M6 x. z& A# I" ^, R( a  ^7 \8 z
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  4 R  y( ~! n( x
4 ?9 p; h% `7 m5 F
58. 一个关于LPUART输出异常的问题分享  
( q0 T: y$ H7 k8 {. e/ v  J
! ~: [8 p2 z5 O# v% b3 y
59.通过 DfuSe 工具控制程序跳进 DFU 模式! o  m- K& m7 {3 a! t
% y4 |; i/ X9 f. F- H& [
60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)
6 P+ R1 D. @. z4 X. K$ @  B

! \4 ~* e6 k' B3 ?/ |* S( p61.一个因初始化顺序而导致异常的话题 (2019.12.24)
% u  R4 n, b# r2 Z* Q/ d0 L

0 w( s0 O0 _" ^8 T; k62.MC SDK 5.x 中增加位置环 (2020.5.29)
: o; s( x2 s6 B* X; o7 s
0 A' x3 h4 Z( C$ {, M2 a
63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)( ?8 c- K: i' P7 e' f0 z2 I
" o5 O/ ?0 R- z( Z& n# |
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
+ V6 y/ S( o7 e& A7 o# n$ h5 s/ `, b
二、电源与复位
$ D( S" H+ P( a6 E. K' a: d* {$ y
# A2 W8 z1 B% J' o/ `* l  \1. Vbat管脚上的怪现象
& l) U6 O- ^* X# ~
5 n8 y7 n4 ?' B: k/ {" |( E2. 上电缓慢导致复位不良
( v2 \6 c5 G6 q" s9 n' B0 b ; M6 o) V' H, M& g( M* @
3. 关闭电源还在运行
# _9 ?1 R( g$ L( z" u- R5 R + X) O! l* T0 L& d8 f2 L' f" h: S
4. 使用STM32 实现锂电充电器& i$ I  P3 Z. \8 a) f
5 V# Y0 H/ ^$ }  c' Z: Q% i" I' @
5. STM8L152 IDD电流测量
" g( x0 g' t& v3 P / e4 k5 u  [% `/ C' ]7 j4 j$ e
6. STM8连续复位问题
/ _$ Q0 D* g) ?# }& i) l  j4 [% d
/ ~, q* s% q* ~5 f% m7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
4 D5 n! D$ n- ~; D) z2 O! `( |- ^8 M" h7 m9 J
8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流
5 ], g" o( g: ~( @1 ~) E2 R5 r) E4 s0 o8 G) m; H$ n( O
9. STM32F7与STM32F4的复位序列比较% Q0 m/ C( V6 H8 ?5 }
* T+ v# |" Z7 Y% w$ p) q
10. STM32F107 复位标志问题
3 `, ~; [. R- d
: G/ I0 R6 M' z$ e: x5 I' G, ~" c7 V% M11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  + R2 K2 R6 s; Y5 c
) t$ R" a5 Z0 c2 r1 B
12. Nucleo_L053不上电也能运行) [- G: a1 W$ \* S1 u& t& d" L% Y" d' Z
" z. W+ `# I* v) d! F, z3 C. l
13. STM32L4中STOP2模式下的漏电流, G1 v' g" }% T0 G$ I
; `" g9 d7 C% X' s% l
14. 在没有外置晶振时HSE_RDY异常置位
  S" V% Z3 e" `! b% V) z5 S$ f2 r" Z7 ~' Z4 m( h9 w
15. FLASH被异常改写   (2018.5更新); _9 Z# M. k* d' v7 {1 @& G" f8 G
2 z7 v& z$ H' I0 h+ {' x( V
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)$ R" r6 q9 i" |8 I/ Z, O! G) Z" N
" ]# ]+ `' ]% ]/ n! E7 B2 a
17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
! D$ q+ F2 I/ R, a; l; _+ ~# t0 |5 g( b7 M2 w* |- G
三、IAP和Bootloader
& W2 |) Y% M+ Q7 A2 B- f
# s4 P; Y8 B  e. u1 e5 p' W1. Boot Loader与上位机通信不稳定6 O- U) ?4 Y1 L7 p+ W5 _! W- S) z

% Q3 [) T! m3 z# r2. IAP+APP 模式下不能启动 RTOS
5 B8 _$ v3 w4 a5 g! z ) v7 V; f, U5 P8 Y6 ?. f( `
3. 从 IAP Loader 向 App 跳转不可靠  s5 y% X# e9 [4 `! }
3 f1 Z* F# t) W7 ?# D
4. STM32 MCU IAP例程跳转到APP代码简要分析* ?/ A" _6 G; C" C1 d+ S

' h  m$ a7 M5 N% N) S5. STM32F091从自举程序向应用程序跳转的问题与解决' ?! v% k% m3 Y

) Q" }' f  V& I) q6. STM32F09x不使用BOOT脚实现System Bootloader升级代码
1 h; A( F! e% ~# \& q9 E% u8 l4 l! x* D. w8 u7 y, |
7. STM32F0启动模式相关问题探讨2 x" t4 f. C, D! m

( ~5 ]  S* |8 U0 c0 f2 X. H8.STM32F091空片使用System Bootloader下载代码4 U/ A+ Y# H' h. N% {
% ~0 L0 \6 {- `5 J
9.STM8L  IAP 应用程序中编程指导
" z( U) p; |. M" y+ Z# ? 2 _$ g* X- ~1 E" V* `. [3 G
10. 如何通过STM32的串口实现简易脱机编程器5 u7 y1 z( d! |& W' i: e# i
3 z/ l8 U5 ?" a4 c
11. 一种从用户代码调用系统存储器中Bootloader 的方法  
' K; o5 X3 f6 k4 C7 g
7 h" m2 n. d$ \1 X; Q# {( V12. 利用 USB DFU实现 IAP功能: ]& B4 c1 O+ ^0 R% ~/ `; F+ N6 u, R
- B& r- C! g5 V" ~5 C! Y! Q. E# I2 Z
13. STM32 Bootloader中 DFU使用限制
* v4 ?+ Z* n- W  ?* P5 `9 }9 v+ C6 n
14. STM32L011x和STM32L021x启动模式注意事项
- ~8 ^4 A5 N: ?1 U. W" a0 O: ~8 U" t" S2 `: M" v" ~
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 * l" h. ~' K5 B+ x- @6 N
+ p  D4 h; \" x# A8 p) |1 A' y  @
16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 4 s' ]0 G/ w- e& C6 C6 j' \, A
6 m1 M* k% P& f: E! o8 ^
17. 如何使用STM32NUCLEO 板来测试串口Bootloader9 U+ G0 X# z' f7 W7 T" G0 a2 c

1 y' _& d- |- F. Y# P18. 在STM32L011上通过I2C接口实现IAP$ n) x  z0 ]3 p7 a; J! s3 R
) [8 i# w# Y  Q. V% t8 i/ v3 `( z
19. 在IAR中实现通过将程序在SRAM中调试的方法
  B9 p" n8 I3 Z6 h2 M; E* \0 C7 K% m: o, p6 u( @5 {& N
20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题( ~! ^/ o2 T* Q3 m* K1 m! u

+ V. M) g3 |* i21. USB DFU IAP 例程移植的两个话题
$ Z2 m' Z  f; D9 _! @, ?6 ]7 }5 u7 h
/ N/ ~# s2 ]3 B) Z" @1 ~22. STM32F769双bank启动" p. t6 {) ^* P$ Q8 `6 N
1 N$ [+ p5 l2 j0 I, G
23. DFU加载 工具 DfuSeCommand的使用
7 A8 T1 K. {* l  I, L5 V8 q
% E' o2 S% |0 J$ N24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码   
& @; _+ ]1 t9 Z; S3 M0 }& G
1 H" n, v. S4 |25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)( T; Q- }, d" [; w6 ~1 e% E

+ H" O1 p0 W, }$ r3 T& m26.STM32 Bootloader异常复位案例(2019.4); u4 y: @6 g) {; Y, N5 M
5 P. e2 M4 T0 [5 V1 r" s: D% ?
四、存储器1 D& k. _( I7 s$ ]2 E
, T2 l& T9 z8 p! G1 c
1. 对 Flash操作导致 USARTU接收丢数据
/ X+ Y- ?% _9 h, b! J8 M
% |7 b# z/ Y& @$ h0 E4 C/ u( E2. 使用外部 SRAM 导致死机# F9 E& B1 E# ]9 ?
/ d0 {9 v; U& `# l" ^
3. SRAM 中的数据丢失8 S4 P/ l# W2 I5 {" X) {  o* L9 Q
8 H" F5 E+ L# Y% A
4. 干扰环境下 Flash 数据丢失$ @* W7 \. n' N. A, G- w

" s2 X2 t* w" Z! P9 d5. 使用 CCM 导致以太网通信失败
$ f7 f1 l! q6 l# r. ~: |9 n! r & R. ?$ w- R0 _& ?
6. STM32F429使用外扩SDRAM运行程序的方法- g8 C! ~/ O! R6 |4 w, t
( F% H# [; i( W' u. g4 Y& V% ]
7. 使用STVP实现对STM32L1系列EEPROM预置数据! }; D& ?" }1 [9 Z/ h2 i+ Q

+ f+ U/ ]( Y6 U0 l* Q0 _8. FreeRTOS RAM使用情况及优化方法
1 u! p) T- L6 c7 G% d+ j% D
. s2 Q. O, y; R5 t& _& c+ `9. 在IAR 6.5下如何将数据存放至flash中2 b# O3 Z! i6 O5 v+ U
3 T/ y& S* R& h' ?7 G
10. IAR下如何让程序在RAM中运行
4 E& D9 F8 l' f. {: [3 j2 g
% L. l8 c+ Q$ q0 z11. RAM上电后初始值问题; ~  P; s0 q: [: j% H

/ r# W: x+ x+ ]12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
- K% p2 p" l. q; P& f5 s# i9 C: S! f! e% o4 x7 Z
13. LwIP内存配置
1 y2 o, [5 g1 K$ O2 b
6 s4 w* k( C2 }! c14. STM32F2高低温死机问题, j6 q* N+ d4 r1 ?- C3 k$ w$ B

  t* T* I% p  r15. 使用STM32F427的CCM RAM时遇到的问题6 Q- ?2 G  g& _5 l8 w5 ^
  ]" y6 K& Z* S+ F
16. 利用QuadSPI外扩串行NOR Flash的实现  ( Z% G6 T7 Z' [4 @( f! g

0 l# C, X4 w0 D3 I- o7 ?17. STM32擦除内部FLASH时间过长导致IWDG复位     9 g2 }) c5 i- [

# t0 n" y) Y: i7 `
; {' c# [5 B2 `* C+ O  D
18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)1 l& D* r3 y' m' z, @; p5 l; V

; [7 V8 B+ c3 ?! [7 \# t( e8 Y五、模拟外设2 X- ^) p) V0 x* p9 M  Y% S$ y

9 M2 \' r( F8 [# G1. ADC对小信号的转换结果为零4 R8 }5 ~) M8 o# N$ i

( o3 m: @0 o( p- ]4 w2. ADC键盘读不准) W2 A4 C; O5 G2 f6 u) u

) A6 F) x& [; _4 g4 T4 o! f* \3. 扫描模式下 ADC 发生通道间串扰
+ y5 A- D$ b0 R1 Z/ Z8 j+ K# o   Y  R0 G& a2 l( |
4. DAC无法输出0V的问题分析解决
6 S. K1 L3 N7 ^& ^# @1 c; D ( c; w, j3 ?3 [, @
5. DAC无法输出满量程电压的分析解决
; Y8 T6 |8 p$ i9 H
' b, ]( A& O5 m: w& C1 M0 Y6. STM32F30x 的ADC 采样的傅立叶变换
* o4 _" ]' w" |/ x# z- ]' Q6 l7 I: c/ ]
7. STM32 F1系列 DAC的示例详解, f5 w* J; B2 `/ G
$ o$ e# ^/ |! z+ }1 V
8. ADC 连续模式采样浮空引脚问题
3 Q. `; Z+ l% g: M  x1 P# w2 P) K2 W& v/ r6 Y
9. PWM硬件间隔触发ADC 6 K1 e; q& K  B/ a, Z0 S0 p
' y! a5 b& }; R# g/ w
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
& ?3 S) |4 V3 \9 n5 u
. l: |( |+ e4 y' B& v6 Y11. STM32L4 系列中ADC 通道配置上的区别! |! p  m4 g' r& m7 ^( w3 _4 D
/ a6 R% T( A0 y# G
12. STM32 ADC模拟看门狗及其应用
! k" ]* H9 @/ s& x, D
( A5 T" c( s* n8 r# \13. STM32L053 comp2 比较电压无效问题 ) q# S' W; `, _
4 R) r" v2 A7 l" _" A
14. 运算放大器OPAMP在STM32L4上的应用* ^& g- {% [9 `. |, f4 d' X; Z) }

  K2 [( c, _* v! q& L15. STM32 OTA例程之ESP8266使用 # I. a8 b& [# q3 W) G( \3 p
  L7 y- K: w0 h1 I- h
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)
" U! N- H) y# c. v$ _' Y4 h! X
6 T1 ~/ W) e% Y1 m六、计数外设
/ N+ O6 r! \6 L3 q' u
& K1 W7 |+ s: V* ]/ g  e1. Watch Dog 失效
6 H0 d$ B& Y  ]+ z* ~9 J7 A- K
# m4 ]8 U* n3 M  u* J! b$ X2. RTC计秒不均匀
  E2 O/ U. ^% r( r
8 \- l4 c3 W& c* @$ k1 ^* Y  |3. 软件启动模式导致 IWatchDog 失效$ n1 H8 [9 J  a
1 t: E0 ^- Y' l& K/ W. U8 R* R
4. STM32F030R8 定时器移植问题
1 c7 m% V) o4 S" b, z: a9 K$ A9 z0 ]) I
5. STM32F0使用RTC Tamper的几个注意事项$ K5 z6 @8 g! y5 ^; T

  ?) t, X% d) `& i5 H( X6. STM32L053可控PWM脉冲方法之DMA
- G8 c# d7 F! f: M- a8 P( n
) {# o* v% V: }+ k4 U( U0 z7. CounterMode,OCMode与OCPolarity关系; U+ t0 G; k5 x4 W2 E5 ^
* c+ R! E, j3 h6 B2 q
8. STM32L053可控PWM脉冲方法之DMA$ ]! s) f9 f" q. J

/ h5 U. L2 E% j6 T( J9. STM32F1通用定时器示例详解—TimeBase
# t% D: M3 F6 G+ Q$ }2 O0 E& Q! B2 [) g! k
10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals* V) ?. n+ H6 y" U9 ^
1 [& I8 f" b7 r8 x9 R1 z
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生, L! @/ R) H9 Q1 o8 a' }
5 J" M8 W2 s+ t" [( {% r5 W
12. HRTIMER的多种Fault事件联动机制  p, Y- \( P% j
" ~. w  W6 C7 f* N, l1 L/ {: C
13. STM32通用定时器 示例详解 —One Pulse& L! `( t& Y! @7 }4 n+ z

& a; p. h3 }0 ]14. 如何用LSE校准STM32F4内部RC振荡器
9 ~& w, T# v) F! x0 g* J9 T& ~' Z- r; D3 M! m9 i
15. 一种使用Timer测试HSI实际值的方法$ }( g' g2 |  u# R  Z
7 C! X  g- |9 B  c8 [
16. FreeRTOS定时器精度研究2 X; K" w$ Q8 I- @( y  \
( \9 N5 c7 S+ B) {( o) b
17. HRTIMER产生多相相移信号* d/ v4 w& L2 N+ R

7 a) h3 b, }$ s; |( s18. 窗口看门狗启动时异常复位问题) X& p/ T2 S# J' ~" t8 ?1 M( h

9 |- i% w* j9 }% s/ l: P6 c19. PWM硬件间隔触发ADC$ J5 V2 O) G9 D7 w. T& x7 w2 b6 @
) T5 l& l! j% n: K  v+ ~' ?1 n6 C5 k
20. STM32F030低温下RTC不工作
( I% P" {* k7 W. G/ x8 q2 U8 R$ s$ A6 C
21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   " H) X. c$ p" R( k$ b$ M6 y. U
% ?. R  C8 C/ e1 e
22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
: T& ^) o8 e& b+ T) r- x7 V4 y1 f) k7 J5 a" e
23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
9 i7 A6 m/ D4 m1 ^$ @
9 R8 d+ d, C. f$ \24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
3 ?! {3 a! a, o

8 @6 y4 E$ O5 r  Y; {' q. Q25.MC SDK 5.x 中增加位置环 (2020.3.31)' M& n1 K9 k  Z9 a$ M
, ?. O: ?6 y! |9 v+ [( l+ S& Z
26.STM32高精度定时器PWM输出话题 (2020.4.29)
' Y# n# V( n- n+ @4 r: T' P  o" ?8 E9 d, V: V

  I/ R) a- ]* P. h5 E* U4 e5 _27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)# D$ U3 [# g3 m
2 G9 M( w0 g3 `/ Y& g) b
七、内核
9 e- D0 g+ D" J; O- U, C
3 o: D: I! D2 f/ g2 F- `& A5 b1. 使用指针函数产生Hard Faul
: V3 b5 |  i; s8 \. N- O * g0 a# X  W+ |% x6 D* k" S7 c- r
2. 调试器不能通过JTAG连接器件
1 W( j. n- |$ z. o# A
$ ^' a; t5 }* Z  T2 W$ W, X/ S3. 鬼魅一样的Hard Fault
, _7 ]8 k; f/ F( f2 l3 L7 x7 {/ x ) Q) r* F7 T2 r( V) O: T# S* c2 \
4. 进入了已屏蔽的中断[, h6 L# `' r* v

, s$ n" Z: a$ G' [! ?5. 浮点 DSP 运算效率不高. t& |2 G7 o" b+ \. L& j
8 P2 [8 Y# n$ \0 ^9 q& l9 G. e: I
6. STM32上RTOS的中断管理4 J: k/ A) \. C; j' |) B7 A

5 _( j3 e5 [) p! g7. STM32F7与STM32F4的复位序列比较" g# q% p- @$ n7 }* v% w

6 o9 u8 J8 f0 n2 {9 b+ t; p' \8. STM32F30x 的ADC 采样的傅立叶变换
$ B) n& E: q5 \% j( f" d
5 p7 g8 L: o7 P' S$ L9. EXTI重复配置两次导致误触发中断的问题
. Y1 D" _( m" @/ H( Q- @$ P
  o. B, W2 {" |) m& y8 I$ J/ U* v10. STM32F3xx/STM32F4xx使用浮点开方指令
# U( D* }; n, P) y* p" \5 V
+ Y! r4 J, E# Z- t3 k* @" @0 }11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响
3 i8 U  X1 W* n- x7 R3 A6 z" I' C2 Z/ E
12. STM32F7 MPU Cache浅析  ( E3 `* h' |: p8 a2 ^) A

" K0 ^$ D3 r' w$ A- S# k! L" D13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)6 n, E7 s' @. N6 o# H
/ |" I9 {$ A- ^; G" x
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)$ E  G' T  N  h, B' f

3 U9 ~$ e& v" ^$ ]( N+ ^. N
6 ~# K8 }7 ~  H" V. M* k八、系统外设
" U# L4 h6 }2 Y
' r  u* G( r4 E% L' `1. PCB 漏电引起 LSE 停振0 I8 r9 M0 q, f; X& b$ {$ Z1 K5 l4 M9 l* S
& {( B3 \: o; S; v, z
2. 时钟失效后CPU还会正常运行4 M4 R2 @3 N% O8 {
  X! z& C0 X- v& r, r
3. STM32F2中DMA的FIFO模式
; s. q* p8 R. f# `
5 M0 O$ e1 W# y4. STM32L053的GPIO翻转速度的测试5 Y- j4 u% K( G' p# F8 F' [3 |$ H6 a# o

: q5 y7 J; i# x5. STM32F4xx PCROP应用
8 k/ ]" R! m6 c8 n& c
' \  U4 D% G/ P6. STM32L053的GPIO翻转速度的测试: j, ~! S3 e  A7 w, I1 P
# ^! ^% ^& N: v0 {
7. 如何在IAR中配置CRC参数
* i: ?, E" @5 r# Y& |% K0 \4 v* E2 n" G4 `8 k
8. PCROP区域函数无法被调用的问题与解决
5 L* a: Z/ t: |! e6 l $ G  j& d$ n+ B4 ~# H: X; e/ s+ i
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题2 K. O4 s, G$ q3 M$ r2 M) F

( [- s+ _+ Y" Y* w- J10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
( y6 |* n2 R" g( S" Y; i, t
7 _5 A' ~% T: D, m0 U6 _. X11. 如何用LSE校准STM32F4内部RC振荡器6 e) D7 F9 T" W0 q! a( s

, B5 |8 ~2 j6 w# L' L  P12. EXTI重复配置两次导致误触发中断的问题  4 Y2 f0 M4 L* l* F6 Y0 @& F6 V
& u  Q7 v; e! B
13. 时钟安全系统的应用(LES篇)  + h7 B* r: N( d4 P, b! _* m% i

3 s% q/ h- v1 r; o6 o5 x, ^, @, k& Z
14. 利用DFSDM开发PDM麦克风应用介绍  
0 ?$ d! Z: h( r$ D( d

+ B( A, i3 q7 d$ ]0 H6 ?15. STM32H7的FMC外设在DCACHE使能时运行不正常 & g9 W% [! F! {8 T6 j
5 Y1 F- F; X" ^1 ]: ]
16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新)$ L, R/ E: I+ \5 {! Q8 F" A# T
+ E" J  D0 ~" x" M/ j" ^

- c# m1 f. c* T6 h( R* t. Y* {九、标签和收发器$ @! U- a: C3 G$ K3 t
* r8 K+ X# z9 c, i$ t7 m1 s# I
1. CR95HF的初始化步骤$ x9 @  V/ ~# g, h7 D
' C/ Z% M$ d; O' X
% J6 u3 j/ c4 d# f
4 ~+ q6 F$ Y/ j+ H
十、生态系统4 H7 @2 f4 X6 d

& f) \6 Y, j- F( ^1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
0 F0 {2 ?+ K( t: z & W! J" [" n5 L/ T/ L
2. MDK Logic Analyzer 功能在STM32中的实现问题" _$ |6 W" h( r

9 C+ Q! K7 n  m5 B% j, F3. 在IAR6.5下如何将数据存放至flast中$ B8 ], V# B. a3 V- d
( {4 M. V+ L0 O  l% o' K! R  b9 d
4. FatSL移植笔记
" \6 q) y' f8 n( a( Z, E# h$ c  A1 w : t1 {% z# O0 ]5 D, K6 T: e, j
5. Keil中使用STM32F4xx硬件浮点单元
, q, y8 t7 g2 o/ @ ) u3 i( y" {4 l
6. 如何生成库文件(MDK和IAR). [4 C: Y1 `% X: Y# g  n

1 ]/ w" Q. |9 b% h, Z* ^& R7. Nand Flash文件系统解决方案$ |' t7 H3 y! E& y# d

% \' P/ c' W, n# i( [$ r# m8. STVD在调试时弹出“Cannot access configuration database”的解决0 E) |' R: A. F* c$ `, V; y% B+ J, c
+ {* O8 d/ m# H' h! w
9. RTOS低功耗特性的设计原理和实现& Z: d! f' F  t6 X  o* y- b2 h
2 A% N% H. l& s) d
10. IAR下使用J-Trace进行指令跟踪; Y! S$ p2 N/ O1 d

% ~, G% G% _9 H" o2 N2 {( V5 o11. STM32上RTOS的中断管理0 X) L6 b0 C; r! \8 \% _
; \! x/ @; S- e. u. c7 ^1 E
12. IAR下如何让程序在RAM中运行, _& |% X1 T( l' r* L
- }, I3 h7 D. t! e
13. 如何在IAR中配置CRC参数4 k' ]1 R7 P9 p4 X" G7 N( c5 n
. t, W% ~" `6 c8 i! I) V' J. X
14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册& ]# j6 L" N0 H. @
5 H* S, \) `% K# ?1 A, m! S+ ^
15. 使用mbed进行STM32开发及STM32F0的时钟问题" a) I" }. L/ h
9 v) `. ^$ D+ B/ k: `' ^$ |
16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能( N# W" |1 f3 G3 L! X2 m% ^2 X
0 g1 M" M2 w7 _, j/ b2 R5 s
17. 多任务系统中的不可重函数使用注意事项8 Z5 [) X  A8 D, D6 u3 a1 ]$ c8 n

& X+ a4 Z8 [9 H: e) _. O" D18. STM32 utility的hot plug功能
( R/ |) K- W: _  [3 E4 U' J0 ]5 p
3 l! \( C$ L  _5 l' Z, n19. 如何将CoreMark程序移植到STM32上
$ U5 p) n5 f" ?/ X4 t( H" Y$ F
% d2 ?  m& [. ]8 c* C20. FreeRTOS定时器精度研究9 O' D- A: [$ o; l; O

! x- |* _2 u1 ^' b3 P2 t" j+ s21. 如何使用Eclipse和GCC搭建STM32环境
1 O0 r3 j+ n, J, ?* K" E$ G' M, z% z3 Q' [  k; N/ b
22. 如何建立一个基于GIT的STM32库1 _: W- ?( b6 z! ^) H* O

2 i- l2 s6 \' G8 W+ b; h23. 从零开始使用CubeMX创建以太网工程2 ]# j: o% M+ h2 D" }
7 o# j6 b9 F' w# l" r( T3 ?
24.从STM32Cube库向标准外设库移植FatFs文件系统
* ]5 g- ~1 Q; [* q6 V
; X* ~) ]1 }! n5 X25. 基于 STemWin的屏幕旋转- P/ r) e! J- A, u& X+ ]

( X" ~: P1 k4 a1 o3 z26. 编译软件 Hex文件烧写 3 B5 e1 N' q5 x6 [! ?, ~
' X2 I. y0 f, S% U, Z, K, Z
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台
& G3 D' Z* T, j! c5 D/ @0 x" j( U4 p+ @
28. USB CDC类入门培训
+ ~5 N: i" S$ c7 j9 ~- V7 W
% {- Z$ c- q% e8 D# c; q29. USB DFU培训
& R& `% d; r; P8 M. G3 h& L5 J0 a! x0 }$ n1 {  ]2 {
30. 用于量产烧录的拼接Bin文件操作' Z3 y# P/ v; x: J" L
" Y1 M1 x# z" R8 v( E5 a3 Q$ q! ~, L
31. STM32免费开发环境该用谁
3 L9 {$ f- e: R0 q3 Z9 ^9 s/ v! [; Q$ O# j4 J
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)
7 H  x1 L. K. [% ~
' G, V# E* C2 a( U33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新); P+ X" f& w% M1 |% q$ \! v

) e7 a+ `" e$ A% ]+ b5 t34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  " ^4 I8 {; `6 B, g- a1 U5 ~

5 K9 z( R* U/ @35. STM32 FOTA 例程之 cJSON使用   
$ H) h. b, P8 ]2 U- ~' O
1 l' X9 C) L* |0 t1 C36. STM32F769DK 云端固件升级例程使用说明
+ a# m% V7 C' R8 l

. \( E" x* ?4 o4 A37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
  n& A1 b0 F. N0 Y' Q4 t' p! b+ a% F/ v; \
38. 基于 STM32 的阿里云物联网平台方案 + X& U* @+ G3 Q3 n. P7 E, @% {# p! V
( L# {% L$ ]; L, b3 d8 f# l! [$ x
39.AliOS 任务上下文切换原理分析  
4 G( B, g& X% p
/ ~4 G" V, c; o1 b3 ?9 Y4 r2 S40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  
& H0 F1 s1 ]9 L( x+ ~; ^3 W, }! E  X. u. ~$ H, D9 b
41. STM32F769DK 云端固件升级例程软件开发文档  
& u7 v5 o5 v! M9 n1 A
3 _6 y; M# L' a' K1 U3 D
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新)) y( t1 G9 K6 j: h; f* \" j

* a1 k0 O* e, O7 k; a9 k' {! Q- Z43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19); J, C( f( {4 ?# s- N+ B5 Z
% U- r& m$ g" v5 ?: Q; q# l( |5 b
44.零基础快速入手STM32MP1 (2019.9.19)
0 ~$ n5 ^- b1 Z1 b% w
9 b0 u9 g* {/ Q! i3 b) E8 p4 w+ T45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)
: \( Y7 G% ], i9 ~: A$ t' D! ^4 E% I8 i! t! w4 G) _4 z( h! ]
十一、调试5 {& ?1 }) E# d$ n

% S2 Y; b. Q& z- ^1. 关于STM8S SWIM Error[30006]的分析# W" `* g8 b4 C) g9 e, n
" I; U$ o- Z0 q9 p7 l  A* v
2. STVD在调试时弹出“Cannot access configuration database”的解决
' P9 J: }' @: o& _# \
# F  |7 P4 y( I) {3. IAR下使用J-Trace进行指令跟踪
; L+ l& O9 U- F/ l, `4 g
1 E8 o2 Q  U! @9 z  u: p  ~4. 菊花链 JTAG STM32
7 l* T( d+ ?5 C  z" p' e* j( d, q( o: K' Y
5. STM32F411CEUx 能下载程序但不能执行
% r  Y- U$ M4 X0 D0 D& D0 W" _) q# k# w, h
6. STM32F103C8T6 程序上电跑飞" ?, L+ I& P; X
& E/ C  I" B& J  \
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行* p) c+ E6 X: _* f  S

! Z* E  X& |* E! z1 R& X8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
& h  H: b4 d& x8 {7 e( t5 m2 I% m7 _8 j: S) V4 i7 q9 |3 J3 Z  |
9. SWIM协议的GPIO口模拟; r, J/ N) Z" x, _, `0 y- Z

1 g. S* b7 s- k10. STM32F091空片使用ST-LINK烧写后复位不能运行用
5 g* m* I$ S: e& W: {" o# H2 m7 Q0 Y4 g% C
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)3 A  i7 c7 R: v( B0 T7 H! q
$ P+ [) @* ?4 v; @1 A  Y9 Q
12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)$ U3 Q9 v- y: G7 ]  G8 u

( N5 e$ [- C4 R: [13. X_Cube_ClassB代码移植 (2019.12.24)
& m/ a0 w/ x' _* d0 W1 G6 i1 r, O- L8 E; C2 Q3 ~0 q- W. f4 ]+ d

# }  C0 }5 T  {( }2 L) n14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
, I6 z6 _3 d9 Z, |7 h. N. `9 e* Q  E& f' Q; H1 |
十二、人机调试
6 K) Y& q# ?4 O% r5 l( n- g8 X9 q# V' G0 T
1. 一步步使用STemWin在STM32上开发一个简单的应用) y* O, p  j9 T6 L" S

7 y" z! k8 i7 \. F! d3 x2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计
& y3 G2 Y- |2 k# R7 n  B6 t) a( A
3. GUI方案中ALPHA通道处理介绍. Q: m0 l6 Y$ \

0 o+ b. C) b. ?' z6 e8 S3 W1 L4. 基于FMC8080接口8位LCD的STemWin的移植
& A2 J9 u6 j5 \6 T3 T5 `5 Q% |8 G/ b0 j* `3 |! C# C
5. TouchGFX中Callback模板实现原理 (2019·9·12更新)6 m$ s( }, X3 Y, {4 c
: t' m4 I3 u5 L+ `& b+ Z
6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)' H* @' r4 o9 N* v! l9 ]4 B5 \

4 F+ g5 \0 w9 z' S7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)
' K% l( H3 U$ L, w+ f$ j3 M# M( l4 \5 E: S2 b3 P
8、STM32L5中如何关闭trustzone (2020.5.12)6 c2 n7 g& k% E0 A  H  s. w* b
. I6 g5 r: ?- v7 F) r# Y
十三、马达) V3 U$ j, ^; \0 t9 D0 k

, [/ D; o8 [: M: T( C; S0 h7 F
1. 电机控制同步电角度测试说明8 n3 n7 W& M5 R2 u

0 P$ a) I' J' f) u7 {+ Z: K7 g: t- J; I3 r+ E) Z

5 u( U7 w' N2 ^十四、安全) u; a  t1 \- t( N6 i# Z; H

& U. D9 X- }' }: a, \% ^; l1. 一步一步使用STM32安全启动与固件更新(2018.3更新)# A( _: X8 q4 n& N( B$ t- I2 V
3 a# X& v. x7 O8 y. ^
( e4 G( Q, o8 ^/ p5 I
十五、其他! N9 @: j2 q. ^8 e" x" T+ h
, A7 V8 i' q: I
1. 跳不出的 while 循环
" y; z4 u- Z: a5 b" O% D 1 p: J1 [( X& S9 l; v
2. 外部IC连接NRST导致MCU内部复位信号失效的问题
9 t1 D2 k8 R: S
2 g6 Q4 Y; G. }3. 潮湿环境下不工作9 N6 N1 @% P8 _' W* I1 {
1 b; q5 d) b/ X
4. PCB 漏电引起 LSE 停振
! [6 A5 a* {( Z7 D6 y" @ ' I7 `, u$ g4 B% A
5. STM8L152 IDD电流测量
, B( S) t% r3 |8 O, Y . K, M" O5 b  o% Q/ Z
6. 使用STM32实现锂电池充电器
1 O! o* E; U7 I+ ? ' C7 s5 W+ T  D+ X6 ?+ @
7. STM32_STM8硬件平台基本检查9 u+ P6 H& C8 m$ d6 x4 h% g( b; ]

0 W9 |1 Q4 \" e% K  i8. 验证STM32F401在STOP模式下的电流
. J) P% A" W5 I' Y& m
3 O" t" [$ ^( T* y; e3 A; w9. P-NUCLEO-IHM001 电机开发板串口调试指南
" l4 Z! n: v: S, _, l' h: J ; v! F% {% d5 L; f; n- h! E2 [
10. 一种计算CPU使用率的方法及其实现原理
, T4 _% c# e) k0 b0 I: |6 N9 t7 Z! E* [
11. STM32 RTC不更新原因分析7 P/ b; Y8 r1 C! j0 }) y

1 B. x' m: J! \% \: s12. 关于ST库函数的代码性能对比
/ Q; Y0 M0 e2 j5 Y% j
- s6 `1 v/ I; o, @/ s13. 在IAR中实现通过将程序在SRAM中调试的方法3 s' O9 [* n6 x

# k  X7 X" t) c- C7 o3 r3 D14. M95xxx EEPROM写保护配置1 T( O# X- y* N6 n; |2 Z5 D

; Y9 j- I: E- G  O15. 4SRxx的GPO的属性, E0 R0 _# z1 M3 W
9 [+ C1 U) Y! a: q2 m
16. CR95HF的初始化步骤 0 y+ c$ i  K# r9 ~' L5 x- q
* T* R# `4 G' I+ W) e# g5 `9 f) r
17. 电机控制同步电角度测试说明  
, I( b& `4 G- X# M  k3 K' r- `0 t: t$ j/ ?- r# W
18. STM32+BLE通过 Notification与 Android应用程序通信的例程
. f9 {" o+ A  R" W5 e; z2 p
" N* h, ?# p3 T' {19. M95xxx EEPROM介绍
: }# U6 r# e' V
! P' ~9 p" R0 h20. STM32 DFSDM测量温度应用 1 D: d& {( [2 c! Q) s: V

7 d/ g& M' p& X( E5 g21.代码实现PCROP清除
+ b$ ?, S6 F9 j0 o& w4 w+ w9 ]1 l2 _$ n+ ~" z: ~  X% w
22. 理解与应用MPU的特权与用户模式
, ?4 u/ ]6 e4 b; G' O3 ]& @
. J/ X! j. o. \* `: X& u7 G) _23. 用于电机控制单电阻采样PWM变形信号产生( Y' ^0 C3 N, u4 Q3 |% i  @- ^
- y1 M. m  ^  P0 Y- }* p; {; x
24. STM32L低功耗模式唤醒时间测量3 B  n6 l; z9 P! }
3 Y6 {2 I, r; s9 R
25. X_CUBE_SPN7程序电机启动抖动问题% v" j% B5 ?5 D& \4 c) z' \" f$ M* w

* o4 V4 w( O+ i/ g8 J26. 发现STM32防火墙的安全配置
# x7 I7 r" v# C& r* ]
% p2 a1 b6 g0 o+ y4 \27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改8 i& M' [+ ?. v$ i
8 Y. H% t- j. }. O8 H% ?8 F
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
- ]8 K5 a4 A( M9 p; Q9 f) K- O% [- a
温馨提示:
9 [! C- C& ^: }& c. ]0 N
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。
* I# s9 \" i4 U; w2 i8 b' H  O
* l1 O' m) z; M; {+ d1 s! }
2 k* Z( J* {$ }9 L0 l

& m2 S% i; N$ e! m+ p2 U" R! E* t  O: _( t
5 u. f" j" p% u- F

8 F- [6 M$ U( `  k5 f* ^
$ S- F) h1 v) C. `( Z  m* V
: o) p% d3 y; v( w; ]4 J* Q& }  _( ]$ i7 U& \: V  M* E
+ }1 [6 E1 I; f8 K+ q/ X

评分

参与人数 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
好详细,多谢分享0 K7 y! [* z& N. y% m" D) i) ?+ \0 m8 G
5768340 回答时间:2018-1-13 14:42:54
HI  
$ m; e0 f# M# ], Q0 F2 E* P0 U! w0 m* G   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
- ?: `' L3 \4 I& u   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************
    ) ?. o% l) @4 j) a3 F) ~
  2. 函数名称:Cdfinger_Bspspi_init+ C; W3 C& z* p; _: C3 t+ ^
  3. 函数作用:spi初始化函数
      N2 s7 S: k$ D9 m0 f9 E
  4. 备注:( W* P3 b+ Q  Q& D
  5. ******************************************/
    6 _# \/ q& V1 d: C, l# F0 e) i2 H
  6. void Cdfinger_Bspspi_init(void)
    * g5 f! j5 ~) \" B8 O* @4 F
  7. {
    7 S# Y% \& K  }5 U& N* W) l. ]1 Z  d/ z
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    / h. P$ ]! y7 z: e: R" @
  9.         SPI_InitTypeDef  SPI_InitStructure;
    # C; M( I+ B  i  _; u
  10.         DMA_InitTypeDef  DMA_InitStructure;/ D, p" B' O% ~: n* A
  11.         NVIC_InitTypeDef NVIC_InitStructure;
    $ ^6 _4 u0 j: V* N/ {- e7 _
  12.   5 j5 m& A0 c% p' b
  13.         int ii =0;; f# `& h- r3 d* Q
  14.        
    " x" c5 b8 d$ `& O
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);- L- G% l/ A/ S. l) }  G9 Y8 O5 {
  16.         /*!< Enable SPI2 clocks */" V) F! k( i: Q! k+ m
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);$ [  w' z) p( Q; V; a, u
  18.         /*!< Enable GPIO clocks */
    8 X# U6 g; l$ e! ^
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);" ?9 z( h- Z8 k
  20.         /*!< Connect SPI pins to AF5 */$ m: [9 N* X& V$ g* m2 @
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);
    6 n8 C, X2 ^, F% q+ D
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    + X, q0 P+ [( A" ~1 j; H7 R
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);
    9 d4 o: P3 ?  M7 h
  24. $ l( M/ I" J( g/ X( Q5 f% Z# j3 A
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    . p, Q4 B6 ~  `4 e& y  x
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;3 v) ?# j7 R0 ]% D4 }$ ~
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    / s1 m. W; l) u
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;* D. i1 M, U  Q
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    + M/ {7 P7 ]$ n# @3 T
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    5 s! M2 B0 r; i, Y/ c* X' y+ }, j
  31. ! `" i, M( x. p- \" s- `/ N& A
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;# @0 t* E0 K2 u7 Z
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;! B: W0 \1 t+ F; h$ z! K; l3 {
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;) k4 t0 q! B" E, a* |5 E
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;# E0 g+ Q& k6 f5 g& `' q
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    7 _6 L7 X9 w% ^; j
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);% d8 i& f* f$ P: Z- {( C+ v
  38.         Cdfinger_BspCs_HIGH();/ t, f. d, }6 A8 I+ i! s6 u- ^8 Z+ h
  39.         //Cdfinger_Bspdelay_ms(1);
    ' D! A# j  Z3 d) X
  40.   //Cdfinger_BspCs_LOW();: _7 w- x) e) a6 q! }
  41.         SPI_Cmd(SPI2,DISABLE);
    & {4 s$ v' i$ L. c
  42.         SPI_DeInit(SPI2);
    ) w4 n) L9 [. ]/ ?- c$ L% b/ E
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;8 M% k" q. H3 j- s
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    % V7 P5 I; N& V7 W7 {7 g3 L: ?% I
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    / H( q( ?) _; j+ d- V( X
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;8 t  g( z! }; Z3 p9 {: P. r
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
    , ]& ]2 w) s: X$ e+ ^
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;2 l! G" [$ q6 n/ ?  _! q9 l6 M4 f
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;. r! V& ?: J  |
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    ' N" b# n1 J( V0 r5 W3 \6 z+ O
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;! B4 n1 |( u8 W- L# U- [5 Y
  52.         SPI_Init(SPI2, &SPI_InitStructure);% y# s7 \- O! `) D0 D$ o

  53. 0 q( c; d% q4 |/ T
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);% m+ b! L6 ?( ^: @0 w% {/ a
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/+ V/ g: Z5 M. j5 a- a, u$ P0 @
  56.         DMA_DeInit(DMA1_Stream4);) d; H/ a  A/ O* ?
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    3 N3 b+ J" X: C9 x( J
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    0 o) @4 X+ T3 X: r, @' w5 h" I1 ?
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];1 A  N7 R* \3 E- T- R" F9 ^
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;! H7 S3 V/ [0 q, a, v
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    " h  @- X, r" \" f& ~$ ], I' ^/ }
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;
    ; N* m6 Y" |4 N
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;7 _/ r' j* d2 ?/ ]+ j9 J
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
    ; c( Y) H; v$ K. C/ G
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    1 y) F7 ]5 L5 o+ c6 F+ o
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;) k' ]  @# n% ]4 r: `, ^( e! P
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;9 s( D* R; U; G8 C
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;  ~3 B( C6 b' `( p
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    / h7 M' w7 c; G' `
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;) T3 j  R0 j( \' Z
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;. t  I& M) ^1 _
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);- g5 e: a: g+ ^" G
  73.   
    , n: ]% o+ I& e: a. a3 O5 a
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/+ O) T$ u* T/ m) @
  75.         DMA_DeInit(DMA1_Stream3);1 I- H* {" a& O/ W/ R% F% k# l' A, W* ?
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;
    8 L" g6 U0 V/ o( R# \8 ^0 P$ T0 d
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);: k% E1 k7 z: Q, Y
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];0 J6 v! n! o) v
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
    $ X9 T- @, x% e  O. I( A. ^+ Q
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;6 T9 z% @- i. L/ l8 S# D: b4 }
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;1 r0 I4 s7 f" y1 t; v+ X$ H3 K$ S
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;3 `# r: y4 C4 x% n+ Y$ N
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;# U. Y8 X* t8 i% r; F! f
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    5 o# Z9 k, C/ G- j( p
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    $ z8 d& Y7 N: Q$ J% e
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
      M- l' o$ M0 t
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;7 }- i2 f" y" h8 T/ V+ o/ ]1 e
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;: Q- `  K$ m" {; e
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    3 G4 z: L/ c6 ^) ]6 p& e
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    ) |; y6 M9 p0 ]8 ~3 I# S1 D
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);  o# V% O6 g  P9 z0 q6 [6 O4 X
  92.         //Cdfinger_BspCs_HIGH();
    . x: e7 i. w) F4 S& M1 Z
  93.         % ~% k  a( m: Z, V1 M3 N
  94. * Y: q1 _. x0 b

  95. ! Y, r. u6 o! _" p" j8 a
  96.         //发送中断# |8 _) @& _9 m+ s6 g& I
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    $ ~( X9 S8 [( l! |1 m$ W
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    1 T: }$ P5 e* R' X: t, m
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;& h3 Z. F5 Y0 i6 i( s% V; e0 c
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    ( E9 O, s. V! z  b7 O4 `
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    & J; k& \; H8 y, a
  102.         NVIC_Init(&NVIC_InitStructure);
    - [4 K  t8 s, b' i
  103.         % o3 K' m! U" F0 K
  104.         //接收中断
    ! J4 I* E  P  ]; c; v
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    ; z9 J0 K! M3 j2 ]; a0 _
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     
    ( W! ^  P4 }/ _" T- L
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    , W- d7 e& f+ W2 J
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    . ?) j* H. l  E1 S; f
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ' P) e3 e% B0 i# t. A" g2 W
  110.         NVIC_Init(&NVIC_InitStructure);- i) Q7 ^5 H7 \" @" ^: E4 K7 G
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    % L# J8 ~% X6 d% F
  112.         SPI_Cmd(SPI2, ENABLE);. p/ N0 d9 J' w$ F0 D" O
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);
    ! x' C2 i5 ^& [9 r1 F) q  y
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);9 l0 X6 b$ X% `+ I; W- d

  115. 6 y6 V  }! L% m& P  Y8 o
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);* J# H( I' ?" d% V4 `& M
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    - d9 |' ]! C0 g: ~$ v; g. a2 t1 K
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);; V+ L# m0 S3 [' y# |/ y% f

  119. . L) I3 i, p$ [  C2 d; ]5 ]8 d' V
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)1 E/ u5 H+ B2 X  C( w
  121.         {
    ) G, p* i' A% W9 p: l. M2 c( k1 W
  122.           if(ii%8==0)
    2 L) W7 e& t* f9 h8 l1 U& Q; C
  123.                 {
    : j# _1 w* P, o9 a* V
  124.                                 printf("\r\n");9 [+ Q$ i4 H( f8 @' }) m' J' a
  125.                 }( ^# E  z0 @" [; f/ X) y! {* ?) {! E
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);1 D* h7 Y$ B( }  ~1 u' n: W+ `' v) [
  127.         }
    " |# ^1 k1 ~* |( D. M$ X( Q
  128.         printf("111\r\n");
    : n- k: `! }3 j: F4 k6 e% E
  129. }
    ! {6 J: m7 n/ x. N4 M/ X1 X
  130. : N6 ^; }8 I. @) D3 o, k

  131. $ X2 K1 ~; T+ a' z8 F8 O
  132. void DMA1_Stream4_IRQHandler(void)( q6 U# ?* c% X& @
  133. {
    7 i, R4 \" {! R( I( _
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)0 L: ~5 P- Q8 g5 O! N: I
  135.   {2 j. @3 ?$ x% f& [- J( }
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));9 |( c# H  B) J$ Q) e( M$ M
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);
    $ v* d9 p2 d& e9 G, I: f* v0 c! |: U8 p% O
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);
    % n0 ?; z+ a$ y. k4 P
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);- P% l9 N! Q! w4 p- L
  140.   }7 t8 U9 d1 F2 k$ Q
  141. }5 O+ ~9 W/ c0 \9 X- h
  142. . I% Z( r9 c1 n' v8 F; f
  143. void DMA1_Stream3_IRQHandler(void)
    # s: R; ?7 D; [  k1 r' ]
  144. {
    ! g0 ^5 i2 E& l' H
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)
    4 ^- `7 A( ]) L5 t& U
  146.   {
    8 c( u' s/ f( J# z" n2 ~
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    - j* a" u; |9 ]; [4 D6 g
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);; P+ J. L* |0 Y' T5 A6 Z
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);
    4 j. F' s7 |' `! @% T8 F
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);9 }# \% [) n  ?/ _' q
  151.   }, p1 T% A0 O1 o, S8 k
  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的波特率是不是必须为相同的,才能正确通信6 _7 G2 g. F0 O1 G! ~
以下是全部代码:3 Y, _8 g7 k& t% w
#include&quot;stm32F4xx.h&quot;
: {6 K3 b0 W7 Avoid RCC_Configuration(void);
3 M5 N. I( K9 h* u& ?void GPIO_Configuration(void);/ z! r' q' S/ _( n2 _
void SPI_Configuration(void);
+ Y& T* U: @' P4 V$ X( n' ^void Delay(int nCount);/ k9 {) E1 D3 x/ K% X* n
int main(void)
  y) T, O6 E' X3 v7 T( t9 [8 w{  RCC_Configuration();
0 ~' D' g( p/ e0 c2 f5 u  GPIO_Configuration();
( v0 O7 f- x5 i+ ]' t# ^0 S2 k  SPI_Configuration();
1 P0 J6 N) p% q6 l' O6 n while(1)& H  V5 F" G% h' K$ n/ l1 z
 { int data=0;
0 t: n/ t  Q! w8 l  SPI_SendData(SPI1,0x55);
" V/ w8 E! ^' c8 q  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 0 \' v  [8 u# W8 b
  data=SPI_ReceiveData(SPI2);, i' C2 N6 d% Q. U' L( B
  if(data==0x55)
; g* |5 O' m6 Z2 j1 u. B     {  while(1)3 x0 z! D: ?: Q; ]- h; B
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);2 l: n- C" N+ T# Z) B2 g7 I/ r
                Delay(0xfffff);9 r5 X, V$ a9 l. A
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);4 ?" B, x( R# a9 a+ o
                Delay(0xfffff);
% Z) D5 C6 j. {2 l3 e   4 g, U) }% J" I: u% T9 z& s
             };
" E4 t- p- n% z5 |: n  P     }
: Y8 L$ T" q! |6 G, Z     else while(1)
: F$ V- @( X8 m            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
7 t5 }/ H2 T* n  E) L               //Delay(0xfffff);
+ `$ f  o2 t9 q$ g' {' {$ Q1 Q+ f               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);$ }  z# [/ V- s0 z
               //Delay(0xfffff);0 J4 a8 Y5 s, P* y3 m
  
7 d7 Z" s( y) }& R. _, v            };7 g" v9 c1 q+ P* a. c
 }
% ?' M  T) a4 `( W$ o& j4 P6 U8 e0 {}
( n1 [! m; H$ ]$ L/ vvoid RCC_Configuration()
. l9 m: \, M, J4 X- k; S9 I{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);: l) ^& r; v# M
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);) O! i2 H  Z: a' S- f& G* W
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   ; v" R0 E" W1 P: G' ~- J
}
5 n( i: ]& t, pvoid GPIO_Configuration()
7 K! Z. h5 B: v: S- X! V* V{  GPIO_InitTypeDef GPIO_InitStructure;
7 L2 s* {( N' a7 S  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;' ^( z; p+ I* |6 u$ w" n& w
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;6 {$ D* a' G  q, c" \
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;) Q4 x% e8 n# |) E6 y* @
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
! H' x6 n* I# `6 T  T8 v  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;9 X* r% M1 Z9 n2 |8 `6 K4 }
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);& s# U1 A. M/ k; A4 o. ]- e
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
- W0 e0 F( B" q/ p( x' P0 O  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
$ D% d, C% G$ q* F0 i) s7 V  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;9 A/ d( V. z, X3 R
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;, W, h  N, g- T  _0 g) k
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
- x" ]+ C" c9 z  b8 ]: N  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);1 @, N/ a1 f  h% v  a7 N8 ~
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;. i  v& Q; {* B1 z
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
% a; p+ w! s! A/ }6 I* B0 I, B: Q}' f1 E) c1 g+ A0 I
void SPI_Configuration(), p/ q. I* ]) C/ b; {
{  SPI_InitTypeDef SPI_InitStructure;& e" l# d" R' t: o2 \0 q# c
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
4 r! o1 J1 O7 B* h  ?/ v- k8 u  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);2 A( ~/ e. t) v) _
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);: f; z% v0 \: w9 ^4 B; j, s( W
   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
# p6 B' N/ w+ p/ E  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
: ^3 B8 c, ]% p1 M0 I1 @  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);; I* j- x. q; V( m' F
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
( m1 g* \9 ~2 i8 G, j" G) d" {0 u  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;$ t+ m, I8 j% |9 w2 t# T
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;% m; Z3 S: j2 S1 B
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;8 z, Z2 ^3 @4 r. G( O; q
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;! ]5 m! z- ^; L: ?) S$ ~0 H, R
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
" ~* A: P  w5 N5 v3 [) w   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;9 X4 v; H) y; T  a3 P
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
: [9 U! v. k$ e! o5 y7 W  SPI_Init(SPI1, &amp;SPI_InitStructure);
9 i  S. _( n1 y" P7 |  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
* G, w: f# [7 t2 R   SPI_Init(SPI2, &amp;SPI_InitStructure);
6 O. H7 p4 r  h$ s  i. F   SPI_Cmd(SPI1,ENABLE);
0 G; ?# |7 s, z   SPI_Cmd(SPI2,ENABLE); , `- I; l6 V) F, z1 ], k
}
. l6 X  ~. J! q0 nvoid Delay(int nCount)/ Q, r) ~0 d& p8 }% Q; J8 f  G
{ int c1=nCount;
" x4 d: h) H, D- r int c2=nCount;
* C1 f; `: O: x for(;c1&gt;0;c1--)
) T0 }6 f2 g8 ~, T  {; X; [0 ~& w+ P" x8 ?
  for(;c2&gt;0;c2--);
! l' N- O" A- Q3 ]( y* u };+ \$ ]8 Y5 \) Q+ ^0 P
}
- z5 u$ T+ e8 @先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:4 O& e! _- ~- U( X& @3 @
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信" B) |$ e. H) V  P
以下是全部代码:8 ^: d3 H) J1 K% K
#include&quot;stm32F4xx.h&quot;& k! Z6 v0 M* W8 h" f* B& B; f7 p
void RCC_Configuration(void);2 b1 H& X) t9 }6 p4 }0 r
void GPIO_Configuration(void);% l2 J& s) D0 s
void SPI_Configuration(void);
- V0 o  ]8 W$ F' d7 Z; {) Evoid Delay(int nCount);% _* ]; v/ H# `9 u. I; r2 O
int main(void)3 z' K1 T! O/ S" p5 f
{  RCC_Configuration();( k7 c1 v1 h% x) i+ F; ]" Q
  GPIO_Configuration();  x% c# L* U2 u: L9 k
  SPI_Configuration();
# X3 Y5 H" O$ o. G; a2 q+ \ while(1)
' ^# p7 l9 U. y! H9 Q) _% |1 g { int data=0;4 j( \5 b! ~' _9 Z$ |; g
  SPI_SendData(SPI1,0x55);
4 w4 i: `# b. C$ s4 x  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); ; g/ G0 I3 P' O- W; j0 `& ?
  data=SPI_ReceiveData(SPI2);: b- ^, g) v0 Y; J, n( E
  if(data==0x55)
# O1 b8 `8 h9 i1 v" m  c+ y     {  while(1)8 C2 K4 r2 b0 q: ^) _  i
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
1 {1 w1 N7 F" R3 d% F- P' ?                Delay(0xfffff);
, F/ s# J0 `+ I6 l. `/ x* s                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
: D2 U4 @: E3 t                Delay(0xfffff);# R- |8 y2 w  H* G: k; _& s
   0 x' Y8 M  S$ y" i1 k: g1 m& V
             };
9 Y! q+ r: s, r6 G+ ?4 `     }
% x3 w! n9 x) j5 O; W6 }! m     else while(1)7 W2 q% @/ ]1 r
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);2 @, o  m3 y1 L' B3 e) b
               //Delay(0xfffff);' \0 b+ M; R1 N2 V% w  _
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);; w1 W# a! [( w* e) o; J
               //Delay(0xfffff);
+ y* c- l( @& ^/ N5 i8 |  
0 I- h' ~! v2 R# E9 }( ]            };" Y- G: N. Z4 S
 }
6 }( a9 x" g& u& a( t}2 T" S! Q4 @( K- n9 }8 |* _
void RCC_Configuration(); W& D0 g5 k* H% ]! u5 f
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  y1 n5 J; x  C( v
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
7 B- g, {- o+ V: e* O5 l  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);   4 r1 o% h0 T, \. T4 j
}
' c1 x# t2 b  d/ u8 ?void GPIO_Configuration()
; V, ]0 |, E5 c  P{  GPIO_InitTypeDef GPIO_InitStructure;1 [, H- g5 Z3 g* [6 G0 l  ]
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;  G* r8 M/ Q% N
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
, Q2 y7 F" L" z8 f  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;9 u% r% C0 N7 z9 }) _' R8 r" V
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
" a% h, R5 ~- I% L; Y- w0 `$ W' F  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
- E. }6 I0 i4 g  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
- ~3 c+ Z+ M! l& c  F  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
1 `$ n! L! ^: i$ c  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
2 _& a0 R# U- h! ~$ _8 {( i7 T  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;. S6 k* C, L0 I/ R* k6 `
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
1 Z3 _1 w: p* C. I  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;0 z, z- ^& ?- I( j; G* L" [1 _
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
- H& ?/ e0 w5 w1 Z  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;2 z2 C- K7 J' v8 ~
  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);1 M/ Z8 `' Z) e( w; w6 l
}
* R: s+ h$ {5 Z9 k7 {void SPI_Configuration()2 Q6 m" @- D7 Z2 Q+ z9 m& `2 ?* W
{  SPI_InitTypeDef SPI_InitStructure;
; O3 P" u  e* x, I" V( y/ w  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
- R4 X' i4 e7 a0 @5 f  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
9 w+ M6 x1 y9 U' `" ^- P- E  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
9 x4 Q% b9 @+ X( n" P+ {   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
. m( O7 T! a% X; g  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
' `; ?5 t! l2 b( q; d  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);: Z  v( x' S$ `9 N
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
5 B/ z, l' e: ~6 r  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
& i3 Y3 h4 r3 V: W- ]. A  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;1 _. U. m! }& G
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  j1 w% ^3 n. V3 A- p. ]* o4 C  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  C. a$ `0 B- C" P8 X4 }  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;0 \% W( K: \# {
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
6 T) }; f: k( A' T  u   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
1 y  L3 ]/ J. _; I  SPI_Init(SPI1, &amp;SPI_InitStructure);
& }# C# X, z% E+ n3 F* e  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
! m' `0 {) l" R& E7 |6 ?   SPI_Init(SPI2, &amp;SPI_InitStructure);+ G9 d9 Y* m2 c# k% B
   SPI_Cmd(SPI1,ENABLE);) r6 E' r4 K! J; T
   SPI_Cmd(SPI2,ENABLE); # V4 n4 Z5 o& P9 O  Y0 \* t% D
}
* @. {; `3 _! ?void Delay(int nCount)" O8 L9 k& \& N) T8 j! k, V
{ int c1=nCount;
) F7 K/ ?0 Z1 _; \0 F1 ? int c2=nCount;9 p8 w1 E2 Y8 o+ ^" E+ u, y% O
 for(;c1&gt;0;c1--)  z* r2 \3 d9 M2 `+ d. D) T* `
  {+ J" l6 A/ x0 A( S( x% D6 @) U
  for(;c2&gt;0;c2--);6 P  Z. @( c/ \. {
 };
- u2 m) P$ i% E}
  y5 S7 g/ S/ Z# z- ~6 r, K! U2 J先谢谢了~~
5 q/ y7 T0 L: }+ S" i% U4 l0 Y+ ? 
2 A3 a8 ]0 I! V7 f' w! i/ X" _! I' S+ g# e
楼上的问题,看我帖子给出的提示哦~
lkl0305 回答时间:2014-1-24 09:53:43

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

非常详细,具有参考价值,支持
21GPRS 回答时间:2014-2-14 11:37:16

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

 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。
沐紫 回答时间:2014-2-26 17:13:44

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

回复第 5 楼 于2014-02-14 11:37:16发表:  F! }7 U& c5 ~' K4 O
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。6 ]: O3 u1 Z( L! ^
 
1 A: l/ _" C: B" O) i7 U. R5 \
9 [9 c5 h0 d/ F# l3 V5 X; K/ T多谢支持!!
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 运算效率不高

  ! {5 a+ U2 @2 f# Q; R
鬼魅一样的Hard Fault) G) L7 |4 N; L$ S8 G
 , I8 F* J  {) B" h. w+ t* J3 V" x
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。* F. Q/ |$ X8 i4 f$ ?- q# v
 ( G$ K7 N; R9 g; P) n
咋解决?
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 手机版