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