ixcvrkzmext64078633608.gif
8 {( N; n" G! _' t0 j' v$ L! g
点击上方蓝色字体,关注我们
2 J$ o1 {: b3 Y" T' B以STM32为例,固件开发中,有许多有趣的“脑洞大开”用法可以尝试。
! {; P8 o+ e2 u$ l5 ^$ l6 ^3 _1
" c# j. ?6 Q( [2 M, A: e7 `DMA+外设巧妙组合: a. A4 B, @9 E
. ]0 i2 p. n# t5 x4 S利用直接内存访问(DMA)与外设的组合,可以在不占用 CPU 的情况下完成数据传输。
! s R+ r4 [! s" k" ]; c9 ^
5 G z8 B4 ?4 ~例如,使用 ADC 的 DMA 连续采样模式,将采样值直接写入内存缓冲区,再配合循环缓冲区实现不间断的数据流处理。) w1 F9 I8 R# D- n
. T: L% f" W# }! G# B7 M, B
这种方法对高速采样特别有用,例如音频数据处理或传感器数据采集。" s8 Z2 V$ m$ j; t
29 w8 E. P1 P% |5 a0 W" a
硬件定时器实现“软”PWM
4 {7 q( J1 G' x n _6 t! ~" C7 y j2 i
硬件定时器生成 PWM 信号并不稀奇,但在更复杂的需求下,可以用定时器产生“多级”PWM。
7 L% d* R% O* O4 o# i
7 }$ X6 }% b. h! S, H例如,如果需要实现渐变亮度,可以结合 DMA 和定时器,通过 DMA 更新 PWM 占空比来生成动态亮度变化。
4 _# V- K. ]* Q+ `/ V) S0 P
, i+ s. O4 C8 k ]& R1 {; T5 H) `这样避免了繁琐的中断控制,同时可以获得非常平滑的调光效果。 {3 U4 {, A: H3 L
3 e& w! C' p" S1 {: n2 \! n
利用CRC外设优化算法
. l2 X8 M) x% ~3 E! R0 p3 O# G0 Y+ l- m3 c* B( ?$ ]
STM32 带有 CRC 外设,可以快速计算数据的 CRC 校验。: n, ]' V0 q, e1 L& Y
- e( D* A0 _ ^1 p这不仅用于数据完整性检查,还能被创造性地用在哈希或校验和计算的算法优化上。
3 R( s8 l( I6 n7 Z. R3 K( n% J% `* I! H Q
例如,使用 CRC 进行数据分段比较,代替传统的循环比对方法,能大幅提升速度。
, j8 q" y) ?: r7 p* G4
* P# Z0 t3 Q# _8 C% I& x逻辑处理交给硬件
4 _3 |8 A, z0 W' V9 v! V0 D3 S; L/ N% U! e
某些时候可以用比较奇妙的组合来替代复杂的逻辑代码。
3 w% \' L6 f; P' j+ s* b% t% o. F- I# v* {
例如,使用定时器捕获功能捕获信号的上升/下降沿时间间隔,再结合输入捕获的预分频器来自动计算信号周期或占空比。* a& V$ P1 |/ {
+ @7 J1 m! x# a- _
这样避免了手动计算时间差、减法操作等,显著减少了处理器负担。: _! X# t- E X
5' U. v9 w( `( f, r. K
使用备用寄存器进行数据持久化
5 I6 `5 H3 E7 C( ]3 `/ W) h* @1 e% ? Z7 M0 r/ Y1 X
STM32 中有备用寄存器(Backup Registers),即使掉电也能保持数据不丢失。
6 v) I& l! ]' A( t' o0 [6 D& }" z. x5 r1 x
可以利用它们存储一些关键参数或者状态数据,如系统配置、故障标志或计数器,避免反复存取闪存或者 EEPROM 提高耐用性。
% u( j% x' {0 p- F j3 ^" z6
# r, c2 t: p' p延时技巧——定时器代替循环
# F, s$ g( U* G1 p: m" B, }; [/ O1 w' ]( e* V' c
MCU 编程中经常需要一些精确的延时,常规方法是使用循环消耗 CPU 时间。
, m) {( G7 R( A2 Q2 o* |
- P @8 a6 |6 m2 N但可以将定时器配置为定时中断,实现“硬件级”延时。
8 _3 Z3 I. }! {# M: }* O/ S2 Y$ u6 Z* Y, O. N
通过改变定时器的预分频或计数值,甚至可以在不同的延时需求间灵活切换,大幅降低忙等待的时间浪费。
, g0 ~2 g; j0 {7 n4 _9 D6 L) H% _5 `# P# |8 Y5 Q. F! g
这些方法中不少结合了硬件外设和系统资源的独特特性,能大大提高程序效率和优化硬件资源利用率。) q) B% N* A+ |+ v5 c* D
- c0 T; }+ b8 m2 F( |; U" o# k# F
MCU 的乐趣就在于这种“软硬结合”的玩法,玩得精妙,开发起来也就更有成就感。
2 q2 g8 |" ]3 K( x
p3gsr31gh4564078633708.jpg
J" d5 v- V: u
5bvid1kvrm264078633808.gif
0 i9 k, K# w! s3 n9 d9 s D点击阅读原文,更精彩~ |