0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32中的SysTick時(shí)鐘源來(lái)自哪里?

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-03 14:32 ? 次閱讀

有位朋友在后臺(tái)大概問(wèn)了這樣一個(gè)問(wèn)題:STM32的SysTick時(shí)鐘源是來(lái)自Cortex系統(tǒng)定時(shí)器嗎?

引伸:

為什么STM32CubeMX中Cortex系統(tǒng)定時(shí)器可選擇1分頻(和8分頻)?

1寫(xiě)在前面

看到這個(gè)問(wèn)題,我在想,這位朋友可能沒(méi)有認(rèn)真看手冊(cè),同時(shí)也存在一個(gè)誤區(qū)。

我順便也搜索了一下,網(wǎng)上很多文章都說(shuō)到:SysTick時(shí)鐘源是來(lái)自Cortex系統(tǒng)定時(shí)器,就是那個(gè)有8分頻的時(shí)鐘

但是,我們實(shí)際應(yīng)用中,SysTick時(shí)鐘源真的是來(lái)自這個(gè)Cortex系統(tǒng)定時(shí)器嗎?

2

SysTick時(shí)鐘初始化代碼

不管是使用標(biāo)準(zhǔn)外設(shè)庫(kù),還是HAL庫(kù),你初始化SysTick,都會(huì)調(diào)用內(nèi)核中的SysTick_Config函數(shù)。

比如:

SysTick_Config(SystemCoreClock / 1000);

初始化調(diào)用這段代碼之后,SysTick將會(huì)實(shí)現(xiàn)1ms中斷一次。

這段代碼實(shí)現(xiàn)1ms中斷一次相信大家都能理解,但是這里SysTick初始化和上面說(shuō)的時(shí)鐘『/8』有關(guān)系嗎?

3

SysTick時(shí)鐘源是來(lái)自哪里?

這個(gè)問(wèn)題只要認(rèn)真看參考手冊(cè)都能找到答案。

RCC通過(guò)AHB時(shí)鐘(HCLK)8分頻后作為Cortex系統(tǒng)定時(shí)器(SysTick)的外部時(shí)鐘。

通過(guò)對(duì)SysTick控制與狀態(tài)寄存器的設(shè)置,可選擇上述時(shí)鐘或Cortex(HCLK)時(shí)鐘作為SysTick時(shí)鐘。

--來(lái)自參考手冊(cè)

也就是說(shuō)SysTick時(shí)鐘源可以來(lái)自兩個(gè)地方:

AHB時(shí)鐘8分頻

HCLK(內(nèi)核)時(shí)鐘


通過(guò)SysTick控制與狀態(tài)寄存器的設(shè)置進(jìn)行選擇時(shí)鐘源。

具體就是通過(guò)CLKSOURCE(時(shí)鐘源)這一Bit位來(lái)選擇:

再次看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 */}

你會(huì)發(fā)現(xiàn),其實(shí)源碼已經(jīng)默認(rèn)使用HCLK(內(nèi)核)時(shí)鐘。

而SysTick_Config函數(shù)屬于內(nèi)核(如core_cm3.h)已經(jīng)寫(xiě)好源碼,一般我們不去修改。

所以,到這里,你會(huì)明白:SysTick時(shí)鐘源其實(shí)就是用的HCLK(內(nèi)核)時(shí)鐘。

4

STM32CubeMX...可選擇1分頻

分析上面問(wèn)題的時(shí)候,我突然發(fā)現(xiàn)一個(gè)問(wèn)題:為什么STM32CubeMX中Cortex系統(tǒng)定時(shí)器可選擇1分頻(和8分頻)?

(使用STM32CubeMX V5.1.0)

我通過(guò)配置1分頻和8分頻,各自生成代碼,進(jìn)行對(duì)比,發(fā)現(xiàn)生成的代碼完全一樣。

