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

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

[复制链接]
沐紫 发布时间:2014-1-23 14:58
>>实战经验列表
1 ?4 B- V) w. j1 ~) Z* G8 }9 t. n2 Z1 ?* J+ X
9 X7 \- t! P* h8 [  e1 x* E
社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验,可直接下载文档以及程序。也欢迎大家回帖交流。
7 `( j; \! H+ ^- H! w/ x ! `6 ?/ G6 _3 a: }- H
提示:点击各主题,进入帖子,可下载ST工程师解答详请- k4 P; u) o; S5 @0 `  M, v  v
% E5 {0 D8 g7 u) g
' J* C& ?" p9 l# k9 @, z+ T  Q' N- [4 I+ X
一、通信接口
6 E. I* H$ A$ X/ v* U1 B! R 7 x9 g: y- @& ]+ u
1. STM32F2x7_Ethernet(FreeRTOS)驱动更新6 B$ }5 m: j& N: f, \+ k- k0 |

7 H$ S+ _+ l6 {; A9 _2. SPI 接口发片选信号导致死机
6 c& Q3 b1 d5 K# W0 g! k
! C5 T' _9 c  e8 W- s4 n, y3. USART1不能设定600BPS的波特率! f3 [/ @: ?1 I
6 N3 n1 N2 p0 s5 d+ D- n6 Q) Z8 {- m/ _
4. I2C 接口进入 Busy 状态不能退出% C! ?' y- J* v  G* n
8 Y! R+ ]# b" |/ ?4 C; e
5. 对 Flash操作导致 USARTU接收丢数据/ h% y& x: x& b! ]" Y; V9 S. J0 x+ e

" Y+ Z8 B7 H) |8 ?6. USB接口易损坏
, [- \& v% E) g' j& k8 ? , M" E, ?+ Q. t
7. UART发送数据丢失最后一个字节
% i& l: r" v! G 7 O  L! W; R6 s! ^
8. 使用 CCM 导致以太网通信失败
& v* n2 M" A1 O0 }7 `4 z% n6 U0 ?3 [! s 9 ?7 W" d& f% m; U
9. SPI3 接口没有信号送出
) A2 h0 |0 W4 t2 F5 p! D$ p. } * d, S" _$ n/ D
10. 时钟延展导致 I2C 通信不可靠3 j' `; B# v& f( N7 ]% b
/ b  I& a: r- A9 O* z
11. M0的USART波特率自动识别问题
! ]4 e3 Z9 j* u
& J; U$ Z$ S+ w7 D3 t/ M% B12. WK15 OTG做U盘主机兼容性提高: O+ s: C$ D9 l8 g" H9 y. ]; M$ D: U
& }% V4 C' u+ q! R. i4 g
13. 以太网电路设计注意事项
9 `' ~* X" Y( K/ V3 r 6 _0 ]( t: |# N( F6 l
14. OUG主机库在BULK传输上对NAK的处理
% F" H+ _6 g8 p" r- I3 l9 x6 l% M $ r! V  P! g( _. ]& U
15. 串口断帧检测
) T) `/ Z+ G5 a7 k4 B/ J
8 ^; Y( D! K1 D; y6 c16. VCP例程用于数据传输时丢失数据的处理% ~6 E7 |* m6 n5 Z+ _

: {* Q0 V! h& H. Z# K- w17. STM8L051F3P6串口UART数据起始位判断的问题; A, H* O0 a$ U$ w3 @' ?; I  e) ~: `  m
6 I7 l6 K7 d! ^5 y  k, {" `1 ?$ C; O
18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号% p: O* V, ?/ L5 M1 ]1 m' `

/ ~% u9 [- z7 ]3 i+ S19. STM8中UART奇偶校验的使用方法
  `" v& D: _' C' b4 v2 u* k/ J, g
8 z! K- |8 i/ b& o: h& I20. STM32以太网硬件设计——PHY$ S, M7 G: s6 ^* n* T( c$ d9 [' l
" |5 Y7 H7 s' w1 y  {
21. 一个判断I2C总线通信异常原因的方法! J% b5 d- {- ~# W' l  X* S

0 _" \( V( t3 a* H/ N. y22. USB device库使用说明1 |6 Y1 J8 V( g+ ]# C; S# Y

" \8 _' @2 e& w  N23. STM32F103上USB的端点资源! g1 M) U, J6 p
7 D  z4 Z8 U0 b$ V. j
24. 使用CubeMX生成TCPEchoServer程序, K( V2 O3 J" w) t2 Z; M6 I$ C. F

7 e6 r# U/ K& C* [4 l4 b25. SPI接收数据移位2 |  x- E) B" B* F
$ O. @, T: L+ D- `* S
26. STM32F0中Guard Time的设置# i* C8 f8 S5 G8 C

$ x! K/ f! Z- T# c% H3 y27. LwIP内存配置
8 U: T4 D% a  x0 {- G. G! r
: U- m" N& [* W3 e7 Z6 o28. STM32 USB Device的简易验证方法% p6 L0 e% ~2 k3 B6 T- C2 J9 p
" N$ H7 B1 e- L% t% x  X' H: i
29. USART 中断方式接收无响应问题的一种情况及其处理方法
7 f1 o7 n1 _/ E8 N0 Q
$ E5 u& P" B7 C9 V5 z; ]$ P; P30. STM32 基于 Nucleo板 CAN总线的建立& H3 L; D* ]$ v  V0 W; @5 P

0 k9 A+ b2 ]$ ~, x31. STM8 CAN总线的IdMask模式的讲解
- M. f3 O* D5 J) J4 D& J& w6 d% V% C, w- d4 D, h/ m0 K0 @
32. STM32F746ZG USB 驱动不正常
% ]; M) n- G  s! `1 ~1 x
8 c/ O. J( i/ r& }; _33. MCU在STOP状态下通过UART唤醒分析
6 W, p7 B+ k6 @$ }
9 O; x' D# E; S/ r. W5 h34. 通过STM32CubeMX生成HID双向通讯工程 5 w- J- t- r; z  [1 R/ C2 K

. H+ l% L4 w1 U4 e4 G( q' q35. 串口工作在DMA模式下有时接收异常 % x, M1 e, R9 b- J- ~9 q  y) e7 ^
. J( i7 a9 W% ]# m! u
36. STM32 Bootloader中 DFU使用限制2 S7 m9 Q) z7 s/ v% ^) @; v& q
) l9 A/ U* i# X( a. C* x
37. UART异常错误分析# x% j( h5 D3 O) \, `
" N9 Q" g" l3 n0 u: @/ g
38. 基于Cube库无法检测CAN2的接收中断
, }5 L4 O' t3 J% _3 R9 o3 ^) _3 l
39. 基于STM32F7的网络时间同步客户端实现
) e. T. R' I3 x/ K# ], m
  k% [+ s" ]; z40. HID与音频冲突问题
* G: x3 M" ?* E& h5 }4 n' U' k$ d  w9 W% ?
41. 在进行USB CDC类开发时,无法发送64整数倍的数据; ~* o3 m. P/ x4 i, p" U% U

% `, L0 K; N9 T0 i( x: v0 y6 B42. 从零开始使用CubeMX创建以太网工程
" {$ q. t( [. H- }4 P; t4 r9 X0 M! ~" L" [) ?% |3 c( p# t1 w' Y( K- i
43. STM32F4xxx的I2C总线挂起异常处理7 _' a. h" M+ R

( T3 L. s, p! h5 ~0 c9 L7 ]0 j0 T44. LPUART唤醒STOP MODE下的MCU
" M4 g+ [5 j4 x3 U
6 T2 `! c" s2 x45. STM32系列 MCU模拟双盘符 U盘的应用) _, }0 n' \- J# @: w" h

% K% r0 i& Z4 b46. CEC输出的数据和数据长度始终不匹配
" i) y$ j: f2 D' Y6 @2 S9 ]5 o
7 w' a# P% s; i" h47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析
$ ~+ Y9 V! x) P8 a3 K: Y
: e3 _' Q% V3 _0 k2 D9 z48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续)
& k6 v/ Y1 |. L8 o: s. F2 }
5 K4 `! M: m" u, @49. 增加UART接口应用时的异常分析/ z: u0 p( o' \- p' l2 D

# i7 ], G& O* s+ m- X  s  c50.UART应用异常案例分析1 H, z1 B) I, m& ]3 z9 [. Z7 r  n
* e" K# ?$ Y/ |% P0 p
51. I2C配置顺序引发的异常案例
) D5 h& f6 @8 K, [  q& L1 k6 D
1 g. \% Q' I0 @- d% u2 O$ G7 C' @52. STM32 USBD VBUS GPIO2 `5 b  v' Q. l3 X" E6 t9 H& a# k) z( o
$ g& _+ o4 _; u2 B# q9 v
53. USB传输数据时出现卡顿现象
. I, Y! ^5 V/ `- i7 U+ z4 U4 {, h0 @7 O
54. STM32的高速USB信号质量测试实现
2 @8 Y( {6 d' B- _) `' w0 B  j4 \) V4 E( t9 ]  m( J5 n4 W
55. 基于STM32 I2S的音频应用开发介绍
+ l. N5 N; O0 Q+ b% q+ i
2 s5 f7 J& v6 o0 }56. HID_CDC复合设备在WIN10的识别问题  $ \# K  Z  i1 s
: x7 s7 B0 c  Z  U3 Q0 D: [
57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题  ! m* b) u: R: c$ Q1 u

