您好,登錄后才能下訂單哦!
每次接觸一款新的單片機,我都會很好奇該單片機的系統時鐘是多少MHz,怎樣才能達到Datasheet中描述的最大系統時鐘,該單片機的外設的時鐘會是多少MHz呢?如果要使用延時,我怎么編寫程序才能實現精準的延時呢?我認為這些問題是我開始接觸新單片機之前需要了解的。
對于每款ARM Cortex-M系列單片機而言,廠商為了更好的推廣自己的單片機,同時方便設計人員使用,降低產品開發周期,都會將該單片機的外設相關寄存器以及外設的相關函數都實現并打包,放在官方網站上免費供大家使用。STM32F405RG的標準外設庫還包含有DSP核的各種運算函數。如果需要,可以從http://www2.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-libraries/stsw-stm32065.html#下載。
如果使用標準外設庫,我們可以根據標準外設庫中的system_stm32f4xx.c文件中的代碼分析可知:
#if defined(STM32F40_41xxx) || defined(STM32F427_437xx) || defined(STM32F429_439xx) || defined(STM32F401xx) || defined(STM32F469_479xx) #define PLL_M 25 #elif defined (STM32F446xx) #define PLL_M 8 #elif defined (STM32F410xx) || defined (STM32F411xE) #if defined(USE_HSE_BYPASS) #define PLL_M 8 #else /* !USE_HSE_BYPASS */ #define PLL_M 16 #endif /* USE_HSE_BYPASS */ #else #endif #if defined (STM32F40_41xxx) #define PLL_N 336 /* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2 #endif #if defined(STM32F40_41xxx) uint32_t SystemCoreClock = 168000000; #endif
根據編程手冊關于時鐘寄存器的內容,可知
PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
SYSCLK=PLL_VCO/PLL_P
式中,HSE_VALUE表示單片機外接晶振的頻率,HSI_VALUE表示單片機內部振蕩器的頻率,本實驗板使用的是外部25MHz的晶振,根據程序中的配置,我們可以計算出SystemCoreClock =168000000。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。