然后,我又查看手冊(cè),RCC時(shí)鐘樹(shù)中的這個(gè)位置是固定『/8』,也沒(méi)有看到可『/1』的說(shuō)明。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353773
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1701

    瀏覽量

    131187
  • Cortex
    +關(guān)注

    關(guān)注

    2

    文章

    201

    瀏覽量

    46380
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13020
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32F030C8T6進(jìn)入停止模式后所有時(shí)鐘都停止了,為何SysTick還能工作?

    我在使用STM32F030C8T6,按照參考手冊(cè)的說(shuō)法,在停止模式全部時(shí)鐘停止。沒(méi)有了時(shí)鐘SysTick應(yīng)該也不再工作,但實(shí)際上SysTick
    發(fā)表于 07-23 06:52

    安徽京準(zhǔn)-時(shí)間服務(wù)器(NTP網(wǎng)絡(luò)時(shí)鐘)在醫(yī)療的重要性

    安徽京準(zhǔn)-時(shí)間服務(wù)器(NTP網(wǎng)絡(luò)時(shí)鐘)在醫(yī)療的重要性
    的頭像 發(fā)表于 06-11 10:14 ?294次閱讀

    請(qǐng)問(wèn)CYT4BF8CDS如何更改PWM時(shí)鐘?

    我目前正在使用 CYT4BF8CDS 微控制器的 PWM 模塊。 Pwm_Init() API 具有時(shí)鐘參數(shù),其默認(rèn)時(shí)鐘時(shí)鐘
    發(fā)表于 05-23 06:24

    STM32F030C8T6進(jìn)入停止模式后所有時(shí)鐘都停止了,為何SysTick還能工作?

    我在使用STM32F030C8T6,按照參考手冊(cè)的說(shuō)法,在停止模式全部時(shí)鐘停止。沒(méi)有了時(shí)鐘,SysTick應(yīng)該也不再工作,但實(shí)際上SysTick
    發(fā)表于 04-16 07:22

    STM32CubeMX 6.5.0時(shí)鐘配置頁(yè)面的ADC時(shí)鐘無(wú)法配置怎么解決?

    最新版STM32CubeMX 6.5.0,啟動(dòng)ADC功能后,時(shí)鐘配置頁(yè)面的ADC時(shí)鐘仍無(wú)法配置。STM32CubeMX 6.4.0使用正常
    發(fā)表于 03-25 07:04

    STM32H723進(jìn)不了systick中斷的原因?怎么解決?

    STM32H723ZGT6使用時(shí),無(wú)法進(jìn)入systick中斷,導(dǎo)致HSE時(shí)鐘配置不成功,進(jìn)入硬件故障
    發(fā)表于 03-12 07:11

    使用stm32l072cbt6作為系統(tǒng)時(shí)鐘,為什么生成的代碼對(duì)于systick的重裝載值是按MSI計(jì)算的?

    首先說(shuō)一下,我使用的是stm32l072cbt6這款芯片 我的時(shí)鐘設(shè)置如圖 但是生成后,我查代碼發(fā)現(xiàn)systick重裝載值是這樣的 這樣是代表我的系統(tǒng)時(shí)鐘實(shí)際上是MSI嗎,這個(gè)HA
    發(fā)表于 03-12 06:55

    PTP時(shí)鐘設(shè)備全攻略:從普通時(shí)鐘到透明時(shí)鐘的進(jìn)階之路

    在現(xiàn)代通信技術(shù),精確時(shí)間同步對(duì)于保障網(wǎng)絡(luò)性能至關(guān)重要。PTP(PrecisionTimeProtocol)時(shí)鐘設(shè)備作為實(shí)現(xiàn)高精度時(shí)間同步的關(guān)鍵組件,其配置和選擇對(duì)于網(wǎng)絡(luò)架構(gòu)師和工程師來(lái)說(shuō)至關(guān)重要
    的頭像 發(fā)表于 02-22 08:04 ?1243次閱讀
    PTP<b class='flag-5'>時(shí)鐘</b><b class='flag-5'>源</b>設(shè)備全攻略:從普通<b class='flag-5'>時(shí)鐘</b>到透明<b class='flag-5'>時(shí)鐘</b>的進(jìn)階之路

    ADuCM360 SysTick時(shí)鐘怎么使能?

    使用SysTick做定時(shí)器,實(shí)際貌似SysTick不能運(yùn)行,估計(jì)是沒(méi)有提供時(shí)鐘,ADuCM360時(shí)鐘樹(shù)如下圖所示,找不到怎么打開(kāi)內(nèi)核
    發(fā)表于 01-12 06:05

    個(gè)人對(duì)STM32 SysTick的總結(jié)(寄存器操作)

    一、概述:SysTick是一個(gè)簡(jiǎn)單的遞減24位計(jì)數(shù)器。如果你不需要再應(yīng)用程序嵌入操作系統(tǒng),SysTick可以作為簡(jiǎn)單的延時(shí)和產(chǎn)生周期性的中斷。狀態(tài)控制寄存器的第0位可以使能計(jì)數(shù)器,當(dāng)前值寄存器隨著
    的頭像 發(fā)表于 01-06 08:00 ?1593次閱讀
    個(gè)人對(duì)<b class='flag-5'>STM32</b> <b class='flag-5'>SysTick</b>的總結(jié)(寄存器操作)

    CKS32F4xx系列MCU SysTick定時(shí)器的原理及使用方法

    、中斷延時(shí)以及測(cè)量函數(shù)運(yùn)行時(shí)間;在實(shí)時(shí)操作系統(tǒng)RTOS作為滴答定時(shí)器,用于上下文切換。采用Cortex-M內(nèi)核的微處理都有SysTick定時(shí)器,方便不同處理器之間的軟件移植。SysTick定時(shí)器
    的頭像 發(fā)表于 12-18 09:21 ?1153次閱讀
    CKS32F4xx系列MCU <b class='flag-5'>SysTick</b>定時(shí)器的原理及使用方法

    FreeRTOSSystick的問(wèn)題

    在Cortex-M內(nèi)核,系統(tǒng)節(jié)拍由Systick時(shí)鐘提供,當(dāng)配置好系統(tǒng)滴答時(shí)鐘后,每次時(shí)鐘中斷就會(huì)觸發(fā)中斷處理數(shù)xPortSysTickH
    的頭像 發(fā)表于 12-15 08:00 ?983次閱讀
    FreeRTOS<b class='flag-5'>中</b><b class='flag-5'>Systick</b>的問(wèn)題

    systick_handler無(wú)法進(jìn)入怎么解決

    在嵌入式系統(tǒng),SysTick是一個(gè)用于定時(shí)器和延時(shí)的模塊,通常用于處理實(shí)時(shí)任務(wù)、中斷和延時(shí)等。然而,在某些情況下,SysTick中斷處理函數(shù)(systick_handler)可能無(wú)法
    的頭像 發(fā)表于 12-01 15:36 ?3926次閱讀

    i.MX RTFlexSPI外設(shè)不常用的讀選通采樣時(shí)鐘

    i.MX RTFlexSPI外設(shè)不常用的讀選通采樣時(shí)鐘
    的頭像 發(fā)表于 10-30 17:44 ?493次閱讀
    i.MX RT<b class='flag-5'>中</b>FlexSPI外設(shè)不常用的讀選通采樣<b class='flag-5'>時(shí)鐘</b><b class='flag-5'>源</b>

    STM32SysTick時(shí)鐘來(lái)自哪里

    STM32SysTick時(shí)鐘來(lái)自哪里?
    的頭像 發(fā)表于 10-26 15:58 ?1696次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SysTick</b><b class='flag-5'>時(shí)鐘</b><b class='flag-5'>源</b><b class='flag-5'>來(lái)自</b><b class='flag-5'>哪里</b>?