平时开发,大部分人都是外设干什么就拿来干什么,但是实际项目做多了会发现,很多 MCU 外设可以脱离原本定位,玩出别的用法,不仅少写代码,还能提升性能、降低功耗。
印象最深的就是硬件 CRC 模块,本来它的本职是做数据校验,用于通信、固件校验。偶然一次项目需要生成伪随机数,不想自己写算法占用 CPU 资源,就拿硬件 CRC 来实现。给 CRC 不断输入采集到的 ADC 噪声采样值,硬件直接完成运算,输出的结果拿来做随机数种子。不用消耗 CPU 做复杂运算,硬件自动跑,代码量极少,效果够用,非常适合物联网设备。
还有定时器模拟 DAC。很多低成本 MCU 没有硬件 DAC,想要输出模拟电压,第一反应是外接 DAC 芯片,成本和 PCB 面积都会增加。后来改用定时器 PWM,搭配简单 RC 滤波电路,直接输出模拟电平。虽然精度比不上硬件 DAC,但做指示灯亮度调节、简单电压控制完全够用,省下一颗 DAC 芯片,BOM 成本直接下降。
DMA 也不只是搬外设和内存之间的数据。我经常拿 DMA 做内存拷贝,传统 memcpy 靠 CPU 循环搬运数据,拷贝大块数据的时候 CPU 被占死。启用 DMA 搬运内存,数据传输由硬件完成,CPU 可以腾出手跑别的业务逻辑。大批量缓冲区搬运场景,性能提升非常明显。
还有片上比较器,不只是做电压阈值判断,拿来做交流信号的过零检测,配合定时器做相位同步,不用额外搭运放外围电路。
这些用法看着不在外设设计的本职范围内,但吃透硬件特性之后就能灵活利用。用好外设的附加能力,可以少堆外围器件,简化软件逻辑,是做产品非常实用的思路。
|
评论
|