2015-09-13 224 views
1

我需要幫助這個裝配延遲功能,任何人可以幫助我計算這個裝配延遲功能有多少秒延遲?它的編碼STM32L152-DISCOVERY板,這裏是它的頁面:http://www.st.com/web/en/catalog/tools/FM116/SC959/SS1532/LN1848/PF258515這個裝配延遲功能需要多少秒的延遲?

Delay  PROC 
      push {r1} 
      LDR r1, = 0x1000 
again1  NOP 
      NOP 
      subs r1, #1 
      bne again1 
      pop {r1} 
      bx lr 
      ENDP 
+2

不是那個處理器有8個定時器嗎?這就是你如何做,用計時器。理想情況下,您將擁有一個定時中斷,它會保持秒和/或毫秒計數器。一個更簡單的方法是坐在那裏檢查一個自由運行的計數器值,但這與你的方法差不多。如果你打算編程一個MCU,你需要掌握基本的定時器控制。 –

+0

我不確定它在處理器中有多少個計時器,是否有任何公式可用於計算組件的延遲時間? – user3435575

+0

您可以查看STM32L152-DISCOVERY開發板的時鐘頻率,然後查找每條指令需要的時鐘週期數(考慮到存在循環)。一旦你有時鐘週期的數量,然後你可以計算延遲多長時間是基於時鐘速率和延遲功能所花費的時鐘週期數。 –

回答

1

首先,你需要確定核心工頻突變。 默認情況下,STM32L152內核採用2.097 MHz的MSI(參見參考手冊RM0038)。 但是固件可以覆蓋這個設置:看標準函數SystemInit()。

其次,使用此表Cortex M3 instruction summary,計算MCU週期的總數。請注意,分支指令需要多個循環,且其確切值未定義。因此,將週期數分爲一個頻率(以Hz爲單位) - 如果我對系統時鐘的假設是正確的,那麼你應該得到12毫秒。

但是不要在實際系統中使用此代碼 - 這種延遲不可預測,這取決於閃存加速器設置和DMA活動。改用計時器延遲。