电子产业一站式赋能平台

PCB联盟网

搜索
查看: 150|回复: 0
收起左侧

MCU有哪些高级用法?

[复制链接]

724

主题

724

帖子

5176

积分

四级会员

Rank: 4

积分
5176
发表于 2024-11-2 08:01:00 | 显示全部楼层 |阅读模式

ixcvrkzmext64078633608.gif

ixcvrkzmext64078633608.gif

$ K8 o: |0 Z& j. a7 h2 N点击上方蓝色字体,关注我们
4 v/ y) U# t6 ?, N3 @以STM32为例,固件开发中,有许多有趣的“脑洞大开”用法可以尝试。
# J9 E  ]/ p1 J: D3 `1 M1 f1
1 u+ `6 m# D- p+ q8 I9 O- SDMA+外设巧妙组合9 Q7 y/ p- z8 i4 |) U, u
, G$ V& }& \( X; I
利用直接内存访问(DMA)与外设的组合,可以在不占用 CPU 的情况下完成数据传输。
: ^8 m) e* A, C1 g! I4 r
9 K7 a0 {6 T4 M! S& o例如,使用 ADC 的 DMA 连续采样模式,将采样值直接写入内存缓冲区,再配合循环缓冲区实现不间断的数据流处理。" ~% Q' N7 W' s1 ?  ~' g+ t
( c3 O% c$ }+ O0 j
这种方法对高速采样特别有用,例如音频数据处理或传感器数据采集。; a2 p3 Q* \, m5 O2 c9 A) d
2
' Y# Z, N0 G2 g: \) y硬件定时器实现“软”PWM
6 S' @6 w, v! h7 q( y
5 F# a' J# U6 H! R9 _' \硬件定时器生成 PWM 信号并不稀奇,但在更复杂的需求下,可以用定时器产生“多级”PWM。' {, F) T' A$ v- T' q8 q+ X

& ?6 X( b. K0 X% S/ F6 i例如,如果需要实现渐变亮度,可以结合 DMA 和定时器,通过 DMA 更新 PWM 占空比来生成动态亮度变化。
$ k! Q$ H# Y3 ]  g. e7 S9 n9 \4 X; m, U6 }7 t
这样避免了繁琐的中断控制,同时可以获得非常平滑的调光效果。
% f2 y( C* x% [& n* ]3  k+ m& A) g+ E8 K( z
利用CRC外设优化算法+ W8 ~! e/ a8 Z
! e/ {- S6 l# c. Z
STM32 带有 CRC 外设,可以快速计算数据的 CRC 校验。
. n; f* y+ X# F% q) v* f; g) S2 n6 Y: f$ g% [
这不仅用于数据完整性检查,还能被创造性地用在哈希或校验和计算的算法优化上。- V' d& j7 i- \# P! U* K9 d# \
( [' u, B! Z! z
例如,使用 CRC 进行数据分段比较,代替传统的循环比对方法,能大幅提升速度。; _0 a5 H  h* ~( n) ^. f$ q3 [
43 }2 }# M; O/ {
逻辑处理交给硬件
# @: Z, Z% V5 ?+ I  _. Y4 C$ V, s+ D% b. p& d% @  {
某些时候可以用比较奇妙的组合来替代复杂的逻辑代码。
4 N( |+ `& a; C( q' R2 ^4 J$ {
. Z) L: H4 |6 S  C* {例如,使用定时器捕获功能捕获信号的上升/下降沿时间间隔,再结合输入捕获的预分频器来自动计算信号周期或占空比。* v4 H6 _4 i! G1 n9 d1 V/ N% Y
5 ]& V3 y  b- M) W& W7 n  A1 p
这样避免了手动计算时间差、减法操作等,显著减少了处理器负担。6 p6 z- X# \% g  d  `  M* `8 q
5) j* q  o% L4 C
使用备用寄存器进行数据持久化 & E* _8 M* L/ ~8 P
* [0 Q  s# M  g
STM32 中有备用寄存器(Backup Registers),即使掉电也能保持数据不丢失。
3 X% @- ^4 x( F
  ~* u" j* G9 f3 N$ e3 T- n可以利用它们存储一些关键参数或者状态数据,如系统配置、故障标志或计数器,避免反复存取闪存或者 EEPROM 提高耐用性。$ ~2 l( q" d, r) \/ d2 S
6
; G( ~9 K+ I6 d/ \5 M( J延时技巧——定时器代替循环
0 S, v, m7 f4 n& y- Q7 t# Q6 x. v7 |  @0 K9 v0 J1 z  k
MCU 编程中经常需要一些精确的延时,常规方法是使用循环消耗 CPU 时间。
4 f9 |8 E% h: s, z  a" ~
5 g; f5 ?- |" P. A) Q+ Z但可以将定时器配置为定时中断,实现“硬件级”延时。( j2 ^% [. q0 S7 h" V9 q

' a% a6 c  j+ ~通过改变定时器的预分频或计数值,甚至可以在不同的延时需求间灵活切换,大幅降低忙等待的时间浪费。
4 d; [, H+ L' f5 r- x, a" K. D6 L* W2 K, S+ U
这些方法中不少结合了硬件外设和系统资源的独特特性,能大大提高程序效率和优化硬件资源利用率。& ]! N. G' O3 |+ W3 G

# A+ r5 h) ]$ C* ^7 J9 [MCU 的乐趣就在于这种“软硬结合”的玩法,玩得精妙,开发起来也就更有成就感。! Z( `0 R; K+ a0 p8 }1 o* D( E1 i% A

p3gsr31gh4564078633708.jpg

p3gsr31gh4564078633708.jpg

/ v7 e9 p( T- F# q

5bvid1kvrm264078633808.gif

5bvid1kvrm264078633808.gif

$ {9 H4 {5 l! l! [* ]" ~, a点击阅读原文,更精彩~
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表