1

このアセンブリ遅延関数を支援する必要があります。このアセンブリ遅延関数の 2 番目の遅延を計算するのに役立つ人はいますか? STM32L152 -DISCOVERY ボードのコーディングです。そのページは次のとおりです。

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

1 に答える 1

1

まず、コア周波数を決定する必要があります。デフォルトでは、2.097 MHz で MSI からクロックされる STM32L152 コアで (参照マニュアル、RM0038 を参照)。ただし、ファームウェアはこの設定をオーバーライドできます。標準関数 SystemInit() を参照してください。

次に、この表Cortex M3 命令の概要を使用して、MCU サイクルの合計数を計算します。分岐命令には複数のサイクルが必要であり、その正確な値は定義されていないことに注意してください。

その結果、サイクル数を周波数 (Hz) で除算します。システム クロックに関する私の仮定が正しければ、約 12 ミリ秒になるはずです。

ただし、このコードを実際のシステムで使用しないでください。この遅延は予測できません。フラッシュ メモリ アクセラレータの設定と DMA アクティビティに依存します。代わりにタイマー遅延を使用してください。

于 2015-09-16T09:45:44.617 に答える