6 A9 n. l0 Y% @58. 一个关于LPUART输出异常的问题分享  $ \" N/ }+ ]2 m# k4 Y
- T( c" u* c: d
59.通过 DfuSe 工具控制程序跳进 DFU 模式" [# Z1 {  G- m% L$ X& `

6 R( A) a; T) j0 C0 f60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新)7 o' @# ~" |1 l
8 z/ r5 W% u8 n7 F) ?) X. Z1 m1 Z
61.一个因初始化顺序而导致异常的话题 (2019.12.24)
" g) |) I' }* j1 L
1 E$ Q! B! k) i; j% y6 D: i
62.MC SDK 5.x 中增加位置环 (2020.5.29). K; T4 U, |" P! o6 \3 u) T* l* b  V

0 l! I8 ~; `' w! x% G$ p63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)
7 M6 c1 y3 D, X  P8 `8 ]% B' v* t4 ]; {0 X3 W" j
64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)
2 t1 X3 V, ]. `5 k; w2 g
% ]: K# [8 E, |8 |/ ~% O% j" ?& @( V二、电源与复位
+ G9 ~- n$ O. v' z5 S6 g( K1 }: D ! Z& J4 R% Z2 b
1. Vbat管脚上的怪现象
: B, {7 C( }% Y1 [, R$ |
3 V/ Y/ ~/ C. J3 s" g- m0 {2. 上电缓慢导致复位不良
4 Q4 q" a7 b8 T. z: E2 U0 l
; Y1 _! w9 P1 P" s3 j2 D8 @" B; I3. 关闭电源还在运行$ ]! a+ D. o8 u/ V9 s& N

: \; t: M) U* p$ y( n6 u( U+ T  d4. 使用STM32 实现锂电充电器* e( x. @' y' q6 Y) o
8 m3 D& w8 Q1 A$ y
5. STM8L152 IDD电流测量
& D! V% K! V3 C& | - B" x# E0 {% m& l4 ?. h- v+ W
6. STM8连续复位问题' M. y. j/ \  q9 N7 h

) S! e: ^/ o/ q7. STM32F2电压调节器REGOFF与IRROFF引脚的使用
. ]4 y2 D; n5 `* [; o
7 u( I3 }* N4 Y0 _! H& C8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流7 y' f2 l, B+ r9 J; _* ~8 e
, G  ^1 t4 ?( V$ ]
9. STM32F7与STM32F4的复位序列比较
5 j" a6 |$ A) @# R  Y* d
" |/ u$ Q% Z& \9 a" T10. STM32F107 复位标志问题
5 @" K7 i; L% L2 L# k0 b* M! p  n( V& R
11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  , J, v% g0 e9 t  \$ y: k5 Q
  i* J% ?% {. k! B: d. x
12. Nucleo_L053不上电也能运行
+ _# K  R7 O% \# ^* c2 y9 u) T
& V# Q, @/ r5 m) j* v7 r13. STM32L4中STOP2模式下的漏电流
7 L5 v" N- ]: R7 h1 e* o2 G% a/ m+ Z1 C* |  j7 o: r
14. 在没有外置晶振时HSE_RDY异常置位
6 M7 u, w" A" i) e+ }* S
. R6 {; s) w9 C7 C. s- c( |15. FLASH被异常改写   (2018.5更新)" s$ _& O5 \1 ~7 @- ~- Q3 S
1 ?$ P% q( V$ {- [/ d7 z
16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新)( ~  M* [) r# V* ]
& D( S% g7 e% v. J
17.一个 STM32 芯片异常复位之案例分析(2020·2.27)
" a( F9 \  U2 V5 Y8 f* F4 `3 C; D0 U
; f; T& o) g. R. l* U  F0 @三、IAP和Bootloader
% Z3 l* r9 Y' K; Q) D: b) q
0 B/ z6 b$ \( M. R) H2 e# t1. Boot Loader与上位机通信不稳定3 P! U8 ^# ^7 j# N, S! u
, v! V1 m* {" r& W5 S; O
2. IAP+APP 模式下不能启动 RTOS  z: n  U7 R8 j6 n) m$ V8 |
& w+ J+ e& D/ p. I9 `. C
3. 从 IAP Loader 向 App 跳转不可靠  A' v0 u. \* i$ N$ N+ g

5 h& C% H8 @" m- q4. STM32 MCU IAP例程跳转到APP代码简要分析' P4 M8 `8 ]9 F/ E3 ~
5 O8 C# t7 B6 T' a& Y/ @/ J# i( W
5. STM32F091从自举程序向应用程序跳转的问题与解决
4 t* v4 a9 U5 d
5 c: z/ B, x/ t/ _" b8 k: M* |8 O9 w6. STM32F09x不使用BOOT脚实现System Bootloader升级代码: @/ p; k+ I$ o; G* K) `1 }
. F+ @8 q. k3 S) p+ ]
7. STM32F0启动模式相关问题探讨# q! I& I% G" V: g6 s

5 [8 T8 e* b6 N7 n8.STM32F091空片使用System Bootloader下载代码6 |) B9 B) {& X# K9 q4 L

7 s# J) N" \. T: D9.STM8L  IAP 应用程序中编程指导
' S: q1 G' g' x0 L0 S( D5 N 7 Q8 u; u# ^" v1 M7 e) e
10. 如何通过STM32的串口实现简易脱机编程器. ?; ^, J/ {" [& N$ b( w

& V- q9 X4 `- E5 }, K) ^11. 一种从用户代码调用系统存储器中Bootloader 的方法  5 ?) J) y4 Z; n* V- I
- p" [) ^9 v1 ^
12. 利用 USB DFU实现 IAP功能
/ P4 j  X" |" I, p' [5 N3 Z4 d7 V
13. STM32 Bootloader中 DFU使用限制: B' j6 w2 e% z. a; l

0 W3 S* T! H( v$ g14. STM32L011x和STM32L021x启动模式注意事项2 |5 m* |3 A7 w3 {
" c- v, r5 J: u/ s8 q1 i0 n
15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项
( U9 V) _3 X% \& l7 h- O5 p3 T9 v- O2 a; x
16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 / d& P/ V) L1 Z/ A2 X
) k5 O# e* [4 L0 d" c4 V8 W
17. 如何使用STM32NUCLEO 板来测试串口Bootloader
3 k5 F) H3 l- w
! _# v9 P5 f; ^4 }$ I* w* w9 s9 @# q18. 在STM32L011上通过I2C接口实现IAP$ g3 b& @; V( l5 f1 A
/ G4 |( O. ~# z% F4 V- t
19. 在IAR中实现通过将程序在SRAM中调试的方法, W5 E" ^& N- }0 l  f' l

7 a( o+ u5 T% _) W0 U20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题7 w1 t5 Z7 q$ l* D$ B8 n

6 p! n; q4 h  k3 g21. USB DFU IAP 例程移植的两个话题
1 P# Z6 Q/ P# P3 @/ m  M& S0 K% J" F' a( B( f6 `
22. STM32F769双bank启动
, f& T0 r- K% I5 U6 F* X- ?3 K" i# I5 a& d- u
23. DFU加载 工具 DfuSeCommand的使用3 t2 l1 i+ U! O/ y% T/ j% D
' _7 P  l) {$ [- d0 g; Z
24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码    ; T/ z  G* @6 ^+ F6 M

0 b- e1 S$ F: ]: i! [! W9 M  U25.STM32F767的USB工作在HOST模式下的远程唤醒问题  (2018.12月更新)) `  d) e( s" S6 g* H5 E6 A& K
+ I: \( o9 J# R4 e7 M5 }6 K% @2 _8 h
26.STM32 Bootloader异常复位案例(2019.4)
3 B" @. C$ @; u# l  q2 k# X6 I, }+ K& ]" P3 K# d5 I  E
四、存储器. i  p$ f8 w1 O: H& r- h: H

6 C& K1 |3 D( g2 d1. 对 Flash操作导致 USARTU接收丢数据
7 K0 k5 a5 L9 a  k8 Y
9 b+ W+ E  I# S& c2. 使用外部 SRAM 导致死机
# r: W+ I/ o5 t) n/ a: J4 o  X" d
1 }. |& [5 _' i) Q$ m1 d3. SRAM 中的数据丢失- _2 _. ~4 J0 Y( z3 |

$ w- k6 p0 W) |( e8 m9 q1 _: t& X6 e4. 干扰环境下 Flash 数据丢失) w' Y/ ]9 i) N8 ^6 v
: ?3 M/ \2 }+ N) }4 B( A: U/ n
5. 使用 CCM 导致以太网通信失败
; G. z% h* H, o$ G$ I
' W" O" o6 s7 f6. STM32F429使用外扩SDRAM运行程序的方法* z# j& |3 ?. n3 T6 ]
9 F; x! }: i6 `9 ?/ A+ ~. d
7. 使用STVP实现对STM32L1系列EEPROM预置数据
0 F! ?( |/ y2 J) I; ~; P9 e 5 z2 D/ R3 b9 ]9 C
8. FreeRTOS RAM使用情况及优化方法
# [+ C0 P4 g! J$ s1 n# O1 b* E- Q6 _2 g3 b
9. 在IAR 6.5下如何将数据存放至flash中7 s' h! |9 b4 C5 r1 F/ W( `

