ixcvrkzmext64078633608.gif
: ^& W* W, t7 x- }
点击上方蓝色字体,关注我们( B% B! W( g# O. \ v
以STM32为例,固件开发中,有许多有趣的“脑洞大开”用法可以尝试。
4 }7 x b, j3 O# P: {1: l; P5 y- A! }" N4 e7 Y
DMA+外设巧妙组合
! j7 a9 T% M3 O! I0 Y" \: E, I' ]" @, c
利用直接内存访问(DMA)与外设的组合,可以在不占用 CPU 的情况下完成数据传输。
0 F& _2 x. [+ G- h+ Q, J% M2 V( o, @# t3 W# k1 Q
例如,使用 ADC 的 DMA 连续采样模式,将采样值直接写入内存缓冲区,再配合循环缓冲区实现不间断的数据流处理。: D/ C" \ b4 B- l: k$ v$ L
, u! n: S, h! n6 f& T
这种方法对高速采样特别有用,例如音频数据处理或传感器数据采集。8 d7 w/ j% W% `* s) L4 q
2
5 A0 D' A8 v( `" {1 p, s9 \. k, `! m硬件定时器实现“软”PWM. |5 B H3 U3 W" t
$ b0 S5 g7 j! a! g) F硬件定时器生成 PWM 信号并不稀奇,但在更复杂的需求下,可以用定时器产生“多级”PWM。3 Q0 v) f0 n1 P7 a5 @
! `# ?+ D/ v E5 B U5 L例如,如果需要实现渐变亮度,可以结合 DMA 和定时器,通过 DMA 更新 PWM 占空比来生成动态亮度变化。+ U' X! H/ S0 W, E8 ?$ S
& ]) W# ?3 O6 _
这样避免了繁琐的中断控制,同时可以获得非常平滑的调光效果。
; W) v, {" z) \0 l" x+ Q) u& `. N. n3$ Y7 R8 ^: U$ e# q1 v& k
利用CRC外设优化算法
# h# C) q5 Y/ E: @/ ]- z9 h- j! U3 a* M4 ^
STM32 带有 CRC 外设,可以快速计算数据的 CRC 校验。
( m# Q l! o. m2 S0 V& ~ c* P# }# l( U# d& Q
这不仅用于数据完整性检查,还能被创造性地用在哈希或校验和计算的算法优化上。) n% V$ \* x4 M! R+ l6 u* k
: y' e" g- E3 K# \* i& m) [4 P
例如,使用 CRC 进行数据分段比较,代替传统的循环比对方法,能大幅提升速度。, e3 ]( H$ B8 [) N- R
4, r: _ h# q0 o8 {4 _& S" I# I
逻辑处理交给硬件+ \; b; Y9 Y- P* _
9 Q" L T1 G/ i: J( v某些时候可以用比较奇妙的组合来替代复杂的逻辑代码。! v( _6 I' B2 o4 u% i/ C+ B0 F
$ a c- G# h& Q G+ U* a/ x
例如,使用定时器捕获功能捕获信号的上升/下降沿时间间隔,再结合输入捕获的预分频器来自动计算信号周期或占空比。
1 V5 e8 W" u9 x4 r1 O- k+ V) u+ A
这样避免了手动计算时间差、减法操作等,显著减少了处理器负担。" c/ q; p2 I5 S) [% Z/ [
5
% _, q, K8 s. _! {) I8 D使用备用寄存器进行数据持久化 # D0 t3 o8 q0 f; l
4 @5 }2 R: L0 f
STM32 中有备用寄存器(Backup Registers),即使掉电也能保持数据不丢失。. a2 y1 Z! ^2 \
3 |. E. z3 t. U可以利用它们存储一些关键参数或者状态数据,如系统配置、故障标志或计数器,避免反复存取闪存或者 EEPROM 提高耐用性。% @- m2 d0 z' V5 C- ^
6
+ ]9 O/ e# c- N延时技巧——定时器代替循环, \8 ] {/ y- {3 r8 M2 N. O
9 q. N9 h3 j x* m3 U: w1 xMCU 编程中经常需要一些精确的延时,常规方法是使用循环消耗 CPU 时间。! }* W; ^9 a' [7 o. h+ H# D
! V1 f. A. `% m& L, a, W+ h1 o
但可以将定时器配置为定时中断,实现“硬件级”延时。- F1 R+ e- O: Z) L
( \& s7 v. ]6 V+ x% {
通过改变定时器的预分频或计数值,甚至可以在不同的延时需求间灵活切换,大幅降低忙等待的时间浪费。2 }% E: B% J y4 E" b/ _9 ^
" T5 G0 c6 N/ n9 J3 b2 b这些方法中不少结合了硬件外设和系统资源的独特特性,能大大提高程序效率和优化硬件资源利用率。) e9 Y M' X1 D3 P
Q* ?& R/ a) ]0 E, ~# Q# g' Z
MCU 的乐趣就在于这种“软硬结合”的玩法,玩得精妙,开发起来也就更有成就感。
: U- Z8 X) Q; ]
p3gsr31gh4564078633708.jpg
! \4 l0 m6 ?' T+ \0 H: A
5bvid1kvrm264078633808.gif
* _8 E$ r& e9 x; d# o
点击阅读原文,更精彩~ |