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