这个主题很简单,我承认我在谷歌上找不到多少。
最近我开始在STM32上编码,对于一个来自PC相关应用程序的人来说,设置所有时钟都是新的。
我想知道为什么开发人员想要丢弃/避免最大时钟以及在什么条件下? 假设微控制器可以工作在168Mhz,我为什么要选择84Mhz?
主要与耗电量有关吗?还有其他原因吗?
为什么STM32团队(以及我猜的微芯片)在STM32CubeMX上设置一个非常好的UI以选择不同的组合? 如果我可以实现更高的工作频率,为什么我应该直接使用外部振荡器而不是PLL路径?
答案 0 :(得分:4)
权力可能是主要原因。但是可能存在使用特定时钟速度的各种其他原因,例如:
EMC排放。
避免干扰敏感模拟电子设备的谐波。
作为设计的一部分,需要以非常特定的频率运行的驱动定时器/时钟/ ADC等(例如,我在120MHz的处理器上工作,但为了获得所需的精确ADC采样,我们不得不以119.4MHz的速度运行。
如果您打算在电路板上的其他位置使用时钟,则可能需要使用外部振荡器。您也可能想要使用非常精确的晶体,或者可能不想等待PLL锁定。
有很多原因。但是,如果您正在做一些事情并且不关心功耗或噪声,那么使用PLL以最大速度运行可能是我认为最好的起点。
答案 1 :(得分:4)
主要与功耗有关吗?
是的,主要是。频率越低意味着消费量越低。
还可以通过快速完成工作来节省电量,然后让CPU进入休眠状态,从而提高平均功耗,但电源可能不喜欢可变负载,而且准确的计时会相当困难。
还有其他原因吗?
是。某些外围设备在特定频率以上不起作用。例如:STM32F429内核可以180 MHz运行,但是没有办法为USB生成48 MHz。为了使用USB,核心必须以168 MHz运行。
如果能够达到更高的工作频率,为什么我应该直接使用外部振荡器而不是PLL路径?
外部振荡器具有比内部振荡器高得多的精度,并且从待机状态唤醒时PLL可能需要很长时间才能稳定。这取决于应用要求。
答案 2 :(得分:3)
权力是显而易见的,因为它已经在其他答案中被触及而不是直接触及。性能。更快的时钟并不意味着更快的代码。 ST除了在闪光灯前面有一个真正的高速缓存外,还有闪光灯前的神奇cachy东西(并禁用它在我考试过的cortex-m4上出现的手臂缓存)。但一般来说闪存是你的瓶颈,如果你看到许多其他供应商的部件,有时是ST,你必须在增加系统时钟时不断添加等待状态。所以说在16Mhz没有等待状态,在32,一,48两等等,取决于系统,你在闪光灯的速度限制附近跳舞,使得处理器在等待指令进入时坐在额外的时钟周围即使是在其他人身上也很容易看到,这会直接影响你的表现,你想要在从零到一等待状态的频率上正确,以最大化你可以提供的cpu。
有些设计闪存已经处于cpu /系统时钟的一半速度,其中sram通常跟踪并可以覆盖整个范围,因此在零等待状态下采用相同的代码并从闪存运行然后从ram运行,在某些数字上运行对于MCU来说,相同的机器代码在闪存上的运行速度与在sram上的速度相同。有些它是一对一的,然后当你添加等待状态时,闪光速度是对速度的一半,依此类推。
外围设备具有与上述相同的问题。您可能不得不在外设时钟上使用预分频器,因此现在读取24mhz的gpio引脚可能需要一个80mhz的时钟。可能需要三到四个时钟。
PLL是模拟和抖动的,它们不一定"失去"任何时钟周期,但抖动更糟,因为振荡器本身具有抖动和精度以及温度影响的规范。因此内部RC是质量最差的时钟,直接来自振荡器旁路PLL是最好的,然后与PLL相乘会增加抖动,但会让你走得更快。恢复权力。电视遥控器中的电池可能持续一年左右(红外线,蓝牙电池可能持续数天或数周),它们运行的时钟频率最低,可以勉强完成工作并尽可能地保持关闭状态低功率状态。如果他们在醒着时跳到120Mhz并且电池现在持续数周或半年,而不是一年,除了全速运行真的很酷之外没有任何实际好处。这没有多大意义。我们现在非常依赖基于电池的产品,如果手机上的蓝牙模块中的微控制器以其完全额定的pll速度运行,并且手机中的wifi模块中的微控制器以及驱动显示器的那个等等,都运行了在最高速度下,您的手机可能无法在一次充满电的情况下持续一天。跑得更快没什么好处,但有些东西丢失了。
对于插入墙壁的爱好和东西,烧掉你想要的任何功率,但是mcu市场中显着的百分比是关于价格和功率,筛选到更高速度的芯片需要更多,低速部件,在某些情况下只是芯片在更高的屏幕上失败,而且成本更低。更小的代码使用更少的闪存,你可以购买更小/更便宜的部分,你的时钟可以运行得更慢,因为它需要更少的指令来做同样的事情而不是一个可能草率的程序和/或编程语言中的错误选择,更大的部分,更低的产量增加成本。然后降低时钟尽可能低,以保持紧密编写的代码几乎不能满足时间使用最少的功率理想(以及关闭或不打开你没有使用的外围设备和预先打开的那些甚至更慢。)
对于成本和功耗而言,您希望使用最小的二进制文件来容纳最慢的时钟,这个二进制文件也非常紧凑和高效,因此您几乎不能进行计时。这是你理想的目标。但是,如果您计划进行现场升级,那么您需要为较慢/较大的代码留出一些余量,以便成为升级的一部分,而不会对功耗产生显着影响。