Assembly 此装配延迟功能的秒延迟为多少?

Assembly 此装配延迟功能的秒延迟为多少?,assembly,delay,stm32,timedelay,stm32ldiscovery,Assembly,Delay,Stm32,Timedelay,Stm32ldiscovery,我需要帮助这个装配延迟函数,有人能帮我计算这个装配延迟函数的秒延迟是多少吗?它是为STM32L152-DISCOVERY board编码的,以下是its页面: 首先,您需要确定核心频率。 默认情况下,在STM32L152中,内核从MSI以2.097 MHz的频率计时(请参阅参考手册RM0038)。 但固件可以覆盖此设置:查看标准函数SystemInit() 其次,使用此表,计算MCU周期的总数。请注意,分支指令需要一个以上的周期,其确切值未定义 因此,将周期数除以一个频率(以Hz为单位)-如果我

我需要帮助这个装配延迟函数,有人能帮我计算这个装配延迟函数的秒延迟是多少吗?它是为STM32L152-DISCOVERY board编码的,以下是its页面:


首先,您需要确定核心频率。 默认情况下,在STM32L152中,内核从MSI以2.097 MHz的频率计时(请参阅参考手册RM0038)。 但固件可以覆盖此设置:查看标准函数SystemInit()

其次,使用此表,计算MCU周期的总数。请注意,分支指令需要一个以上的周期,其确切值未定义

因此,将周期数除以一个频率(以Hz为单位)-如果我关于系统时钟的假设是正确的,您应该得到大约12毫秒


但不要在实际系统中使用此代码-这延迟不可预测,它取决于闪存加速器设置和DMA活动。改用定时器延迟。

处理器不是有8个定时器吗?你就是这样做的,用定时器。理想情况下,您将有一个常规的计时器中断,它将保持秒和/或毫秒计数器。更简单的方法是坐在那里检查自由运行计数器值,但这几乎和您的方法一样糟糕。如果您要为MCU编程,您需要掌握基本的定时器控制。我不确定处理器中有多少定时器,是否有任何公式可用于计算组装的延迟时间?您可以查找STM32L152-DISCOVERY板的时钟频率,然后查找每个指令将使用的时钟周期数(考虑到存在循环的事实)。一旦你有了时钟周期数,你就可以根据延迟函数所需的时钟频率和时钟周期数来计算延迟的时间。因为我认为这是我的家庭作业,所以我不会说明我是如何得到它的,但根据Arm Cortex-M3在25mhz系统上的计时,它大约有1ms的延迟,32mhz时大约有.77ms的延迟。考虑到它在25兆赫到1毫秒的频率下有多接近,我敢猜测这个循环最初是为了时钟速度而创建的。请不要使用CPU来尝试创建时间延迟,这种事情只适用于普通设备。ARM警告您,
nop
可能会被处理器跳过,并且根本不会占用任何时间,这是在我们进入需要总线的DMA之前。。。
Delay       PROC
            push {r1}
            LDR r1, = 0x1000
again1      NOP
            NOP
            subs r1, #1
            bne again1
            pop {r1}
            bx lr
            ENDP