! n% h$ K2 }& X9 J) e10. IAR下如何让程序在RAM中运行; H5 \9 N- k/ p5 [& u; J

1 \+ m% C7 C% W( b+ q3 M! a11. RAM上电后初始值问题* A, N7 N/ [" L$ h

) X0 b% g/ M; f* w1 z: v12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计8 u0 [* o2 v+ o& h
* M& N3 q2 F( B) }  j  B
13. LwIP内存配置3 _, D, S, F) n7 c
: ]$ a! g1 S* J( X8 E/ n
14. STM32F2高低温死机问题* Z7 M! Y) s' @# C0 ^; ^

9 i* u6 z( c% ]/ @& z15. 使用STM32F427的CCM RAM时遇到的问题4 m) V" X, _* T. G/ g- \
* H+ V- h8 T, y' r1 A: I. E
16. 利用QuadSPI外扩串行NOR Flash的实现  ! |, T( T9 c7 n7 a

, ^* ^2 w, n, v5 A5 N17. STM32擦除内部FLASH时间过长导致IWDG复位     1 s* v/ R+ i7 ^$ g; s1 q" ~  J, _

6 y% k7 L0 E2 I% \4 O) U

8 u8 Z8 J* |/ B# b8 }0 ~3 i' e! V18. 基于STM32CubeMX开发U盘访问应用  (2019·6·18更新)
* ~, V8 C; r3 g3 w. I4 x% q9 G8 k- i6 v
五、模拟外设8 \% n% K9 W4 d5 ^

, U5 B! u% e& x' I1 d7 y3 `- E7 ~1. ADC对小信号的转换结果为零* B2 E, `; @3 w
" a$ G. @9 s7 e  `3 {5 X
2. ADC键盘读不准
: v* O2 {+ M1 g- a- W. E
# ~3 C& Y! T; R1 r& ~6 X3. 扫描模式下 ADC 发生通道间串扰5 {% b% }% G' N" H) D5 |

0 T; p) o3 j: {; t* }9 K4. DAC无法输出0V的问题分析解决
/ I& C5 W4 W: k* h$ s
' X) W6 C/ _$ B4 D2 t5. DAC无法输出满量程电压的分析解决% E& T$ V7 k+ z
6 a7 w0 b% l/ {/ K" `
6. STM32F30x 的ADC 采样的傅立叶变换
  W# y2 P1 ?8 w% _
. k4 P0 w& X# z: X: ~% S7. STM32 F1系列 DAC的示例详解
5 z3 C) s6 S6 Y! Z* h; p
1 b! E0 V; N# W; [' |+ y. x! n8. ADC 连续模式采样浮空引脚问题' J9 b1 l: l3 F: ]" ^+ X* r! K

