人们为什么不仅仅使用微控制器中的最大可用时钟

Lui*_*igi 0 microcontroller clock stm32

这个话题很简单,我承认我在Google上找不到很多东西。

最近,我开始在STM32上进行编码,对于一个来自与PC相关的应用程序的人来说,设置所有时钟都是相当新的。

我想知道为什么开发人员会想放弃/避免最大时钟,在哪种情况下?假设微控制器可以在168Mhz上工作,为什么我应该选择84Mhz?

它主要与功耗有关吗?还有其他原因吗?

为什么STM32团队(以及我猜想也是微芯片)要在STM32CubeMX上设置一个非常好的UI来选择不同的组合而麻烦?如果我可以达到更高的工作频率,为什么我应该直接使用外部振荡器而不是PLL路径?

Rea*_*Rik 5

功率可能是主要原因。但是使用特定的时钟速度可能还有其他多种原因,例如:

EMC辐射。

避免谐波干扰敏感的模拟电子设备。

作为设计的一部分,需要在特定的频率下运行定时器/时钟/ ADC等(例如,我在一个工作于120MHz的处理器上工作,但是为了获得所需的确切ADC采样,我们必须运行在119.4MHz左右)。

如果您打算使用板上其他地方的时钟,则可能需要使用外部振荡器。另外,您可能想使用非常精确的晶振,或者不想等待PLL锁定。

原因很多。但是,如果您直接进行一些操作,而不关心功耗或噪声,那么以我的观点,以PLL最高速度运行可能是最好的起点。


ber*_*ing 5

它主要与功耗有关吗?

是的,主要是。较低的频率意味着较低的功耗。

还可以通过快速完成工作,然后使CPU进入睡眠状态,从而提高平均功耗,从而节省电量,但​​是电源可能不喜欢可变负载,因此精确计时将非常困难。

还有其他原因吗?

是。某些外围设备无法在某些频率以上工作。例如:STM32F429内核可以以180 MHz运行,但是无法为USB生成48 MHz。为了使用USB,内核必须以168 MHz运行。

如果我可以达到更高的工作频率,为什么我应该直接使用外部振荡器而不是PLL路径?

外部振荡器的精度要比内部振荡器高得多,并且从待机状态唤醒时,PLL可能需要很长时间才能稳定下来。这取决于应用程序要求。


old*_*mer 5

权力是显而易见的,正如其他答案中所提到的,但没有直接提到。表现。更快的时钟并不意味着更快的代码。除了闪存前面的真实缓存之外,ST 在闪存前面还有这个神奇的缓存(并禁用了它出现在我尝试过的 cortex-m4 上的 arm 缓存)。但总的来说,闪存是您的瓶颈,如果您在许多其他供应商部件上看到,有时在 ST 上看到,您必须在增加系统时钟时不断添加等待状态。所以说在 16Mhz 没有等待状态,在 32、1、48、2 等等,取决于系统,你在闪存的速度限制附近跳舞,让处理器在等待指令进来时坐在额外的时钟上. 甚至在一个st但更容易在别人身上看到,这直接影响你的表现,

某些设计闪存已经处于 cpu/系统时钟的一半速度,其中 sram 通常跟踪并可以覆盖整个范围,因此在零等待状态下采用相同的代码并从闪存运行然后从 ram 运行,在某些数量的 MCU 上相同的机器代码在闪存上的运行速度与在 sram 上的速度减半。有些是一对一的,然后当你添加一个等待状态时,flash 是半速 vs ram,依此类推。

外围设备具有与上述相同的问题。您可能必须在外围时钟上使用预分频器,因此现在读取 24mhz 时可能需要一个时钟的 gpio 引脚,80mhz 时可能需要三个或四个时钟。

PLL 是模拟和抖动的,它们不一定“丢失”任何时钟周期,但就抖动而言,振荡器更糟糕,振荡器本身具有抖动和精度以及温度影响的规范。所以内部RC是质量最差的时钟,直接从振荡器绕过PLL是最好的,然后与PLL相乘会增加抖动,但会让你走得更快。

回到权力。电视遥控器中的电池可能会持续一年左右(红外线,蓝牙的电池是几天或几周),它们以最低的时钟频率运行,几乎无法完成工作并尽可能多地或在低电量状态。如果他们在清醒时跳到 120Mhz,而电池现在可以使用数周或半年,而不是一年,除了全速运行真的很酷之外,没有真正的好处。那没有多大意义。我们现在严重依赖基于电池的产品,如果您手机蓝牙模块中的微控制器以其完全额定的 pll 速度运行,并且您手机中的 wifi 模块中的微控制器以及驱动显示器等的微控制器都运行在最大速度下,您的手机充满电可能无法使用一天。跑得更快并没有得到什么,反而失去了一些东西。

对于爱好和插在墙上的东西,烧掉任何你想要的功率,但 mcu 市场的一个显着百分比是关于价格和功率,筛选到更高速度的芯片成本更高,低速零件,在某些情况下只是没有更高屏幕的芯片,成本更低。更紧凑的代码使用更少的闪存 您可以购买更小/更便宜的部件,您的时钟运行速度会变慢,因为与可能草率的程序和/或编程语言中的错误选择相比,执行相同操作所需的指令更少,更大的部分,更低的产量增加成本。然后尽可能低地降低时钟以保持您编写的紧密代码以勉强满足时序使用理想的最少功率(以及关闭或不打开您不使用的外围设备并预先调整那些打开的外围设备甚至更慢)。

对于成本和功耗,您需要可以容忍的最慢时钟,最小的二进制也是紧凑而高效的,这样您就可以勉强计时。那是你的理想目标。但是,如果您计划进行现场升级,那么您需要为较慢/较大的代码留出一些余量作为升级的一部分,并且不会对功耗产生显着影响。