>>实战经验列表+ E' }3 d! t9 v. E+ j, u % a3 l3 r' ?: U5 f$ W8 O: a/ \. k ' [/ ^; i6 G& _ 社区资料下载栏目开通【ST MCU实战经验】版块,将在这个板块中,针对工程师的应用问题,ST做了详细的解答。进入ST MCU实战经验后,可直接下载文档以及程序。也欢迎大家回帖交流。 1 w3 ~( u, D z( H' Z! d 提示:点击各主题,进入帖子,可下载ST工程师解答详请! {; {, f4 y' m8 W6 H) q/ O, d 8 d! c$ \6 h- M 一、通信接口 E7 W7 |9 Q5 ]; J( u 0 y4 _' C) ^5 U9 w$ t 1. STM32F2x7_Ethernet(FreeRTOS)驱动更新 h9 r) I4 i% s3 [, D! z2 i . u3 d, z! u* P 2. SPI 接口发片选信号导致死机 2 _+ k7 [6 I: O: b6 m7 O+ \ 3. USART1不能设定600BPS的波特率1 d" ]. p2 P; p* `: F" h9 L - B; x" Z+ n" T! [# e& _% \ 4. I2C 接口进入 Busy 状态不能退出) a( ]' W2 p6 B' O+ e ! h- z" k# Q' N! J' e/ x( Z 5. 对 Flash操作导致 USARTU接收丢数据 6. USB接口易损坏( O& `( e, v& y* j 7 j: k: j) { k' A( B 7. UART发送数据丢失最后一个字节1 i; W8 S4 y. O# B @0 M ) O5 ?" d* X" H2 G 8. 使用 CCM 导致以太网通信失败' R( O% ]" Y1 z4 d* F- C4 c 9. SPI3 接口没有信号送出% v4 _( m/ c; L, |+ i$ I( E( B8 ` { 6 W, a2 r* r( e7 W! H8 B9 Z, i1 o& F 10. 时钟延展导致 I2C 通信不可靠 , ]' K5 u. n& u. `2 _6 Y- {/ H$ @ 11. M0的USART波特率自动识别问题 12. WK15 OTG做U盘主机兼容性提高 # M& O: h! o' i5 M, i1 J$ r 13. 以太网电路设计注意事项 14. OUG主机库在BULK传输上对NAK的处理 / L- N5 D+ T% U" y G; `4 _2 K 15. 串口断帧检测2 \+ E. \ L9 K$ X 16. VCP例程用于数据传输时丢失数据的处理1 U% T9 O7 ]: j 17. STM8L051F3P6串口UART数据起始位判断的问题 : J! N3 X* i5 P9 J 18. STM8L152C6T6 硬件IIC,发送从地址后无ACK信号 3 z5 _2 l4 U+ e$ l5 I 19. STM8中UART奇偶校验的使用方法 20. STM32以太网硬件设计——PHY/ Q" L. H R" @- U, B( } # X3 P& j) |4 g% ^( N/ U' ^ 21. 一个判断I2C总线通信异常原因的方法 22. USB device库使用说明/ z( m# Y6 ]3 u0 G2 g8 e: Z * C2 Y8 j. F! u 23. STM32F103上USB的端点资源 1 E. [5 I/ A& X# E7 ~3 u8 h% y; e* t 24. 使用CubeMX生成TCPEchoServer程序2 G: r7 H. ~0 Z7 S% i % h0 |. y5 _ j 25. SPI接收数据移位 26. STM32F0中Guard Time的设置% M6 I3 i- @7 v: t - I2 \7 V0 s( U3 Q6 e! s5 E 27. LwIP内存配置( U8 g* A" i: R! h( l 28. STM32 USB Device的简易验证方法 $ M) B( `4 p) @7 `0 \9 {& x7 \ 29. USART 中断方式接收无响应问题的一种情况及其处理方法1 ? p% e. V6 s" r' K 30. STM32 基于 Nucleo板 CAN总线的建立& L8 U/ t3 Z- V8 Z. @4 T7 p 31. STM8 CAN总线的IdMask模式的讲解 0 t, v& _- I1 |. N; \+ l7 X 32. STM32F746ZG USB 驱动不正常 / Z5 W" D' o* M3 V) \. J2 H4 |9 Y" E9 O 1 F) r( i2 L6 ^- a' d* I 33. MCU在STOP状态下通过UART唤醒分析 34. 通过STM32CubeMX生成HID双向通讯工程 0 {" _6 \- i2 I1 y % ~; e; B, Y7 l) n 35. 串口工作在DMA模式下有时接收异常 3 H( _! {; U; |5 E 36. STM32 Bootloader中 DFU使用限制/ O6 ?. Y: V8 ?+ { " v/ c. I4 G- u3 ~ 37. UART异常错误分析 38. 基于Cube库无法检测CAN2的接收中断 ( m# h+ O: R4 h5 n9 z$ [+ P ! c% B; l5 O; |" a 39. 基于STM32F7的网络时间同步客户端实现 40. HID与音频冲突问题 & h4 \9 ~0 _( M8 x. Y M" z" |6 L6 ?8 g& @; W1 V 41. 在进行USB CDC类开发时,无法发送64整数倍的数据" Q! N$ Z( J0 t 42. 从零开始使用CubeMX创建以太网工程5 Y) [/ G) y- y! E1 { p 43. STM32F4xxx的I2C总线挂起异常处理4 N, I. X) H0 N& | 8 H: F1 z! ]0 T z* X 44. LPUART唤醒STOP MODE下的MCU 45. STM32系列 MCU模拟双盘符 U盘的应用' ?8 W" j$ j. w( B: ~6 [5 R 46. CEC输出的数据和数据长度始终不匹配 47.STM8Lxxx I2C 程序第二次数据通信失败的问题分析 8 S- e; o u7 H2 r% x, Z& q1 K$ j) c 48.在进行 USB CDC类开发时, 无法发送64整数倍的数据(续) 49. 增加UART接口应用时的异常分析4 _% f- i) f' N | 50.UART应用异常案例分析 51. I2C配置顺序引发的异常案例( V5 T, e8 Z* ` s; m7 o6 p4 L 52. STM32 USBD VBUS GPIO2 E* `% E% k8 J & |- H/ O" x8 r' ~( A8 e 53. USB传输数据时出现卡顿现象* C1 L" @% S: e7 ~7 G 54. STM32的高速USB信号质量测试实现! M3 c7 q1 m' V" o, D/ E " Y+ N4 X8 h3 }5 I2 Z! G1 @ 55. 基于STM32 I2S的音频应用开发介绍 8 C0 D0 n; w* k- C3 b4 g* J 56. HID_CDC复合设备在WIN10的识别问题 ! ^9 m$ s1 M5 l ; s. x" E, O' h( m 57. STM32F767 的 USB 工作在 HOST 模式下的远程唤醒问题 : ~9 b/ ?4 T+ I 7 H2 A9 x2 ~0 M+ r 58. 一个关于LPUART输出异常的问题分享 & o9 \: C; W* T; P 59.通过 DfuSe 工具控制程序跳进 DFU 模式5 q# O/ Z3 D* N" m9 d : w+ k, P7 v) p, o' i 60.UART IDLE中断使用-接收不定长串口数据 (2019·9·更新) 61.一个因初始化顺序而导致异常的话题 (2019.12.24)0 T3 l$ T. a# N* r+ j8 G 62.MC SDK 5.x 中增加位置环 (2020.5.29) 4 y3 T" y& F. m+ m' H 63. 如何根据应用需求调整STM32L5的memory partition(2020.7.16)! {& j, ~1 V. [2 Q7 Z3 H / _6 ]* F) U9 o ~ 64. 使用STM32的MPU实现代码隔离和访问控制 (2020.7.16)3 C! ~5 n: k) P5 V9 B5 C 二、电源与复位- I# G% J" M9 h7 S: t, D6 D/ d# K 1. Vbat管脚上的怪现象! n- U* r, D' ~ 2. 上电缓慢导致复位不良2 `6 H0 C8 {3 N- T) i0 c* z/ j ) T) k8 C: m: A8 p G. `& v 3. 关闭电源还在运行$ U# n4 E2 s6 ]. c# S) T " z; K. n3 X$ k; l$ U1 S" z2 Y 4. 使用STM32 实现锂电充电器1 C* M# h L0 h- q 5. STM8L152 IDD电流测量 6. STM8连续复位问题2 r- ? @" W4 {2 @ - `+ q2 T% K. `( O R 7. STM32F2电压调节器REGOFF与IRROFF引脚的使用 : P. N) _: T# ^5 U& X 8. 使用STM8L-Discovery验证STM8L在LSI+WAIT模式下的电流 7 D( n) _: b/ T; ^ 9. STM32F7与STM32F4的复位序列比较 1 X6 ~" x* K2 s( M 10. STM32F107 复位标志问题 ; g+ C' i& h. L6 L& T# T 11. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法 9 H" m( c5 r; F/ I% f+ x9 r- p& a 12. Nucleo_L053不上电也能运行 0 R5 @* k6 P0 n0 j& g/ a' f" m( E- ` 13. STM32L4中STOP2模式下的漏电流3 l% x3 o. K2 u$ N1 |9 [ w 14. 在没有外置晶振时HSE_RDY异常置位 R; Z& L8 [, w* [ 15. FLASH被异常改写 (2018.5更新) 1 S* W" D9 {0 y) f4 T 16.与 PDR_ON 有关的一种异常现象及分析(2019·2·更新) " l8 ~7 g1 g* k9 R( F) p$ m 17.一个 STM32 芯片异常复位之案例分析(2020·2.27) 三、IAP和Bootloader! c- S5 J' ~+ {, b% P( N & J6 ?% k% B8 s( o6 M: `4 a- L 1. Boot Loader与上位机通信不稳定2 D; `5 A( Q$ l+ U) J5 J: _ 9 _1 S4 ~+ W9 D# s# Q! s) R 2. IAP+APP 模式下不能启动 RTOS; {, A+ t- C4 s/ V8 e 3. 从 IAP Loader 向 App 跳转不可靠 ! _ @/ W' j2 k 4. STM32 MCU IAP例程跳转到APP代码简要分析* v, Y$ T2 a" y : F6 G6 p3 S9 o8 ~ 5. STM32F091从自举程序向应用程序跳转的问题与解决 6. STM32F09x不使用BOOT脚实现System Bootloader升级代码 n( L1 H: Z. @5 r$ m+ s 7. STM32F0启动模式相关问题探讨 " o2 B( M5 Q" n8 c 8.STM32F091空片使用System Bootloader下载代码 3 o9 q' j# a/ b' D% E# R/ p 9.STM8L IAP 应用程序中编程指导 5 y0 t: A1 a% A- o" V 10. 如何通过STM32的串口实现简易脱机编程器/ w* t3 Q9 ?0 |. g$ b 9 U5 n) ~, K5 y) x. c' _ T( _ 11. 一种从用户代码调用系统存储器中Bootloader 的方法 9 I3 u% K' z5 a, w/ b & _( s7 A1 q! i2 x3 M6 C- ? 12. 利用 USB DFU实现 IAP功能: P3 t) h8 `9 W g& }. j& R" C1 m , G3 Z, _+ I5 j* G, _! N0 f" u! U* ? 13. STM32 Bootloader中 DFU使用限制, L' B8 E8 t1 x. X( T9 z4 C 14. STM32L011x和STM32L021x启动模式注意事项 15. STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项 16. 无法使用内置 Bootloader 的 DFU 方式进行固件升级 / q" U% s/ h+ {$ K, y9 K/ o T ( S5 J. D1 Z6 l7 X% U 17. 如何使用STM32NUCLEO 板来测试串口Bootloader ! {" w% d, J0 t6 I 18. 在STM32L011上通过I2C接口实现IAP& w& e- T" o5 [& T7 S* E 19. 在IAR中实现通过将程序在SRAM中调试的方法9 y4 q \# H" c6 e F 4 I; ~/ S. l: |1 w, E$ c 20. STM32F769AI 同时使能FMC 和QSPI 带来的引脚冲突问题 + H w0 f# j L, E1 _& d9 V8 s* ]0 a 21. USB DFU IAP 例程移植的两个话题 ; Y; |3 n( Y2 V. H 22. STM32F769双bank启动( S4 t& R9 R0 I! n2 t 9 n- i( X/ w0 }) c/ M- O6 S 23. DFU加载 工具 DfuSeCommand的使用 0 i2 b# B/ \1 q. T H! P6 r 24. STM32F0 使用 DFU 升级后 Leave DFU Mode 不能运行用户代码 4 J' Z6 r+ _! g; e/ H# j I" l1 W) [ 25.STM32F767的USB工作在HOST模式下的远程唤醒问题 (2018.12月更新) 26.STM32 Bootloader异常复位案例(2019.4)$ x% f* Y7 e$ K1 r+ y! ?; F 3 ^0 z8 j7 F: X! D* { 四、存储器6 J# W, S3 n! \6 D$ v 1. 对 Flash操作导致 USARTU接收丢数据& t4 J7 X% ^$ M$ m2 m 2. 使用外部 SRAM 导致死机 8 _; R" p+ A0 b7 x/ ] w* U 3. SRAM 中的数据丢失 ` o/ E, `0 {4 H( u+ x/ }5 q 4. 干扰环境下 Flash 数据丢失$ E! j& `+ \/ B9 M4 d: r6 l ?5 X, |8 e: Y. m% ~ 5. 使用 CCM 导致以太网通信失败: W/ O1 b( q5 [' x! ]" n$ B 6. STM32F429使用外扩SDRAM运行程序的方法( b6 J6 f1 a2 O" h4 i2 u" c 7. 使用STVP实现对STM32L1系列EEPROM预置数据 . b7 C* K- n% o! E 8. FreeRTOS RAM使用情况及优化方法 9. 在IAR 6.5下如何将数据存放至flash中 f& k0 d, C0 B( O 2 v1 V& p0 o1 @. v" S E" I: T0 R" W 10. IAR下如何让程序在RAM中运行9 K/ Y8 O5 z, H' y0 R+ b, q9 a M) @0 G1 h y# S& l" w 11. RAM上电后初始值问题) W) V* ` Y9 j0 b/ \ 12. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计' v) g$ l3 O6 Y( f 13. LwIP内存配置 ) G* @- i# v& ~& J# I 14. STM32F2高低温死机问题9 d) l2 g4 a9 O( }5 C 8 W9 S4 M. V% C4 Z3 p 15. 使用STM32F427的CCM RAM时遇到的问题! P& r6 y q$ V$ n ( P, M4 |+ h& B* k" a! f g5 ` 16. 利用QuadSPI外扩串行NOR Flash的实现 4 o. U7 K4 W3 |) w* g2 p& r $ d3 v ` M6 k: L9 ? 17. STM32擦除内部FLASH时间过长导致IWDG复位 ; m% U, q9 T' K4 t" R + L4 j1 t! i8 {3 c$ F8 X 18. 基于STM32CubeMX开发U盘访问应用 (2019·6·18更新) 五、模拟外设) q* p1 b$ ], ^5 N 1. ADC对小信号的转换结果为零! V/ ~' J) ?# t' B4 x# U & p1 P' ?0 L" ?1 e; q [& s 2. ADC键盘读不准 3. 扫描模式下 ADC 发生通道间串扰7 U2 m. D) X$ w* k- l l' \, M 4. DAC无法输出0V的问题分析解决 5. DAC无法输出满量程电压的分析解决 6. STM32F30x 的ADC 采样的傅立叶变换 * w. B/ J+ K5 {% k: b1 P 7. STM32 F1系列 DAC的示例详解 ; e R) g. ~+ h% n/ U9 s* m% D 8. ADC 连续模式采样浮空引脚问题 9. PWM硬件间隔触发ADC , J9 p9 ~! |& D, y. L 10. STM32F30x 禁止ADC 已关闭情况下再次关闭ADC# ~: @" `0 x6 s; T- n, h 11. STM32L4 系列中ADC 通道配置上的区别. v. F: g9 t& F* W ! _/ T# ~* g) ] 12. STM32 ADC模拟看门狗及其应用' M% r4 {- k# U, B, K% N 3 c0 @1 C. W& u' p; X 13. STM32L053 comp2 比较电压无效问题 / k5 l: P5 u3 K% ? 14. 运算放大器OPAMP在STM32L4上的应用4 s" @" U# \7 A0 Y 2 }% \, s8 c" O 15. STM32 OTA例程之ESP8266使用 16. STM32多个ADC模块同时采样转换的应用示例 (2019·7·24)' S( B' {- F3 b2 x$ v3 ?- m 六、计数外设% u( _- E! i0 L% @& J % Z) T9 j/ _" G6 s4 l6 W2 L* @" m5 G 1. Watch Dog 失效 2. RTC计秒不均匀 # e2 y. W) D- w# H ?1 P+ c 3. 软件启动模式导致 IWatchDog 失效 4. STM32F030R8 定时器移植问题3 g& R9 A* F5 X$ i & N, h; E1 `# E9 p1 s6 p 5. STM32F0使用RTC Tamper的几个注意事项' T7 Z+ I6 V7 W& k o: t % B8 d# C2 B; I+ ?9 m4 r 6. STM32L053可控PWM脉冲方法之DMA- l0 Z8 |' K1 f: g 7. CounterMode,OCMode与OCPolarity关系 % U i% Q7 i9 K9 Y: o% A- I 8. STM32L053可控PWM脉冲方法之DMA 9. STM32F1通用定时器示例详解—TimeBase4 W i% R- O- o* i- o- t1 x : Y4 l- G1 \1 `% S7 S 10. STM32F1通用定时器示例详解--TIM15_ComplementarySignals 11. STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 6 A# e8 ^) x( D: B+ Z# V& { 12. HRTIMER的多种Fault事件联动机制 13. STM32通用定时器 示例详解 —One Pulse 14. 如何用LSE校准STM32F4内部RC振荡器 ; X; Z* W% u0 B x: _ 15. 一种使用Timer测试HSI实际值的方法 16. FreeRTOS定时器精度研究 17. HRTIMER产生多相相移信号9 r* D5 q3 G' a; q: A 18. 窗口看门狗启动时异常复位问题 19. PWM硬件间隔触发ADC 20. STM32F030低温下RTC不工作 0 t3 i. K# T% c9 L( O 21. 教你一手 | 基于 STM32Cube 库的 Timer 捕获应用 22.STM32F334 应用于LLC + SR 的高精度 Timer 波形产生 (2018·9·29) 23. 基于STM32定时器实现定制波形的示例 (2019·7·25) / @0 t. L+ B6 O 24.STM32定时器触发SPI逐字收发之应用示例(2019.12.24)7 X9 e8 a, c& E 25.MC SDK 5.x 中增加位置环 (2020.3.31) D5 V; o. D" N" S 26.STM32高精度定时器PWM输出话题 (2020.4.29) & F5 K" p, Q; a! [+ J, l 27. 基于高级定时器的全桥移相PWM发波方案(2020.5.12) 七、内核9 c/ @' X$ V' N! u" [9 [; e1 U) v: ~ 1 J& _0 h6 T4 P x 1. 使用指针函数产生Hard Faul 7 Z7 v8 q" f$ [7 B, O- T 2. 调试器不能通过JTAG连接器件 3. 鬼魅一样的Hard Fault " }2 T. I. U* C' t) }6 \ 4. 进入了已屏蔽的中断[! w/ y1 f( y* w 4 k7 B& V6 [2 t1 T( \7 x$ y$ S, Z 5. 浮点 DSP 运算效率不高% A6 W8 J j- g% U- e {8 W+ a + _; t, r7 N0 ` 6. STM32上RTOS的中断管理 7. STM32F7与STM32F4的复位序列比较 - L2 H/ D! ]4 C- J 8. STM32F30x 的ADC 采样的傅立叶变换 9. EXTI重复配置两次导致误触发中断的问题% E- `: S4 R3 j/ _( R& u ! f7 Q( J: ?$ X$ L 10. STM32F3xx/STM32F4xx使用浮点开方指令 11. RMW(Read-Modify-Write)对 STM32F7xx内核运行速度的影响6 P% @0 s' O1 Z1 f# s 12. STM32F7 MPU Cache浅析 13. STM8使用24MHz外部晶振无法正常运行 (2018.3更新)3 `% k; @6 j$ p6 C; G% d0 [ , Z7 d. L. \! ^" Z 14. STM32F0 不同代码区跳转时总失败…这些操作你.. (2018.6更新) 八、系统外设 ( B) M" s3 Z- W1 h8 p& t 1. PCB 漏电引起 LSE 停振; e+ m( E% Q {; }" |5 X 2. 时钟失效后CPU还会正常运行 3. STM32F2中DMA的FIFO模式 4. STM32L053的GPIO翻转速度的测试# T: X: L/ _5 M6 q. U8 m5 j 5 i# W1 }. F( r$ T; R0 S 5. STM32F4xx PCROP应用1 R+ e9 U6 |. \. W 7 X4 v8 l! e4 {8 \( w 6. STM32L053的GPIO翻转速度的测试 0 R$ g" G8 H N2 m1 L* Z 7. 如何在IAR中配置CRC参数9 d& N$ l! J4 @" J( W3 q # V" V& w6 t' k2 J* t/ p% O 8. PCROP区域函数无法被调用的问题与解决2 F, V: B% r+ e, ]) u0 E1 w 8 {! k0 d4 a" Z0 U 9. 关于AN4065中STM32F0 IAP升级后的外部中断不响应问题 ( j( Y; { `& H( z4 Y( X1 S 10. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计: k/ x0 F c# n5 o - ?2 d3 g4 y! J7 b2 v' c1 j 11. 如何用LSE校准STM32F4内部RC振荡器 ( e/ K3 u) w' l3 |7 ~ 12. EXTI重复配置两次导致误触发中断的问题 , f* N; {# D* x% Y% c 13. 时钟安全系统的应用(LES篇) ) D7 T( P; Y+ ^, D * [7 q1 ?$ M: O( [% h, ^/ E 14. 利用DFSDM开发PDM麦克风应用介绍 ; E+ i n4 [+ C1 X! e/ k+ P, L 15. STM32H7的FMC外设在DCACHE使能时运行不正常 16. STM32H7 DMA 传输异常案例分析 (2019·3·19更新)! [1 s. F# J% S% I7 B) w0 H" g * ?% i1 I1 p* E9 [6 l $ O X9 E& E, i* \9 x' t' C 九、标签和收发器 1. CR95HF的初始化步骤 , {' O- b/ z/ \+ O$ |3 q 十、生态系统 4 p9 ~& `2 u( B% W M9 T' ^. T 1. STemWin_Library_V1.1.1中STM324x9I-EVAL的RTOS工程显示不正常问题+ A. I! K U: a: K; r+ w2 r 2. MDK Logic Analyzer 功能在STM32中的实现问题2 M0 o2 J; K( S& z7 g" M9 p- t* K 3. 在IAR6.5下如何将数据存放至flast中 9 l' p" u! Q3 d8 C$ ?4 V4 ^ 4. FatSL移植笔记 " E7 h) z# U4 Y W9 H7 W 5. Keil中使用STM32F4xx硬件浮点单元 & b* I1 E3 c" V8 E 6. 如何生成库文件(MDK和IAR) 0 m& ?, b, d, e$ Y. j- o 7. Nand Flash文件系统解决方案 # k0 b9 _- p+ X. L& j' R 8. STVD在调试时弹出“Cannot access configuration database”的解决6 s" q9 }: K9 _$ T 9. RTOS低功耗特性的设计原理和实现2 W7 X2 C4 W( |3 S L8 M 10. IAR下使用J-Trace进行指令跟踪8 X9 o7 }( _( T9 H! o# _ 11. STM32上RTOS的中断管理& Q$ B& Z+ e0 x ) I1 J9 o$ b$ U 12. IAR下如何让程序在RAM中运行 3 u/ U) }5 Z: T3 [ 13. 如何在IAR中配置CRC参数9 x G, H3 p- s* ^0 P 14. 基于STM32F411 Nucleo板的Broadcom Wi-Fi开发套件的快速开始手册 E( O; F, |2 {" [ 15. 使用mbed进行STM32开发及STM32F0的时钟问题7 G! q; w' V9 C 9 f5 z9 h }2 j/ c: v; I5 v 16. 使用STM32CubeMX实现USB虚拟串口的环回测试功能 K9 p& V5 R* B- F& `8 S 17. 多任务系统中的不可重函数使用注意事项, ] U' V- J* I, a% A( T5 b . t7 h3 e) B& \9 u! h 18. STM32 utility的hot plug功能7 n9 e" n# B: N2 U8 ?6 C: Y 19. 如何将CoreMark程序移植到STM32上% y# x" b+ o, c9 [ r 20. FreeRTOS定时器精度研究 6 H3 k# }+ s* c/ W& h+ q+ P' S* b 21. 如何使用Eclipse和GCC搭建STM32环境 22. 如何建立一个基于GIT的STM32库3 L, R* Y" Z' i+ Z" V2 h 7 c; r+ \6 s) y8 ], H/ O 23. 从零开始使用CubeMX创建以太网工程 f% E4 h9 K* @ 24.从STM32Cube库向标准外设库移植FatFs文件系统 25. 基于 STemWin的屏幕旋转 26. 编译软件 Hex文件烧写 27. 使用B-L475E-IOT01A探索套件连接AWS IOT平台 28. USB CDC类入门培训- _0 j% t* t$ X5 I 29. USB DFU培训 30. 用于量产烧录的拼接Bin文件操作 31. STM32免费开发环境该用谁, Y, A0 @1 M1 t# x- |! e 9 J2 A) n2 g( g( j. L, G, L 32. 免费全功能STM32_TrueSTUDIO_9.0 (2018.3更新) 33. 基于STM32L4 IoT探索套件开发AliOS Things (2018.5更新), @0 @9 u3 g. v7 L) J3 P; }9 I8 |. }3 d4 f 34. TrueSTUDIO出现 Program “gcc” not found in PATH的解决 7 L& c8 T) O! P) W 35. STM32 FOTA 例程之 cJSON使用 ) N: j/ X7 n+ V: Y9 C" l 36. STM32F769DK 云端固件升级例程使用说明 - |& p) T+ f7 M1 m g" \1 I) V; ]) V/ Y 37. STM32 FOTA 例程之 Paho MQTTClient embeddedC 使用 + u1 V5 Q8 @! g8 f4 k, y 38. 基于 STM32 的阿里云物联网平台方案 / V$ `$ c( p/ |% C9 e 0 Y9 s6 O3 p' G; I2 X9 y/ U* E) [ 39.AliOS 任务上下文切换原理分析 40.STM32F334 上的 ADC 管脚和 DAC 管脚 复用问题 41. STM32F769DK 云端固件升级例程软件开发文档 8 I+ u* u5 N: ?. h( A6 q. r 42. STM32CubeL4 固件库V1.13.0版的RTC唤醒问题 (2019·6·18更新) 3 z# q" z6 j, V7 s% x2 u 43.使用USB虚拟网线(USB Ethernet gadget)直连STM32MP1和Windows PC(2019.9.19) $ [2 V9 U6 a4 M- E) h 44.零基础快速入手STM32MP1 (2019.9.19)( _, L1 K1 Q s7 _' d 45.STM32L1xx与 STM32L1xx_A的差别 (2020.4.29) 十一、调试, s1 g8 E4 u; n' O% r 1 U) W: v, u& \- V! b" x 1. 关于STM8S SWIM Error[30006]的分析 2. STVD在调试时弹出“Cannot access configuration database”的解决, I# N. p: ^/ I$ p1 K) v 1 b& Q" g# g5 h9 p& @ 3. IAR下使用J-Trace进行指令跟踪 7 n3 I) R+ ~( Q, [$ U4 w) S S 4. 菊花链 JTAG STM32& S5 z- n9 z1 p# F2 u2 A' g2 Z0 G9 d ) |3 ]1 Z' I) k( k+ T" c# m* D 5. STM32F411CEUx 能下载程序但不能执行! ]0 ?! z" O, T ?1 I+ E . X: E0 }+ S, W( q( d 6. STM32F103C8T6 程序上电跑飞 7. 使用STM32 ST-LINK Utility 设置读保护后不能运行& M. `1 L& X) E% N$ {3 H 8. VBUS引脚一段时间后管脚无法正常工作的分析和解决方法 9. SWIM协议的GPIO口模拟- z1 y$ C9 B: c4 E' I+ W. G 10. STM32F091空片使用ST-LINK烧写后复位不能运行用% ]* A. \: _5 u' }; }2 h 3 O+ C2 K. F, e1 v 11. STM32L011对空片进行编程后程序运行问题 (2019·9·12更新) ' S1 {% E m$ f( g, t 12.如何在IAR和KEIL中计算CRC值 (2019.1.2.24)/ G( [ e$ B5 K; l( p i 13. X_Cube_ClassB代码移植 (2019.12.24) $ X; o2 Q0 o% N l; e" i9 l0 j 14.Keil中烧写STM32F750内部Flash方法 (2019.12.24)# Z- t. F- V" n ?* _( l ; K0 j/ E& J2 y+ @ 十二、人机调试 1. 一步步使用STemWin在STM32上开发一个简单的应用 t1 ^5 o1 w8 L9 k) J) _1 g8 f 2. Stem Win 驱动移植-FLASH&PSRAM(MCP)接口驱动设计 3. GUI方案中ALPHA通道处理介绍; g; _# G9 p# G |* s- K, F+ P 4. 基于FMC8080接口8位LCD的STemWin的移植 ' T5 h- ]# e0 _+ W5 { 5. TouchGFX中Callback模板实现原理 (2019·9·12更新) 6. TouchGFX快速创建滑动应用例程 (2019·9·12更新) 7、TouchGFX 简单界面设计_按键控制光圈移动(2020.2.27) 8、STM32L5中如何关闭trustzone (2020.5.12)9 l# r V2 ~- e ( }' l& w. T# b. I# s 十三、马达 ' z, ^6 ]( G0 |) Q 1. 电机控制同步电角度测试说明 ' D! V2 a1 i( U5 T 十四、安全 1. 一步一步使用STM32安全启动与固件更新(2018.3更新) 4 J7 h2 m8 {: s! d; D 十五、其他 3 ~! I) g2 J {3 h. f! q 1. 跳不出的 while 循环 / C4 F" j$ G+ \- K* }) E0 s/ i8 ` 2. 外部IC连接NRST导致MCU内部复位信号失效的问题* {; e5 \4 {; w 7 z/ R2 V# ]; b 3. 潮湿环境下不工作 U4 j5 q- q7 y- q/ i- U 4. PCB 漏电引起 LSE 停振5 g: ~0 b- D5 j" x) z 5. STM8L152 IDD电流测量* {; j6 l$ u4 Z G- r 6. 使用STM32实现锂电池充电器 7. STM32_STM8硬件平台基本检查 $ X6 \( {: ^( u 8. 验证STM32F401在STOP模式下的电流6 m; ~# B' U/ F+ r- ~ $ _8 o @; _2 O& M) } 9. P-NUCLEO-IHM001 电机开发板串口调试指南 $ m7 M1 p' s, Y6 [& C2 O( B 10. 一种计算CPU使用率的方法及其实现原理 ; S# ]( v/ ^, U5 g; H$ ]0 p 11. STM32 RTC不更新原因分析 1 b2 q+ U" f2 Q; o' L0 O9 T) f 12. 关于ST库函数的代码性能对比 13. 在IAR中实现通过将程序在SRAM中调试的方法4 V. M3 t) x$ d9 q5 \/ k9 J $ P; z1 k8 c: E4 j: b2 x4 B 14. M95xxx EEPROM写保护配置 / i4 c3 F; N+ a8 G& `3 B1 D 15. 4SRxx的GPO的属性 0 z% s. [$ O6 `) e! ~% f; r& x 16. CR95HF的初始化步骤 / H! v0 E/ S4 q& \/ P& N 17. 电机控制同步电角度测试说明 ) k9 m- x% n4 \( R! ~. f6 `- j0 J+ X6 u 18. STM32+BLE通过 Notification与 Android应用程序通信的例程 - b# F5 A* Z& a 19. M95xxx EEPROM介绍9 I Q. N* @3 E8 S; @* U' T 20. STM32 DFSDM测量温度应用 + h# Z; m) Z) B/ [" L6 l2 R 21.代码实现PCROP清除 ! q- S9 `$ W7 I2 @2 I 22. 理解与应用MPU的特权与用户模式# C$ z v# g+ e' j7 H 23. 用于电机控制单电阻采样PWM变形信号产生- s: _ j" F9 ^2 ]3 ]: S4 C% i f 1 Y% B) l* T6 u' z7 L+ e; e 24. STM32L低功耗模式唤醒时间测量 " F) F1 W. i# z/ g7 j5 J 25. X_CUBE_SPN7程序电机启动抖动问题 26. 发现STM32防火墙的安全配置 27. ST FOC4.3库关于STM32F30x系列ICS采样代码的修改 $ ?4 b6 N8 J, y, d 28. 如何用STVP 命令行模式对STM8进行批量烧写(2019·9·12更新) 温馨提示: % w8 y' q& P' f! ?如果您在使用ST产品过程中出现问题,欢迎在社区发新帖提问。版主和工程师网友会热心帮助您。 【社区导航】STMCU产品购买、技术支持、意见咨询指南 , B) }/ H4 Z+ m- q" A6 d) u4 d9 U0 o, S0 ]' h3 Y ) n& \+ v! H v% J* ^ |
有个问题纠结很久了。使用的STM32F205RE MCU SPI2 进行DMA 传输,数据量大的时候接收的数据会乱,直接将MISO 和 MOSI 短接测试的,代码如下:
期望接收到的全部为0x55 ,实际出来的是前面数据正常,后面的数据就乱了。
回复:【ST MCU实战经验】栏目开通!官方解答应用问题,欢迎下载!
以下是全部代码:
#include"stm32F4xx.h"
void RCC_Configuration(void);0 I+ k' O" W# ?) x- _
void GPIO_Configuration(void);
void SPI_Configuration(void);
void Delay(int nCount);: H" c x; _0 @: q
int main(void)
{ RCC_Configuration();: Y @8 G: x( d% F( B0 B
GPIO_Configuration();
SPI_Configuration();9 `9 M& e# q2 ^7 Z. x
while(1)
{ int data=0;; \) z$ v5 K# h4 D% Q" v( `
SPI_SendData(SPI1,0x55);* X. G0 u* |5 u9 ]% R2 D+ n5 S
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
data=SPI_ReceiveData(SPI2);
if(data==0x55)# ~# U0 [: s* Y+ c! H
{ while(1)
{ GPIO_SetBits(GPIOA,GPIO_Pin_4);
Delay(0xfffff);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
Delay(0xfffff);
0 _3 a7 W7 a+ [+ r% \2 l" y
};
}; o5 h# u5 h" a" ~
else while(1)8 d' t) ~& r7 j6 q8 w, b
{ GPIO_SetBits(GPIOA,GPIO_Pin_4);# H% F5 ~! b$ B6 R1 S, B
//Delay(0xfffff);
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);
//Delay(0xfffff);" s) [; g1 y+ o! _
};; _2 S! @ t! j: C
}
}! G! b* ~) x; ~- Q. H
void RCC_Configuration(): h) a8 `- ~5 E6 b" L
{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);% f9 Y. h& H3 X( v
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE); 4 W8 e! ~% }8 c3 J; r+ H
}
void GPIO_Configuration()
{ GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;* N/ y6 A. R) M0 Y
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;2 v7 i. C0 i1 z" Y8 P
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;3 x+ R, H1 j% `" \: v
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;9 X2 A8 Y+ w b' }
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;7 X4 {. `* i' w4 N6 z
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}4 D. V7 c9 z+ X! S
void SPI_Configuration()
{ SPI_InitTypeDef SPI_InitStructure;
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);, A8 g, C6 C: K: \# V* p
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);8 X0 o9 y( o1 h' d' \
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;$ r7 B, N9 [8 W- v/ n1 |# g9 f
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;( X4 ~* a! X( G( x$ H5 ~8 y
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;9 L. t! N2 o/ @5 f
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;6 j4 m; O& A) ]
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;: ]3 y* w# y+ O9 d
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;. \8 k4 ^1 r+ L
SPI_Init(SPI1, &SPI_InitStructure);
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI1,ENABLE);1 S: I6 A N) |+ h d$ [
SPI_Cmd(SPI2,ENABLE);
}
void Delay(int nCount)* N1 `4 v( R: p z
{ int c1=nCount;) e7 {3 d; |% |" _' d T
int c2=nCount;
for(;c1>0;c1--). @2 G- t& }% @# O5 K
{) F1 D, U* T0 W/ Q+ j4 O7 j* j
for(;c2>0;c2--);; W" Y4 T- `/ _% `8 V# W$ U
};0 j& V0 Z. j+ Z8 O5 B/ x: p& h, p
}+ n+ f9 A0 k/ ]
先谢谢了~~
回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!
楼主,我想问一下,STM32F4 SPI1和SPI2自通信问题,SPI1为主模式,SPI2为从模式,可是我在设置波特率时,必须按二分频,SPI2才收得到SPI1发来的数据,如果设置为其他分频情况,将卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 这句上,还有就是SPI1和SPI2的波特率是不是必须为相同的,才能正确通信
以下是全部代码:
#include"stm32F4xx.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);% s* \* W, z! p: C0 @ `; j" |8 }. |* B
void SPI_Configuration(void);
void Delay(int nCount);' D, B$ H; Q; Q! r. g
int main(void)
{ RCC_Configuration();
GPIO_Configuration();( `; f9 T- y$ m' s* k9 X
SPI_Configuration();% q6 y0 B. z1 V' b0 `- T! l
while(1)9 m/ ~9 h0 x& l% A! ^& ^/ {9 Z! L
{ int data=0;1 @+ H2 \ H q! x7 a! N, f
SPI_SendData(SPI1,0x55);
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
data=SPI_ReceiveData(SPI2);
if(data==0x55)
{ while(1)( O! ~5 Y% F$ Y" V; w( t
{ GPIO_SetBits(GPIOA,GPIO_Pin_4);
Delay(0xfffff);) |5 x1 b' C' |7 f6 n$ g# c- \
GPIO_ResetBits(GPIOA,GPIO_Pin_4);2 m- h. o3 T& [" w6 \
Delay(0xfffff);7 z& Y% m& L3 J
};2 l x! r! Y9 }) k9 u5 _
}
else while(1)3 p6 m; {5 o) e% E
{ GPIO_SetBits(GPIOA,GPIO_Pin_4);
//Delay(0xfffff);
//GPIO_ResetBits(GPIOA,GPIO_Pin_5);+ q4 T4 g5 B' t
//Delay(0xfffff);1 A- K t- E6 S1 n& K: p1 f
5 G$ m) r. u! B. w3 O8 U% @
};
}
}
void RCC_Configuration()) ^* X+ R5 x4 y. a& c& }. V# K
{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);4 v/ p/ A* Q+ ?% t5 J
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE); ) I- K, C) d0 U7 Z6 `) {/ Q
}
void GPIO_Configuration()
{ GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;- w: d' ~5 p1 K T) W5 F2 ~
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;! ~1 _8 n6 }/ k2 [
GPIO_Init(GPIOA,&GPIO_InitStructure); @! l& T% a- } s% |# d
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/ V( _' l% ?# o0 U
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;( |* I8 r4 l! C$ F8 T* e
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void SPI_Configuration() n$ d! b' x% ^. } T! I
{ SPI_InitTypeDef SPI_InitStructure;- ]/ `0 ?8 Y& m1 ]
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);7 m5 S9 W" h1 C0 j6 h G
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource14, GPIO_AF_SPI2);5 Q- e5 E; b; \% L* V7 q
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);3 ?1 Y, ~1 Q/ F( k
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;1 ?, |- Y/ K% t/ L* Q6 {* c( R9 C% w
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;6 A- }4 V1 h R z) E1 e9 }
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;4 c; S- m; u/ p7 r
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;9 b9 A, \( j8 P) Y( k- n
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
SPI_Init(SPI1, &SPI_InitStructure); o6 x( w- |5 p3 O- Z
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI1,ENABLE);: |! T3 P& n0 y( E! r
SPI_Cmd(SPI2,ENABLE);
}
void Delay(int nCount)0 P, d& g3 s0 L- K y
{ int c1=nCount;
int c2=nCount;
for(;c1>0;c1--)+ D4 y/ M. O8 F( ~. z; m
{2 p+ C& t+ t& @2 B
for(;c2>0;c2--);9 k( L: Q; `1 x! C, b+ ^
};
}
先谢谢了~~
% Q2 `5 ^* w1 {" L9 T
楼上的问题,看我帖子给出的提示哦~
RE:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!
回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!
回复:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!
多谢,真好的板块,学嵌入式的好地方啊,来对了,哈哈。3 m; g: Q, I2 s/ E6 z; b: e: Q) |
7 z6 F0 b6 W/ v! s) k
多谢支持!!
RE:【ST MCU实战经验】栏目开通!应用问题,官方解答,欢迎下载!
RE:【ST工程师 MCU实战经验30篇】之USB接口易损坏
回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏
回复:【ST工程师 MCU实战经验30篇】之USB接口易损坏
RE:【ST工程师 MCU实战经验30篇】之鬼魅一样的Hard Fault
RE:【ST工程师 MCU实战经验50篇】之鬼魅一样的Hard Fault
回复:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高
鬼魅一样的Hard Fault' G% L" q! L# e9 n
. g0 J; q8 {/ w/ q0 V& J
该问题由某客户提出,发生在 STM32F101C8T6 器件上。据其工程师讲述:其某型号产品的设计中用到了 STM32F101C8T6 器件。在软件调试过程中,遇到了一个棘手的问题:程序会莫名其妙的跳到 Hard Fault 中断。在程序中,产生该中断的位置不固定,忽而在这里,忽而在那里。发生的时间不确定,有时候程序运了很长时间才遇到,有时候开始运行后没一会就发生了。产生该问题的原因不明,不知如何进行排查。7 p' Q% J# E, c# _* `
咋解决?
RE:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高
RE:【ST工程师 MCU实战经验50篇】之浮点 DSP 运算效率不高