& ?1 h' S+ Q: S. x' T9 c  A9. PWM硬件间隔触发ADC
4 A" x$ F1 [# i5 K3 a# X; a9 o: n+ W# p6 ]7 ^/ O$ i: a* R$ m" I! n
10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC
0 G2 s6 ~; m6 w! A, V. j9 ?  P0 A, a; z  m  b5 l6 K! a# F2 S6 C
11. STM32L4 系列中ADC 通道配置上的区别
3 M: u* A1 b. E* j; V( Y+ J/ W
' b( }8 i2 K, W# x. Z: g12. STM32 ADC模拟看门狗及其应用
, i) c+ b; X! d2 k+ u$ z- y  r+ d& F; s# Z; Z; e
13. STM32L053 comp2 比较电压无效问题 * [* q- O" B8 z( l/ ^8 q

, I( q0 H$ G3 ~4 n2 x9 }, z14. 运算放大器OPAMP在STM32L4上的应用$ f! R0 @& R* C; ?! U! p
- B# |! e7 r9 r0 T5 n" E
15. STM32 OTA例程之ESP8266使用
1 l$ M) ?- N: o( d3 u; w( a  V( G7 `) L5 y0 o. p% N: r; B. [
16.  STM32多个ADC模块同时采样转换的应用示例 (2019·7·24), _. o! {3 r) _& W
' I/ L1 X0 t, m# L4 x. c
六、计数外设. l3 t8 R) ^: c0 @2 ]' c  X

1 V1 Y( \! i6 A, S4 V& O; y1. Watch Dog 失效
. ~, m  |  Z# ~1 C % c3 o( m! c* B! E! ]
2. RTC计秒不均匀' o  W; v- s3 H6 @
" E0 ^! W4 M. q, [
3. 软件启动模式导致 IWatchDog 失效
2 M1 a2 [/ h- g# |9 Y' C" K  M
) P5 L. R9 d7 ^- M8 z; X4. STM32F030R8 定时器移植问题
' k9 r2 x* [9 }% d
7 v# z0 \. k& I, G5. STM32F0使用RTC Tamper的几个注意事项
8 ^* X: v& X; u3 _
' q" j7 q0 U' z" h. S7 p6. STM32L053可控PWM脉冲方法之DMA
0 D7 i) F- }( p* ~' p( P0 a6 _, x* e" Z2 L/ x
7. CounterMode,OCMode与OCPolarity关系
5 v6 b" f) Y9 y2 D
( Q( J2 |  X& n# _8. STM32L053可控PWM脉冲方法之DMA
9 Q: n& {! V: K* H4 n- h% a6 t) S1 K4 V
9. STM32F1通用定时器示例详解—TimeBase! L: v) c3 ^$ U* l, P1 T

5 h$ l. b$ {1 b' \! m% k0 j10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals
% x  {; h/ z+ ^3 n* l. S$ m' n3 o! f9 s. {" C. w+ `
11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生
9 x" C2 D: `3 d- U5 m% z- e" z! _0 s3 R9 W4 x- q
12. HRTIMER的多种Fault事件联动机制
) b  N8 D+ c  B
* F, X# Y4 p: u  i9 L13. STM32通用定时器 示例详解 —One Pulse! N+ Q, i6 o. C5 _

/ Q" Y6 X; r* `2 }' F# I1 K14. 如何用LSE校准STM32F4内部RC振荡器9 |3 H1 j$ f% h% c' u

3 `, @3 h7 {% _* {$ Y/ L( a15. 一种使用Timer测试HSI实际值的方法
% F( }& p, I7 x$ z. Y: g; H8 y8 Y3 q2 S6 Q2 U4 g! G
16. FreeRTOS定时器精度研究
- I/ q- r# ]5 w/ w8 ^# h, [' g( e1 G' A3 v
17. HRTIMER产生多相相移信号
3 ~" N/ }* d7 q& T6 I: M" `
( c2 M3 y/ p8 F  {; Q8 v18. 窗口看门狗启动时异常复位问题, e! W% d1 l8 A5 g5 N# k6 C

8 X: ?0 D* D% Z& p9 I19. PWM硬件间隔触发ADC
& q/ u3 f, j) I$ x0 d3 ~4 @* m; f( L7 [* B
20. STM32F030低温下RTC不工作
3 n% Y! d2 j  D8 S6 u9 q$ u4 l
1 W, K$ W/ O  _% M+ U, E* O- U. B21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用   ; \( r6 {  p! u- J, m" m# p6 N

1 J; W4 K0 S8 J22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29)
( E0 L2 h4 `6 n7 @
; g3 q! r  p+ n$ g9 l. I23. 基于STM32定时器实现定制波形的示例 (2019·7·25)
2 u  {3 e5 K% g9 g4 k+ j
- q6 i+ d. `3 d' b24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)
9 h9 _- \4 L( l) n7 u
- |  z3 {/ V5 u7 P: \( ~
25.MC SDK 5.x 中增加位置环 (2020.3.31)
/ \# S2 c% d$ W% |7 S
. Y( `7 s: ~- T# f8 e
26.STM32高精度定时器PWM输出话题 (2020.4.29)
6 s0 d0 b  O0 _4 b4 @% ?8 \. m. L
: P" R! V( S' @& `" ~

5 Q2 ^& d7 v2 Q. D6 Q27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12)' a/ }( D5 S; l3 C
0 W: t- z7 S( W
七、内核
  I3 n" B0 u7 a  [6 U% W& g" W! [ 7 a: s8 [" P# w6 X
1. 使用指针函数产生Hard Faul. b. t/ i/ c/ n: K
% T) \  x3 s% V$ {! N  a
2. 调试器不能通过JTAG连接器件
  }' y5 q+ G. ~/ r& e
; Q2 H. H2 c8 H2 q7 {3. 鬼魅一样的Hard Fault" o! w) C! y3 W6 U7 u0 Z

4 P: z0 X! {; _4 f3 q- W4. 进入了已屏蔽的中断[) g) R. F0 p, j" ~* V& `  @

* `- A$ f2 b* m$ k" g# K  n, Y5. 浮点 DSP 运算效率不高4 O# }" W8 I- {& |! N8 }

; h0 H! k& S: J. V; Z6. STM32上RTOS的中断管理) B; v/ d9 d7 x+ `- D
: {$ G( v* o' H& }; x/ p3 p# u5 L5 D
7. STM32F7与STM32F4的复位序列比较& o- |# p: D/ S* O) \4 [

: j& H: y8 |' ~8. STM32F30x 的ADC 采样的傅立叶变换& ^1 U. d6 v; Z
6 O2 `- h& r) A+ ^; T! t5 ^
9. EXTI重复配置两次导致误触发中断的问题* S* C% u: G: B8 Y
* w* I+ w) j4 N7 f# b: F5 i
10. STM32F3xx/STM32F4xx使用浮点开方指令4 G& @# ^/ i/ v! g
! d1 W4 M: A8 D# G. I
11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响8 \. `# z. R6 c# P% ~8 l

, A+ P; E) u( t5 l$ T- b 12. STM32F7 MPU Cache浅析  5 u8 `  z+ E9 F

# ?; w& p( V; x& \& }7 D, q13. STM8使用24MHz外部晶振无法正常运行  (2018.3更新)( T0 K- |! F! h! T+ S
* w/ x3 f1 ?# P- ~
14. STM32F0 不同代码区跳转时总失败…这些操作你..  (2018.6更新)
. v# K% x; u/ B

; z4 ]9 H1 b* v) a
# b; M' S  w* A8 b' n八、系统外设
( J# F. g* R. a1 w; | + K9 V  w' M% M, [
1. PCB 漏电引起 LSE 停振
* c  |2 |. d% u/ ~' E1 O$ E 2 F/ v/ `: p4 X, X8 |/ N" \
2. 时钟失效后CPU还会正常运行
' e+ i% K) i# c* q) m; C+ I6 S 7 K; `- v6 B9 N$ U1 g! d# J* d
3. STM32F2中DMA的FIFO模式1 W9 {9 P6 j" ~/ E  g, e. f  S8 ~

. d6 ^0 @) L% R( g1 _6 t4. STM32L053的GPIO翻转速度的测试
" O" }3 L3 b. G7 F7 Z% z/ e! J6 e' q' Q7 Q7 |/ |2 S8 V
5. STM32F4xx PCROP应用2 m" d) a* C3 s! Q" p# {; v

. u. M7 V' J5 h3 h  w# |: X  k6. STM32L053的GPIO翻转速度的测试0 N' R: c& w0 N) o0 _9 D" u% N

" ?. x$ {5 |0 t- l: M8 m# h7. 如何在IAR中配置CRC参数
6 ~% d4 T5 ^. r9 \* R3 ^7 |! F; x9 ?4 j; b# T1 i
8. PCROP区域函数无法被调用的问题与解决" S  E  u7 \/ u8 Z0 o; v! E
* M" g" a: l& U
9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题- |% N7 Q9 \& L) L9 U% A9 [

# s+ X  S" N5 d) a10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计; O) A  L4 T  N) t0 q7 ^

1 m/ Y  x4 D( _6 a  r1 g11. 如何用LSE校准STM32F4内部RC振荡器& y3 r2 Y# i% @, K
2 X6 m' v% r0 S9 S0 w# F8 s
12. EXTI重复配置两次导致误触发中断的问题  
4 r9 z" k1 j  s8 l5 J* X% r- u
* q! {4 |6 [- G& L- w2 d2 O2 k13. 时钟安全系统的应用(LES篇)  
. f# g  V( z( h
$ k" Z' j$ `4 d8 ^( p
14. 利用DFSDM开发PDM麦克风应用介绍  
, s- |5 |; e) R! W
& l$ _! s; n7 U7 F* J, d4 N9 l
15. STM32H7的FMC外设在DCACHE使能时运行不正常
9 `) }/ ^/ |2 x
+ N3 d5 s. I7 _! F* ^& {, c; m# o16. STM32H7 DMA 传输异常案例分析   (2019·3·19更新): i' h7 p) |8 P' S; F  e
/ q+ e6 a# D: d* Y; L0 D) |1 a
3 Y" q7 o  v: c, k* u  J3 w8 X
九、标签和收发器2 _: y" O7 n$ g. q# G( W2 m2 u
3 @9 e" x# p( O& O2 ^  |
1. CR95HF的初始化步骤
- y4 ^2 y  |6 [5 H 0 s( Q. d- h- N. W- T0 T

) c  O3 G  l& h# k' @: m1 K& v: [: b+ w! ]9 B% v" L5 @4 f
十、生态系统7 P1 j1 \7 M% a

* S( b! S! C; l5 Y, C; P( `1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题
# u/ l0 m9 G. C! z+ g* F7 ^! U9 X / I& h3 m2 T+ N' j
2. MDK Logic Analyzer 功能在STM32中的实现问题7 s4 L9 h% n# K2 |2 ~  a  |
0 c5 I' ^2 K, o5 A4 t, a& w
3. 在IAR6.5下如何将数据存放至flast中
* h( P" }! J  [) S3 m * v( i3 y7 R# P4 Q+ a& T' _3 g
4. FatSL移植笔记
8 R" `" t( [& G6 [, n
- F9 B+ I1 w$ q. ]5. Keil中使用STM32F4xx硬件浮点单元# h" C9 k' @  k7 I7 D

8 ~6 b" R; |" W. Z  ]/ ]6. 如何生成库文件(MDK和IAR)* h1 y" M2 b) o! I
  Z' R: s  P. b* B3 U& _3 K( M, _
7. Nand Flash文件系统解决方案
" x9 k" d+ L  c. [
4 g( _# Y" {; E, o! ?  y  f  _8. STVD在调试时弹出“Cannot access configuration database”的解决/ F! p: K# o6 W5 I8 H+ I3 l4 V

; n, ~( Z2 Z2 w' D6 N+ a9. RTOS低功耗特性的设计原理和实现
! F/ a: [7 _6 g1 ]8 m, H
# I: W3 U, [, t" I10. IAR下使用J-Trace进行指令跟踪# [8 e' V) {4 f( u( t1 M& @

6 N" @' b( ~$ L% J; h% t& o4 b11. STM32上RTOS的中断管理8 n9 }. ?1 T' P  \
  W6 ^4 W+ G% l% }
12. IAR下如何让程序在RAM中运行& v- m/ C" T. q  A/ ?( n% q; O9 M% N

; M. H6 J3 a9 }6 B8 V8 Q13. 如何在IAR中配置CRC参数( A- K+ g# X* B# |# \. ~: J

( r  o* l9 G6 T$ J: m14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册9 ~8 n1 r, b; E* y+ J
( W0 W' h$ j. @' |6 q8 E4 V. S
15. 使用mbed进行STM32开发及STM32F0的时钟问题
9 W, a: p6 ^# e2 m/ u* J- N& k% G
- h5 L( B% [2 D3 V3 [16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能
0 [5 k) n8 _7 A4 ~0 ^( T' m
$ D' {( G* V8 e/ a" e1 o' N17. 多任务系统中的不可重函数使用注意事项
( V7 K- m3 U5 c1 }: u# q  M
. J. m) S5 J- O& r' w2 A8 C18. STM32 utility的hot plug功能
$ R1 ]+ m5 {% g$ E9 V& a: i4 \
) n+ ^/ n& Q7 F' j' r% k19. 如何将CoreMark程序移植到STM32上% [* m6 o$ D: a! [6 D- J
% Y2 V. Y" ~" M! b  g% t+ v: k. ?+ j& O+ i0 {
20. FreeRTOS定时器精度研究
# c$ R( v2 Z3 o0 o2 q0 J; `6 K5 o$ ^4 F6 y  }2 N: h
21. 如何使用Eclipse和GCC搭建STM32环境
$ n9 V5 w6 [7 W4 h! R" K' S- \3 f- d
22. 如何建立一个基于GIT的STM32库9 ?  x! \% u7 a6 G, W

$ P$ {( F! I4 G% T7 W$ G4 l) Z23. 从零开始使用CubeMX创建以太网工程
8 A5 _7 {6 H4 g+ ]7 j0 z7 ^; l7 A9 R/ o" h# c/ Z
24.从STM32Cube库向标准外设库移植FatFs文件系统! Y$ z2 n+ I7 r' |
  p. h0 {* w8 R3 Z
25. 基于 STemWin的屏幕旋转) E+ ^: \; i$ I" }

# L3 o" E1 X/ V# h/ Q, w2 F26. 编译软件 Hex文件烧写 " U5 i4 z& m7 p1 A4 w  i
7 q6 A; u) F$ U3 j- w
27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台 & F8 w" j: B0 J' T% _$ \4 L! C

9 [  ]& X: T- W7 |& _7 K, q; c  f28. USB CDC类入门培训' |" w. k( \3 Y" v9 n% ~

9 R. L8 j( C! L* u29. USB DFU培训 4 k' z& R: d& S9 c
- \0 j+ e0 w1 b; U) l1 G3 g. b
30. 用于量产烧录的拼接Bin文件操作
& V8 X  Q. ]% H; ^; |: h! z
& ?7 B! W9 Z0 ^; H$ c6 \. N3 D31. STM32免费开发环境该用谁
4 k* f) k0 e+ B5 G) b/ w) P8 f+ g8 b4 c  M2 w& n- D1 `. u  S' |) K
32. 免费全功能STM32_TrueSTUDIO_9.0  (2018.3更新)# w, w, X  ]) Y, a8 T5 z! ~

9 r8 R, l3 r# ]5 l5 ?! O33. 基于STM32L4 IoT探索套件开发AliOS Things  (2018.5更新)
/ }2 G* X1 @" F' Q, C0 [9 n. m6 r4 v/ q/ W
34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决  * F* {% X3 S- T& W1 }, y
6 D6 x7 q; E; s  U4 h2 i; [+ b
35. STM32 FOTA 例程之 cJSON使用   * P0 }# ?/ ?6 B9 h3 }# Y$ o
( x9 r% R4 ^; Q9 y
36. STM32F769DK 云端固件升级例程使用说明
9 y' S7 s6 T2 O) I" `" s& g$ N! t

, K) w  b3 K0 S' U2 J- f5 c37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用
+ v3 k8 M! A( N
; f% m8 n- |) _" {" ~38. 基于 STM32 的阿里云物联网平台方案 8 L& o4 i' u  ]3 }) p  o2 b" \3 j
8 g' V4 n& N6 f2 E& C) e2 ?" |
39.AliOS 任务上下文切换原理分析  
2 A9 X7 u1 s  c9 [9 a( l- [3 Q9 R. V) Y/ z* L
40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题  5 z" |- I4 m! v2 C

& E  O( g9 Q4 W& a$ \& \41. STM32F769DK 云端固件升级例程软件开发文档  - ^& K4 }  T& K5 j* S2 P
1 I8 p6 c7 x% U! u2 W, A
42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新): Q1 @$ F9 p: S) a3 U, S# d. d2 _
8 P! P3 p: [6 @! Y& _7 |
43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19)
) K8 k8 ~, E' \: m3 o
6 w/ y+ h7 Z& X* L44.零基础快速入手STM32MP1 (2019.9.19)- q% f! n6 ]+ p$ q8 W4 Y

- P! K0 ^' P% |6 W* K( I! t7 N2 |7 ~1 ~45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29)3 v, [, \; b0 X4 ]' k9 ~
0 [- v, @8 w. e' F3 h, a
十一、调试
& P2 d& v6 w* ~
5 f3 A/ s3 z( u1. 关于STM8S SWIM Error[30006]的分析
4 B# h: R6 d6 o9 z3 P
+ c8 e8 o$ s7 ^3 o3 }2. STVD在调试时弹出“Cannot access configuration database”的解决! \/ L2 H2 @) O6 x3 k- X/ N
( T7 f8 F. z; O
3. IAR下使用J-Trace进行指令跟踪
# [3 o! c8 j& c % S: T- T1 t- V* C1 j
4. 菊花链 JTAG STM32" E  L# _/ j* ^* s  A
1 u: f1 z; m( |+ }7 e
5. STM32F411CEUx 能下载程序但不能执行
; h1 ^0 n* n0 Z+ H
3 O8 [" v2 [2 ?! ]1 J6. STM32F103C8T6 程序上电跑飞
- _0 U* V2 a5 N7 T/ r" w7 d. \/ A& n9 H3 I# @# x: H8 m) R
7. 使用STM32 ST-LINK Utility 设置读保护后不能运行
- _8 `/ p: b! ^2 x. J, ]% N% i. G
8 m/ z! r" D: P- B' G/ V$ Q8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法  
. C& [+ \5 A( q4 R% f3 u1 `# F/ Q4 a% G8 N4 r! L4 m
9. SWIM协议的GPIO口模拟
$ V+ L- @- E! @( w4 _" g; X, |6 L9 C$ D3 x2 ?: b. V
10. STM32F091空片使用ST-LINK烧写后复位不能运行用. r& k) t" R. ~1 o4 `/ n3 A
- N7 U! v, ~. W; T: P
11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新)# Q6 h$ ?; d$ m' H# Z

  r: s2 ^$ {0 O/ z3 ~0 x1 i( t12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)
( M- H! w+ Z! g7 L, \3 @; Y) S# Y- J1 c% q
13. X_Cube_ClassB代码移植 (2019.12.24)
5 J2 _( z; \% g9 B: K: c7 _5 u0 f! ~0 M  N# T

; y2 C& q$ X& q! p5 {" D( x$ M14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)
$ }, v. n3 K6 W8 [, D3 v# P
) j3 _1 r2 D; U  b( t十二、人机调试
% s# B2 U5 a1 T9 L# [# g( M3 M. d4 H8 F& a" U7 I
1. 一步步使用STemWin在STM32上开发一个简单的应用
; l; Z9 m; f9 J! U. Y$ X
8 }1 t' U- v- E9 B( H3 n% @; q2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计7 E. X* j. G% C& w
$ @  A1 G. |+ f8 C/ t) J* S
3. GUI方案中ALPHA通道处理介绍5 F7 _+ h0 ?" V  }! S  Y: a+ m
& F9 k& J& [2 ~: @) w# P- T  {
4. 基于FMC8080接口8位LCD的STemWin的移植$ ]* w5 e2 H5 N) A/ m9 v

. i; F3 x0 K# m5. TouchGFX中Callback模板实现原理 (2019·9·12更新)
* j% A% T( k% ^' G- s; t" V
" d* e4 ]# o7 w6. TouchGFX快速创建滑动应用例程 (2019·9·12更新)0 U4 {0 y9 i& D: @8 Q; N! h8 R

) S! j9 }, k( C# u7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27)7 T  f; u! s3 s9 D) l" J6 ^' P
+ B9 [$ d# y) f9 F5 s
8、STM32L5中如何关闭trustzone (2020.5.12)( b+ t! U& P, W

  X  p0 o& Z) C% s+ m3 `2 y十三、马达
( h& h* X* M6 h: O
4 E# H; g) m8 ^( M: t9 `+ T
1. 电机控制同步电角度测试说明3 }% x% J2 d, U0 ^, w
' f. Y+ V/ {0 R" {) E( ]- S

! V# l& x' }( ~: P( G7 o( c! O
* H  w) ]3 Z' e4 c十四、安全" w% \6 O" o; i

% H8 w9 S' y3 j5 f) d1. 一步一步使用STM32安全启动与固件更新(2018.3更新)
" N$ }6 q- V( R* A9 x1 e
& _' O( u1 _5 n7 X+ C! f. e$ Q' ?; L
十五、其他' c3 q$ q, ?9 \) s# ]

6 \* L& G+ |: f( P! A8 U1. 跳不出的 while 循环- k% P7 i! l. ?+ t' ]  S9 A/ F  Z$ {
6 M- c) H: A1 {% ?! S3 y/ ]
2. 外部IC连接NRST导致MCU内部复位信号失效的问题2 u" G; s$ z. G8 u: Q2 P! D
+ s( Q* o$ n5 Y5 l' O: o" }
3. 潮湿环境下不工作
+ A9 |+ @$ V2 _: v
; C6 T3 ~4 d  K6 J" e8 N* i4. PCB 漏电引起 LSE 停振
% X4 E7 [  y+ h  ~; f4 S 7 V' {8 Q- O  q, h+ }0 s
5. STM8L152 IDD电流测量
# Y& X& w2 Y: T/ a! Y  A- H   |+ m7 K5 ]/ n7 }
6. 使用STM32实现锂电池充电器" P4 S- R; e$ `' G! U3 A
8 k8 S% i: @, a
7. STM32_STM8硬件平台基本检查
+ f. a1 Z; s" i. ]5 X
4 N! N. a- q1 [, V( |4 k, T. ?8. 验证STM32F401在STOP模式下的电流, g' F. }- y% r' U+ e0 j3 y
/ N4 l2 B- m+ C- W" H1 y
9. P-NUCLEO-IHM001 电机开发板串口调试指南+ q$ s4 P5 d' D+ R/ J

( ]8 V0 S6 |1 B! P10. 一种计算CPU使用率的方法及其实现原理. J$ `- b* m; X+ B. u
6 t6 v$ U4 I- J) s2 c
11. STM32 RTC不更新原因分析
) H9 i$ Y7 Q; F1 e% w, p; ^  _- ~3 ~# x1 ~& A/ ?$ t$ G
12. 关于ST库函数的代码性能对比
( ?$ z* q. Z! A" e
& c- {/ o, l- F; ?1 ]0 Y- D4 b  x13. 在IAR中实现通过将程序在SRAM中调试的方法$ p, p1 ]7 d9 J6 H  w

) Z: @4 D( k' O7 R6 Q14. M95xxx EEPROM写保护配置# x2 I9 D' F4 m  U! b+ w, w( [$ B0 K
5 h4 Y- j0 z/ n
15. 4SRxx的GPO的属性
1 o0 N: E$ L9 A  I; u: H0 D( ]+ }9 B2 b1 h) ?
16. CR95HF的初始化步骤
$ w& d" Y, e! _  y5 }: h/ B* r0 b+ _( g  G, y# y% u# ]
17. 电机控制同步电角度测试说明  6 F: A4 ^" V, R2 t" V" o& G
9 ~6 C; T$ Q7 F3 X: Z0 W
18. STM32+BLE通过 Notification与 Android应用程序通信的例程% O/ m% @8 L% e5 d
3 c+ C4 f4 R/ T9 E9 p9 f) h7 T: i& O
19. M95xxx EEPROM介绍( z' g* R4 `& o) E, D* r4 k* Y" {

' p  j+ f3 b3 B20. STM32 DFSDM测量温度应用 ' Z7 E+ @" G& l* P
7 v) \4 o# @5 U. y9 _5 Z9 a# y5 R
21.代码实现PCROP清除
/ g( {, [1 }8 s( `6 E
; C( ^2 I7 P: Z2 W: P1 w9 e- {22. 理解与应用MPU的特权与用户模式+ W" y& C; g- A2 H. b. Q, q$ U4 x
' k: N  l% n! ]4 ]+ d" p! C
23. 用于电机控制单电阻采样PWM变形信号产生6 b' H8 V6 \2 [* V: ~

- R8 d5 P: u+ S' x3 m& V$ p24. STM32L低功耗模式唤醒时间测量
5 q* W2 w7 Z5 |* S& ?
" o$ Z5 W+ Q% D6 M, Q" t25. X_CUBE_SPN7程序电机启动抖动问题5 f0 f5 j, M/ Y- A3 \/ G, s# [1 R
$ y# X* \# @' K. g
26. 发现STM32防火墙的安全配置9 Y( j# B6 N+ ~- _% f
2 e: Q  L  q: I
27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改
0 h" w7 S% z  Z: v$ m. |- V1 v3 m% ?& S
28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新)
8 d# p0 d/ m3 T
/ L6 ?, m; \' Q
温馨提示:

- {9 j+ j/ w" r6 \4 `* V7 i
如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。

) a1 o0 a2 s: _: V6 U  }  d, H
  s9 [! b+ S' W7 D# p7 N
/ Y$ }: ^  }+ @6 n; E$ R
8 N+ B0 I, r- f2 S) n9 I+ s
, [& a; O+ j; I# ?0 B2 r! Y6 |1 ^9 e! ^

+ T4 X; o6 }  j8 }; \& W% \1 N, g* Z( E) q" I; U
6 b& y) F5 `  p
8 d" t8 Z# @/ l
( U( h( L3 d2 \5 i- e0 g

评分

参与人数 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
好详细,多谢分享) v/ w3 t9 h2 e9 d4 |3 Y# M4 u
5768340 回答时间:2018-1-13 14:42:54
HI  
" t1 o" E' U* L9 x   有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
9 u" R0 k) [' w* M* L   期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
  1. /*****************************************0 I$ ?) c* A' h- y
  2. 函数名称:Cdfinger_Bspspi_init* M6 s; K0 p: e2 j8 {) Q1 O
  3. 函数作用:spi初始化函数
    7 v4 ?/ W+ {% Z+ K" v4 T0 y
  4. 备注:
    2 Y8 P' x3 N" @) w, p
  5. ******************************************/2 g& P9 ~) x+ w+ {' _# w- l
  6. void Cdfinger_Bspspi_init(void)- f% l: M1 M& J  h5 k3 ]% e
  7. {
    , t4 _2 `% m$ I) d4 B7 ?
  8.         GPIO_InitTypeDef GPIO_InitStructure;
    , i7 O8 h9 g$ R) v+ x/ [* K
  9.         SPI_InitTypeDef  SPI_InitStructure;
    $ i: X+ u, j& f; I
  10.         DMA_InitTypeDef  DMA_InitStructure;* f0 ^/ @: p9 b9 ?1 d7 r. N
  11.         NVIC_InitTypeDef NVIC_InitStructure;- m: f+ B8 H" s- \
  12.   
    , o# K; q) f' V* M: P' v
  13.         int ii =0;3 w9 O8 p2 J1 P1 b
  14.         9 d8 P  }1 ?+ [+ ?, `) E
  15.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
      Q4 r; V$ S7 M
  16.         /*!< Enable SPI2 clocks */
    ; C4 ]& Z( b/ J
  17.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);8 [! b5 \: _% z- p- U& F6 J
  18.         /*!< Enable GPIO clocks */
      S) Q$ G" h3 ~! e+ W( ^2 V! y; I
  19.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
    0 H; ?; ?" L. ?. X1 Z
  20.         /*!< Connect SPI pins to AF5 */
    " p& r; v" ^% e3 k3 Z2 i9 }5 [, X
  21.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource13,GPIO_AF_SPI2);- t! u; T: H$ w* T5 }" n( v7 j
  22.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource14,GPIO_AF_SPI2);
    : ]! y( v, H8 l2 v" d1 R4 X- z
  23.         GPIO_PinAFConfig(GPIOB, GPIO_PinSource15,GPIO_AF_SPI2);' @$ S' q* q. P& B& t9 B
  24. $ l4 I3 Q5 R: m' i9 O
  25.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;6 ^4 W/ P+ S' C' s) E* b3 e
  26.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    . D0 d! @7 m7 ^) D" y8 G' {
  27.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;: m5 c; ?0 Q, S) D  Q
  28.         GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;9 o$ y' L( K% t" R4 b
  29.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;& s, r( D; y3 a+ J4 I( r3 H3 j
  30.         GPIO_Init(GPIOB, &GPIO_InitStructure);
    ) o! G9 a2 E1 [
  31. * a9 {" Y6 T7 c& ^& l8 L
  32.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;5 ?0 i! m4 x7 a% T3 h, }: p
  33.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    , I" X9 A+ |2 O) R. V
  34.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    , N7 n  o; V8 F
  35.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;" P5 U* K' N5 l: ]+ o
  36.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//GPIO_PuPd_NOPULL;
    4 i$ h, B5 Y7 ~' M) J2 Q; P
  37.         GPIO_Init(GPIOB, &GPIO_InitStructure);' V$ r& z4 [; ?/ \% x
  38.         Cdfinger_BspCs_HIGH();9 N! S4 b1 J  g7 F6 D, `3 J
  39.         //Cdfinger_Bspdelay_ms(1);8 @# s7 C: d  z5 x8 A6 n/ F
  40.   //Cdfinger_BspCs_LOW();
    2 u9 T0 z% N% T& H% T& g* q/ Q
  41.         SPI_Cmd(SPI2,DISABLE);
    , m2 S9 n+ H# U
  42.         SPI_DeInit(SPI2);
    ( ~$ {: Q6 {4 j) _
  43.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
    ; S& _. m) ^8 b& U3 {* e: g6 r
  44.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;- C, |$ ^: h( K& K5 p, g
  45.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;! |) j3 G  P9 @. T4 ^
  46.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;1 ?% f/ v4 X' v0 L$ V
  47.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;. _9 a' F" o. U8 n0 t
  48.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//;2 A0 A& m$ S/ L2 Y, g: E# [
  49.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
      t$ m. i. V0 H! o/ o
  50.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;% m* [+ P, B5 t
  51.         SPI_InitStructure.SPI_CRCPolynomial = 7;
    4 o) J+ W, f5 v2 P  B; v
  52.         SPI_Init(SPI2, &SPI_InitStructure);6 L. Y1 ~1 y& x  u$ ~. U3 G4 C- Y

  53. 3 I' I  C% c3 v/ u2 F
  54.   memset(&cdfingerimgtxbuf[0],0x55,COMMUNICATIONLEN);
    % U& n* g( h6 c4 ?
  55.         /* DMA1 Stream0 channel4 spi tx configuration **************************************/
    0 E1 o# \. ~! I, M- d' M  _
  56.         DMA_DeInit(DMA1_Stream4);
    : d( A0 I; B) e
  57.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;+ P3 Q$ r" C, W4 c# B  ^
  58.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);
    ) n: g& A0 M: W: _& O+ L. A
  59.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgtxbuf[0];
    " h5 u) e$ q0 L+ ^. ^' m
  60.         DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;) y, G+ y" i) p
  61.         DMA_InitStructure.DMA_BufferSize = COMMUNICATIONLEN;
    , n, d9 S6 [! Z1 O! Q+ N
  62.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//;; @! ^' U) j( w( E
  63.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
    9 g$ y6 t8 e% K( s3 {
  64.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;) H& y3 }. X7 \# ]' D2 m* p
  65.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;& R! y4 c( E* T# O* a% x( E
  66.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;// ;
    : V( k9 d+ v8 s0 @' E
  67.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;//DMA_Priority_High;
    * u6 i! u+ H) ^
  68.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//;//DMA_FIFOMode_Enable;
    & M0 }8 X, w9 J# k2 O2 l" h
  69.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;' P+ m, N" e: u$ c+ Y( F- i
  70.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
    ! @/ W6 j/ j% m6 m( d/ O
  71.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;7 y" u* ^; ?* A- i
  72.         DMA_Init(DMA1_Stream4, &DMA_InitStructure);. L# P8 E0 @# ^" m+ ]. t
  73.   6 ]& y0 H% G9 |. g: T7 _
  74.         /* DMA1 Stream0 channel3 spi rx configuration **************************************/" r, F2 y" K9 r7 o
  75.         DMA_DeInit(DMA1_Stream3);
    ; P" d( Q1 k" E* e& x8 a! Y3 K
  76.         DMA_InitStructure.DMA_Channel = DMA_Channel_0;. w0 v% m* n. \! h  y: m
  77.         DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI2->DR);) L8 k  a3 x! [. J5 J( r. h
  78.         DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&cdfingerimgrxbuf[0];//(uint32_t)&cdfingerimgrxbuf[0];
    , z& d) u; z( u4 U
  79.         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;% i9 a2 |, i" E, X- ?: U0 {. X' ?
  80.         DMA_InitStructure.DMA_BufferSize =COMMUNICATIONLEN;& I2 ]- i; I& b* K& s5 T# d
  81.         DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;( r& {: p, i. ^+ g  n( @) s
  82.         DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;1 E1 l; G4 @* I* y+ R
  83.         DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;; n: B, K* `9 u
  84.         DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
    0 L9 ^6 m, E) L
  85.         DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;//DMA_Mode_Circular;
    6 |8 ~; S2 Y# `
  86.         DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;//DMA_Priority_Medium;
    ; M) v0 Z  h; K* o9 {/ A
  87.         DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;//DMA_FIFOMode_Disable;
    / S& D2 @5 g; b7 W
  88.         DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
    5 y3 `5 a; X5 l+ v# Z1 j$ Q
  89.         DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;7 ^. t. {5 ]3 v) {0 C7 d, ^3 f1 D
  90.         DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
    $ }6 v$ r: A6 m
  91.         DMA_Init(DMA1_Stream3, &DMA_InitStructure);
    # n/ Z: @; Q7 [! p  D* s4 H* c" j
  92.         //Cdfinger_BspCs_HIGH();
    1 b) A6 L# y  \/ j
  93.         0 ^9 V2 K" O3 X  Q  G4 D

  94. 0 @5 G, S3 Z  s
  95. ( a. {. Y7 }4 t/ u
  96.         //发送中断
    ) W8 q' R$ }) r& f
  97.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);6 ~/ q8 c, S3 F7 ]5 v( C. R. D+ @1 K
  98.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;     
    " |" b$ c0 q* @- u
  99.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;" I8 ~4 @. D0 }8 _- g$ `8 W5 x/ {
  100.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;
    : x+ ^2 N/ b% ]/ l, U1 {
  101.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    ; Y  T; B# Y4 \) O2 k
  102.         NVIC_Init(&NVIC_InitStructure);- i8 ]2 r  S1 d1 z' ?' T- s/ n. Y- _
  103.        
    ' j! R, w6 W; U8 D
  104.         //接收中断
    ' I$ F5 |( O) Q: H
  105.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
    / y, r9 A: x7 @( c- O) O
  106.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream3_IRQn;     9 A$ r. u; X' X2 [+ [, u- j
  107.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    0 {2 m% }  ]1 X% _% }
  108.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x04;
    2 w& i0 ]( X& o6 [* |
  109.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;+ I$ ^' N) Y1 P; [# h
  110.         NVIC_Init(&NVIC_InitStructure);
    4 U7 ~, a8 D  U' t: R: w" ^
  111.         SPI_TIModeCmd(SPI2,ENABLE);
    & D7 a$ I0 L' @9 Y- q
  112.         SPI_Cmd(SPI2, ENABLE);+ L; C5 ~) i7 Z$ D  H  x
  113.         DMA_ITConfig(DMA1_Stream4,DMA_IT_TC,ENABLE);2 z1 P6 M) B5 g9 ?: B$ l+ |
  114.         DMA_ITConfig(DMA1_Stream3,DMA_IT_TC,ENABLE);
    & T" M  m6 Y& Y3 G1 Y
  115. , x$ i, U, |1 Q: Z' g" {  O
  116.   DMA_Cmd(DMA1_Stream3, ENABLE);
    8 {$ S9 m% C. |6 N/ ]" D) @
  117.         DMA_Cmd(DMA1_Stream4, ENABLE);
    ) T; F0 P+ A+ k
  118.         SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx|SPI_I2S_DMAReq_Rx, ENABLE);
    7 B5 \1 r: ^# F; ?9 A/ U

  119. 6 c6 I* ?4 R2 X
  120.         for(ii=0;ii<COMMUNICATIONLEN;ii++)
    / c1 `& a4 Y- a1 B) e) h
  121.         {
    1 n0 V+ W# v' c' g" p" Q( b
  122.           if(ii%8==0)3 K3 [- q0 u7 p0 a2 E
  123.                 {6 N  W  w/ v: a  X% R
  124.                                 printf("\r\n");
    5 F6 t9 e! P: ], O% f# K
  125.                 }
    . C! S2 w/ k- L) _
  126.                 printf("  0x%x",cdfingerimgrxbuf[ii]);
    " O6 \' ]7 m$ m8 J
  127.         }
    1 H( U, p8 O+ Z' K
  128.         printf("111\r\n");
    $ L$ J" p7 e7 {
  129. }, I* z/ U$ h& A$ d9 E' Y

  130. - R! b0 [: c) Y
  131. 0 C+ s2 S" s; Y& R% l
  132. void DMA1_Stream4_IRQHandler(void)
    * \; t" h8 }9 K& P$ `. n
  133. {
    ' U& M. @$ r0 \- L# Y0 C+ m/ a
  134.   if(DMA_GetITStatus(DMA1_Stream4,DMA_IT_TCIF4) != RESET)
    , t: u- d( F8 E8 G
  135.   {
    $ }: V7 M- U. O) d$ n) P
  136.           printf("DMA1_Stream4_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream4));
    # B1 {% H  _9 o" v5 K( G" D+ P
  137.     DMA_Cmd(DMA1_Stream4, DISABLE);+ m# r" j- u8 ~
  138.                 DMA_ClearITPendingBit(DMA1_Stream4,DMA_IT_TCIF4);% _$ N1 E; O8 O( ^& b
  139.           DMA_ClearFlag(DMA1_Stream4,DMA_IT_TCIF4);  b. O' u2 x- J+ a" i
  140.   }
    6 z! d/ W/ \: h, {: P
  141. }- j0 q/ s" h0 j6 A2 p2 T7 v  x/ k
  142. ; N  {6 M+ \; {4 U. A3 ]2 p$ W
  143. void DMA1_Stream3_IRQHandler(void)0 s4 p$ v2 k; H8 y
  144. {$ @  ?0 V4 `* B1 c- k. o$ \  n
  145.   if(DMA_GetITStatus(DMA1_Stream3,DMA_IT_TCIF3) != RESET)9 M4 Z0 r" _; l$ F! g, m5 k/ p- A
  146.   {1 v7 ~% a4 P+ Y. ?$ h" a( }
  147.           printf("DMA1_Stream3_IRQHandler = %d \r\n",DMA_GetCurrDataCounter(DMA1_Stream3));
    + }- E7 A, ~3 r$ I
  148.     DMA_Cmd(DMA1_Stream3, DISABLE);" K" ~3 x0 T. ?' t& j, V
  149.                 DMA_ClearITPendingBit(DMA1_Stream3,DMA_IT_TCIF3);6 u, z! f7 l/ {2 ?
  150.           DMA_ClearFlag(DMA1_Stream3,DMA_IT_TCIF3);
    % h- S7 K6 O) g. h
  151.   }6 D; C1 T6 u0 E
  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  A: `! E+ [/ a1 R. R以下是全部代码:
6 q" }' L; L) q8 z2 Q#include&quot;stm32F4xx.h&quot;$ y2 @- T% w$ C9 t9 B& C
void RCC_Configuration(void);* M# W, B* Q9 t; e! ]
void GPIO_Configuration(void);
4 F  {5 w' h- r; h' T; C6 P8 R$ e! Dvoid SPI_Configuration(void);/ e( q8 e/ X( M3 s7 r- K
void Delay(int nCount);& }3 v0 A. w- E+ j* ]5 X  x
int main(void)+ X, X! i& a# ^9 T# P
{  RCC_Configuration();5 s9 c* E4 t8 _
  GPIO_Configuration();
# T: D. R+ N8 X& ~% C% t2 z. x9 Y  SPI_Configuration();
/ A: P8 c( ~4 ?9 B9 x while(1): g( D/ j( m: W: e
 { int data=0;, u6 v& C2 U" {) b* ]& B' ?# T
  SPI_SendData(SPI1,0x55);
& D9 U8 a: Y; Q- \* `8 I( i4 Y  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); ( K' j1 @3 Q' m+ p4 y
  data=SPI_ReceiveData(SPI2);6 Q' y  k( h& c; H
  if(data==0x55)
- k7 d% d4 u# F; c$ }     {  while(1)
, I2 W' o; j9 j/ U0 b             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);4 f6 `* T2 G3 N% _; Y7 L9 W
                Delay(0xfffff);* @# G0 k7 c6 e5 ?7 B, T
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);3 y6 b0 {# o* ~0 g) h! R, g& d
                Delay(0xfffff);
# C: n5 f- t& @+ v& ^& ~' E# n# d4 Q* U  
9 l3 B5 l# E0 X/ t% `3 s             };
) A, I* [6 @( q) u9 e/ X     }6 ~* h- T# H! |$ a6 K! G. N
     else while(1)
6 c* N0 R* l; T6 N# P/ g; p" I            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);. f; F  E: q* E3 J- C! e
               //Delay(0xfffff);
) \- E8 \1 p. U7 T               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
& m" T8 S; U" {% k( w) R# ]               //Delay(0xfffff);, L) D$ g4 p# |6 m& v7 ~
   # Y+ L! ]" e5 `
            };
/ H  g; O; S& I }
) k0 b8 r6 k9 u4 o3 L, ^& Q}" D& x$ q4 u5 o. ~! T) V9 l$ a0 F1 U
void RCC_Configuration()+ a, T' }& O8 Q: n9 s4 v
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);3 t+ ~" k0 G, ^3 [9 y5 N/ o
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
; {  q1 |- A8 v  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
0 n4 @& [: G+ q}( c; a- [8 K2 ~
void GPIO_Configuration()7 f- j3 Z! Q6 H
{  GPIO_InitTypeDef GPIO_InitStructure;& F2 |" \& j' v3 Q+ t
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;1 R# R) d# a7 k+ ^! |) k- b
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
' p: T) |, a1 {" f$ [7 x9 s. z  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
. l/ x5 @7 z; v' m+ o+ h  D7 o6 M/ r  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
/ w5 @" n9 T' C0 t9 \; w2 ^  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;& f6 H2 G9 t, S& k$ h1 ^- y; l* ~
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
9 u2 [- C  Q1 c' ~  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
% m. q. J4 C; [+ i8 x1 {( k8 c  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;! Q  p$ L$ V% d
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;6 m, m. s4 ], l1 W/ U! ^
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;" Z" {  J5 u' F, A
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;# x) _4 l9 K+ O# L: L* k! E- K& U
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);
2 K' A& J0 J! a: Z9 Q  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
+ l, y" o" k) |  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);9 q/ W/ T  x: |* U* ?0 p( T; G* V4 l7 {
}
. P/ D% [0 [( Y) u) q# Yvoid SPI_Configuration()1 O, W# X- U0 ]; w8 ]
{  SPI_InitTypeDef SPI_InitStructure;% ^5 U$ J8 z- ?  q# {
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);; }' z5 z) @" H8 R" q
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
  h; ~: J, p) ~5 e; r3 }  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
% W7 N, E! k8 P' t) \$ g- |   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);+ C' c  ~5 m# L0 N
  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
! t" R6 r) ^/ m8 ^+ N: S  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);$ W& q$ h* e% z: P. w
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
& e, w+ b! T$ Y' D8 C) W, M  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;  V& |' x$ h& w& ]+ M4 F/ K; D
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
6 J0 i' l' S, J1 m* y2 B+ |7 n* M+ q  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;! v0 V0 A- \4 T* e7 g
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;! t, M# a! ]! N0 r$ O8 B
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;# N. N* O0 l$ W) `& |& |% {3 ~. T( V
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;7 [7 t$ L. t+ |6 h0 U
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
7 {) ]4 c2 Q2 N* J  S7 N; X  SPI_Init(SPI1, &amp;SPI_InitStructure);
! e5 O  m2 u5 V' h* o" X9 k  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;% F4 _) }5 s; {, a* {1 i
   SPI_Init(SPI2, &amp;SPI_InitStructure);; [# J7 z4 C! O; s
   SPI_Cmd(SPI1,ENABLE);$ a- G$ Y6 R) }( ^) d% {, `
   SPI_Cmd(SPI2,ENABLE); 
5 u. b1 X( f4 z}. N. J4 K" `: V" S4 j; D
void Delay(int nCount)
6 d' b+ H" {! @2 F{ int c1=nCount;6 A4 d; v! V( v
 int c2=nCount;
8 T( B# u1 d  R* q* f$ \( C for(;c1&gt;0;c1--)# ^- e- t# J) w3 Z1 Q/ l- B% u
  {
% V3 b4 ]9 h# w" j3 b+ D+ W& t& X  for(;c2&gt;0;c2--);( r7 M" w9 H- ]6 Z" `
 };
' x2 w/ d% S4 S6 _$ ]  o}
6 N9 V  q! E# V) T( z% @先谢谢了~~
沐紫 回答时间:2014-1-23 15:22:54

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

回复第 2 楼 于2014-01-23 15:10:56发表:* [2 j4 }1 J3 c# `" D3 C" m& j
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信, s5 y+ N# t. Z, j2 Z
以下是全部代码:3 N$ t( a# I) e. b, K, X' @4 f& [
#include&quot;stm32F4xx.h&quot;
. ?: }4 b" a( r' v- Dvoid RCC_Configuration(void);, e* P" e6 O7 Q0 |) I) B( g" M
void GPIO_Configuration(void);
4 E" D( y" K* \; b) Kvoid SPI_Configuration(void);# a8 l& O7 C7 A+ A) E6 |5 V
void Delay(int nCount);
/ \* _& n4 r: k& tint main(void)) V8 z7 M: Z( z) m
{  RCC_Configuration();# j/ Y$ g9 w! E6 F+ G$ Y/ _2 V
  GPIO_Configuration();
. S. T4 r$ c& Q: X  A2 C  SPI_Configuration();
/ u6 k. I. |( l2 H1 z0 J, S while(1)
- V) i! F! L; f. I- ?; X) Q { int data=0;( m6 B3 P$ e! \- t- ~; n7 b; n
  SPI_SendData(SPI1,0x55);
7 b/ H7 k$ M/ z, e1 ^& m) V+ F/ u  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
6 \) f( e8 B1 F3 L  |& _  data=SPI_ReceiveData(SPI2);( I8 e* p5 Y" x/ W. U
  if(data==0x55)1 ]' B4 w7 c3 a5 o" q
     {  while(1)/ z% H6 ?) R3 a0 ^
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);9 ~* C7 o9 G, E
                Delay(0xfffff);
/ s, P: f& d/ Y, A5 ]                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
3 O# A! b, N9 P                Delay(0xfffff);' g+ c5 z5 c4 Q1 J8 ~5 }  q
  
9 \7 o/ o" [; ?9 p: }& O             };* F; _$ ?% `, B
     }! {) p9 r& r- N7 H! b6 b
     else while(1)! o; }9 n& V& {9 s
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
3 N% j! i+ D. P               //Delay(0xfffff);- z% v) F. Y9 d6 s- r  m! l
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
: e6 o* h2 p% L+ ?2 r. z! l4 r: T               //Delay(0xfffff);  J, l: \3 D! J- c
  
: f/ |5 Q' V" Q            };
* g1 b9 j; f5 B, L5 I) l; v) L }
9 |# l7 l/ E" T$ ]}7 I4 F* I8 \/ D# i- F9 \
void RCC_Configuration()
4 s9 [: R5 R" |1 w8 r; ~8 G{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
8 r8 W# J) n* p6 U' w  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);# J9 N1 V9 |4 ~) [6 Y
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
$ O& c$ D5 A1 c; U& G}
0 ^% f3 A" g  M; \( r+ \6 D' J  hvoid GPIO_Configuration()1 \, H4 H+ V; C: g! H/ |8 p; L
{  GPIO_InitTypeDef GPIO_InitStructure;
& U: A- Q/ @0 w4 n5 ~9 b' w/ Q  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;3 l  ?! Q/ e. A5 p' D
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
5 E. v- L3 y7 i  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
9 d0 O0 N/ h4 c( a  f1 G  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;  g3 I; Q+ w4 u* `  V  W
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
0 @& c5 Y( g# Y; S- j) U  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);. Q& k8 u3 ~& M. _. T
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
' a& ]4 E: C& Q  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
, Q: p1 U* h7 G' W# h  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
, M7 `: `" @3 `; N+ H  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;: w& |7 A5 @% F* l1 ?
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;6 j! M3 ?$ X  T
  GPIO_Init(GPIOA,&amp;GPIO_InitStructure);! ]6 ?; x* n  v) w4 a
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
9 C5 n1 X  ]0 }% n, _0 e( z  GPIO_Init(GPIOB,&amp;GPIO_InitStructure);
1 e5 r% n( `; V3 g+ [% _}5 i, z) v( Q/ o% `: S' E+ @
void SPI_Configuration()
5 B" s) e/ M+ ~) x6 Y, E8 U4 A. A$ J{  SPI_InitTypeDef SPI_InitStructure;& A  K3 J- B( U- M# B. c
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);0 k/ A; s$ X) U& X
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
5 u# @+ a- v. r. ]# W4 D  GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
4 m* Z- M* B" E& r" b- b   GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
0 x( K  @" F" D  GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
' g5 |1 M8 Y: m( d( q% n  GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);1 o: c9 i% O9 P( K* A" Y3 G
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;. S" h3 {) E' X! @2 v6 A/ m5 A
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;+ R2 y, d- W* t' y% Q6 C# F9 X* T
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
& V0 n/ K0 V0 c  h5 F) J  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;5 c7 p& X+ c- _$ O) o$ N0 i. y6 ~- I
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;( C' C5 G! P5 t2 x; S' f1 ~
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;: Y+ F& {- B. f) t" h% p* ^% O. y
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;; }: D# ]- W0 X: b% ]( a7 m/ ?
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
. J3 `, ~8 N4 z/ T" C2 D9 D  SPI_Init(SPI1, &amp;SPI_InitStructure);9 m, M# b9 H& _7 q4 p1 F! q) @$ V
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;& n% l- T3 f/ b
   SPI_Init(SPI2, &amp;SPI_InitStructure);
2 ?+ p! z1 H- q  m, x7 ?0 q" p2 W; w   SPI_Cmd(SPI1,ENABLE);
2 I6 @; w8 a' @   SPI_Cmd(SPI2,ENABLE); 2 Z. f; y: b# _4 O/ Q# h/ H
}7 v1 x% M" o: u8 A6 j
void Delay(int nCount)0 [9 O  g/ a$ @6 d4 w  G7 J7 ]; M
{ int c1=nCount;
. D, p1 h) f5 D& H- O3 J  ] int c2=nCount;
! G0 u- [2 I% h for(;c1&gt;0;c1--)
; L+ D# [  S; O' R3 A/ e: t( R  {
" ^& g4 }2 @0 ^; H8 w; k  for(;c2&gt;0;c2--);7 ~( h( W9 J/ {+ r3 _/ M
 };
7 C7 x. w( k1 P/ t}
( x6 D$ v1 R/ U* K2 s( O! y( r0 g先谢谢了~~
% A; I3 ]4 V0 T+ R- A; u0 P 
0 o2 h* {' o/ X0 M; s
2 I2 b2 w1 g* t+ k楼上的问题,看我帖子给出的提示哦~
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发表:- g% O; h7 N+ U. c. o9 W. s. q1 p
 多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。, e# ^7 g0 l! }3 L
 6 w$ Z) k! B  I
, R0 f: F7 S$ V- z% m: h" y
多谢支持!!
abner88 回答时间:2014-3-9 13:43:20

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

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

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

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

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

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

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

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

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

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

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

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

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

  
2 L$ c* l8 \6 X, X* f1 @鬼魅一样的Hard Fault
3 U! e# `; A; h& p3 ?4 `# }   f3 U4 O' }3 H0 Z
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。" `1 @% {8 i0 g$ f% T. N
 
5 g; L1 S8 e3 M. R咋解决?
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 手机版