作者 | strongerHuang
微信公眾號 | 嵌入式專欄
STM32CubeMX中Cortex系統(tǒng)定時器(System Timer)選擇1分頻和8分頻,為啥生成代碼一樣?
因?yàn)镾TM32CubeMX會啟動SysTick作為延時(HAL_Delay)函數(shù)的時基,而SysTick作為Cortex內(nèi)核的一部分,就會用到Cortex系統(tǒng)定時器。
那么,問題就來了SysTick時鐘源來自哪里?
1、數(shù)據(jù)手冊和STM32CubeMX時鐘樹
數(shù)據(jù)手冊時鐘樹:
STM32CubeMX時鐘樹:
你會發(fā)現(xiàn):數(shù)據(jù)手冊中的只有『/8』分頻,而STM32CubeMX除了『/8』分頻,還有『/1』分頻。
2、SysTick時鐘初始化代碼
不管是使用標(biāo)準(zhǔn)外設(shè)庫,還是HAL庫,你初始化SysTick,都會調(diào)用內(nèi)核中的SysTick_Config函數(shù)。
標(biāo)準(zhǔn)庫常用初始化:
SysTick_Config(SystemCoreClock / 1000);
HAL庫初始化同樣也是調(diào)用底層的初始化函數(shù):
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { return SysTick_Config(TicksNumb); }
初始化調(diào)用這段代碼之后,SysTick將會實(shí)現(xiàn)1ms中斷一次。
這段代碼實(shí)現(xiàn)1ms中斷一次相信大家都能理解,但是這里SysTick初始化和上面說的時鐘『/8』有關(guān)系嗎?
3、SysTick時鐘源是來自哪里?
這個問題只要認(rèn)真看參考手冊都能找到答案。
RCC通過AHB時鐘(HCLK)8分頻后作為Cortex系統(tǒng)定時器(SysTick)的外部時鐘。
通過對SysTick控制與狀態(tài)寄存器的設(shè)置,可選擇上述時鐘或Cortex(HCLK)時鐘作為SysTick時鐘。(--來自參考手冊)
也就是說SysTick時鐘源可以來自兩個地方:
AHB時鐘8分頻
HCLK(內(nèi)核)時鐘
通過SysTick控制與狀態(tài)寄存器的設(shè)置進(jìn)行選擇時鐘源。
具體就是通過CLKSOURCE(時鐘源)這一Bit位來選擇:
再次看SysTick_Config函數(shù)源碼:
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); /* Reload value impossible */ } SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ return (0UL); /* Function successful */ } (在core_cm3.h,或者core_cm4.h等內(nèi)核源碼中)
你會發(fā)現(xiàn),其實(shí)源碼已經(jīng)默認(rèn)使用HCLK(內(nèi)核)時鐘。
而SysTick_Config函數(shù)屬于內(nèi)核(如core_cm3.h)已經(jīng)寫好源碼,一般我們不去修改。
所以,到這里,你會明白:SysTick時鐘源其實(shí)就是用的HCLK(內(nèi)核)時鐘。
4、最后
開篇的問題:STM32CubeMX中Cortex系統(tǒng)定時器(System Timer)選擇1分頻和8分頻,為啥生成代碼一樣?
難道,STM32CubeMX配置Cortex系統(tǒng)定時器時鐘是有Bug嗎?
來源:嵌入式專欄
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進(jìn)行處理
審核編輯 黃宇
-
STM32
+關(guān)注
關(guān)注
2270文章
10901瀏覽量
356224 -
時鐘源
+關(guān)注
關(guān)注
0文章
93瀏覽量
15979 -
Systick
+關(guān)注
關(guān)注
0文章
62瀏覽量
13106
發(fā)布評論請先 登錄
相關(guān)推薦
評論