STM32G431的速度与功耗的测量

G431的速度和功耗

 

01 度与功耗


一、前言

  前两天对比了 DSP 算法函数库中的执行速度。 采用示波器直接测量端口电平的宽度来测量函数执行时间。  不过,  有人提出了一个更加简单的方法。  也就是直接读取内部 DWT中 的 CYCCNT 定时器, 来获取算法执行时间。  下面测试一下这个方法。 毕竟将来对时间的测量还会碰到很多的。  这应该比起外部示波器测量更加的方便。

GM1710981212_1920_1080.MP4|_-6

二、测量结果

  在单片机内部, 存在这个 DWT, 数据查看和跟踪寄存器。 它内部具有一个32位的计数器,  和系统时钟一样往上递增,  在 72MHz下, 可以提供长达 60 秒左右的计时。 在程序中,  首先设置 CoreDebug中的 DEMCR 中 TRAENA 位, 使能 DWT 的功能。 然后便可以对 DWT 计数器进行读取和清零。  后面应用这种方式, 再测试一下昨天的软件运行速度。

GM1710983806_1920_1080.MP4|_-7

  CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
  DWT->CYCCNT = 0;

  在主程序中,  对比两个不同的sine 函数,  调用之前, 分别记录下来 DWT 的 CYCCNT 的数值,  然后打印出两者之间的差。 这样可以对比输出两个函数各自执行所消耗的系统时钟了。

GM1711002116_1920_1080.MP4|_-5
  根据测量结果来看, DSP所执行的sine运算消耗了 124 的机器周期, 对应的普通MATH函数, 计算一次sine 则需要3983 个机器周期。   DSP 函数速递提升了 32倍。 这个测量数值, 比起昨天测量的28 倍结果来看,  似乎 DSP 速度提升的更快了。

GM1711002366_1920_1080.MP4|_-4
  对比浮点数开方运算,  利用 DWT测量, 居然发现, DSP 库中的开方函数,  只需要四个机器周期便可以得到结果。 比普通的函数库整整快了86倍。 这到底是真的? 还是假的? 这个结果使得我感到有点怀疑人生了。

GM1711002655_1920_1080.MP4|_-3

三、运算功耗

  现在单片机的系统时钟频率为 164MHz,  消耗的电流在 42mA 左右, 上下有波动。 估计这是因为电路板上 LED 在闪烁引起电流的波动。  下面, 直接设置软件为一个小的死循环, 进行开方数学运算。 LED灯不再闪烁。 此时, 单片机的电流就固定在43.8mA 左右。 没有太大的波动了。 这说明前面工作电流的波动的确是因为LED的闪烁引起的。  下面, 在小循环中,  一直进行 DSP 数学库中的 sine 计算,  测量此时单片机工作电流。  可以看到单片机的工作电流并没有明显的变化。 由此, 我们可以知道, 对于ARM 单片机来说, 它的功耗主要与系统的时钟频率有关系。 对于具体进行什么运算内容并没有太大的关系。 除非, MCU进入了低功耗睡眠状态, 可以大大降低工作电流。

GM1711003332_1920_1080.MP4|_-8

 

  结 ※


  据留言的建议, 使用STM32单片机中的 数据观察与跟踪计数器对程序运行时间进行了测量。 果然, 可以提高测量的准确性。 这的确是一个很好的方法。  置于大家所说的单片机的功耗, 并没有因为数学函数的调用而改变。  单片机的功耗与其时钟频率关系很大。

GM1711003548_1920_1080.MP4|_-4


■ 相关文献链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值