提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
在学习stm32的I2C部分时,发现和C51的有所不同,stm32在SCL翻转IO口后要一定的等待时间, 而51的代码中没有这一延时,后面了解到是51执行代码的速度比较慢,不需要延时就能满足I2C的通信条件,所以STM32执行一条单指令代码的时间到底是多少呢。
1.理论时间
指令周期 :CPU从内存取出一条指令并执行这条指令的时间总和。
CPU周期 :又称机器周期,CPU访问一次内存所花的时间较长,因此用从内存读取一条指令字的最短时间来定义。
时钟周期: 通常称为节拍脉冲或T周期。一个CPU周期包含若干个时钟周期。
根据以前C51计算时钟周期的方法,当STM32系统时钟为72MHZ时:
执行(_nop_();)指令理论上需要的时间为1/72Mhz=0.01389us
2.官方设计标准时间
stm32 属于ARM CortexM3,多数指令是单周期的。
cortex-m3是三级流水线,同时执行3条指令,指令周期不定,分支指令也可能清空流水线,导致预先执行的指令失效。
ARM官方的数字是1.25MIPS/MHz,我的理解就是每个周期平均执行1.25条指令。
即官方设计该内核下执行_nop_();指令需要的时间为1/(72*1.25)MHZ=0.0111us
3.时钟周期的应用
可以通过执行单指令周期的时间去检验配置的系统时钟是否正确