在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32的SysTick時鐘源來自哪里?

jf_pJlTbmA9 ? 來源: strongerHuang ? 作者: strongerHuang ? 2023-10-26 15:58 ? 次閱讀

作者 | strongerHuang

微信公眾號 | 嵌入式專欄

STM32CubeMX中Cortex系統定時器(System Timer)選擇1分頻和8分頻,為啥生成代碼一樣?

wKgaomUD8sCAFtOAAAL7suZbWz8548.png

因為STM32CubeMX會啟動SysTick作為延時(HAL_Delay)函數的時基,而SysTick作為Cortex內核的一部分,就會用到Cortex系統定時器。

那么,問題就來了SysTick時鐘源來自哪里?

1、數據手冊和STM32CubeMX時鐘樹

數據手冊時鐘樹:

wKgZomUD8sOARBKbAAPKIZokRjk327.png

STM32CubeMX時鐘樹:

wKgaomUD8sCAFtOAAAL7suZbWz8548.png

你會發現:數據手冊中的只有『/8』分頻,而STM32CubeMX除了『/8』分頻,還有『/1』分頻。

2、SysTick時鐘初始化代碼

不管是使用標準外設庫,還是HAL庫,你初始化SysTick,都會調用內核中的SysTick_Config函數。

標準庫常用初始化:

SysTick_Config(SystemCoreClock / 1000);

HAL庫初始化同樣也是調用底層的初始化函數:

uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb) { return SysTick_Config(TicksNumb); }

初始化調用這段代碼之后,SysTick將會實現1ms中斷一次。

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

3、SysTick時鐘源是來自哪里?

這個問題只要認真看參考手冊都能找到答案。

RCC通過AHB時鐘(HCLK)8分頻后作為Cortex系統定時器(SysTick)的外部時鐘。

通過對SysTick控制與狀態寄存器的設置,可選擇上述時鐘或Cortex(HCLK)時鐘作為SysTick時鐘。(--來自參考手冊)

也就是說SysTick時鐘源可以來自兩個地方:

AHB時鐘8分頻

HCLK(內核)時鐘

通過SysTick控制與狀態寄存器的設置進行選擇時鐘源。

具體就是通過CLKSOURCE(時鐘源)這一Bit位來選擇:

wKgZomUD8suAMwIbAAY63l3RHYg009.png

再次看SysTick_Config函數源碼:

__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等內核源碼中)

你會發現,其實源碼已經默認使用HCLK(內核)時鐘。

而SysTick_Config函數屬于內核(如core_cm3.h)已經寫好源碼,一般我們不去修改。

所以,到這里,你會明白:SysTick時鐘源其實就是用的HCLK(內核)時鐘。

4、最后

開篇的問題:STM32CubeMX中Cortex系統定時器(System Timer)選擇1分頻和8分頻,為啥生成代碼一樣?

wKgZomUD8s-ALT2gAAMOmD7GTZo317.png

難道,STM32CubeMX配置Cortex系統定時器時鐘是有Bug嗎?

來源:嵌入式專欄
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2290

    文章

    11018

    瀏覽量

    362959
  • 時鐘源
    +關注

    關注

    0

    文章

    97

    瀏覽量

    16264
  • Systick
    +關注

    關注

    0

    文章

    63

    瀏覽量

    13514
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    ADuCM360 SysTick時鐘怎么使能?

    使用SysTick做定時器,實際貌似SysTick不能運行,估計是沒有提供時鐘,ADuCM360時鐘樹如下圖所示,找不到怎么打開內核
    發表于 01-12 06:05

    使用FreeRTOS時Systick時鐘的配置分享

    時鐘會被默認選擇為STM32的內核時鐘,而不能選擇外部時鐘。原因就是當rtos啟動時(vTaskStartScheduler();這個函
    發表于 07-30 11:39

    STM32SysTick時鐘來自Cortex系統定時器嗎

    置頂/星標公眾號,不錯過每一條消息!有位朋友在后臺大概問了這樣一個問題:STM32SysTick時鐘來自Cortex系統定時器嗎?引伸
    發表于 08-19 08:19

    STM32SysTick時鐘

    有位朋友在后臺大概問了這樣一個問題:STM32SysTick時鐘來自Cortex系統定時器嗎?引伸:為什么
    發表于 08-19 06:47

    STM32SysTick時鐘到底是從哪來呢

    STM32SysTick時鐘來自哪里STM32
    發表于 11-24 08:05

    STM32SysTick時鐘來自Cortex系統定時器嗎

    STM32SysTick時鐘來自Cortex系統定時器嗎?為什么STM32CubeMX中C
    發表于 11-24 07:24

    STM32SysTick時鐘來自Cortex系統定時器嗎?

    初始化調用這段代碼之后,SysTick將會實現1ms中斷一次。這段代碼實現1ms中斷一次相信大家都能理解,但是這里SysTick初始化和上面說的時鐘『/8』有關系嗎?
    的頭像 發表于 04-03 13:54 ?5550次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SysTick</b><b class='flag-5'>時鐘</b><b class='flag-5'>源</b>是<b class='flag-5'>來自</b>Cortex系統定時器嗎?

    什么是SysTick定時器?實現STM32時鐘系統的詳細資料說明

    什么是SysTick定時器?實現STM32時鐘系統的詳細資料說明主要內容包括了:Systick原理和配置方法,ALIENTEK 延時函數delay講解
    發表于 01-02 08:00 ?3次下載
    什么是<b class='flag-5'>SysTick</b>定時器?實現<b class='flag-5'>STM32</b><b class='flag-5'>時鐘</b>系統的詳細資料說明

    STM32中的SysTick時鐘來自哪里

    STM32SysTick時鐘來自哪里
    的頭像 發表于 03-03 14:32 ?8238次閱讀

    STM32學習筆記:系統滴答時鐘SysTick

    目錄1、什么是時鐘2、STM32時鐘SysTick是一個系統時鐘定時器,屬于ARM Cortex-Mx內核的一個“內設”,所有基于此內核的
    發表于 11-29 09:51 ?0次下載
    <b class='flag-5'>STM32</b>學習筆記:系統滴答<b class='flag-5'>時鐘</b><b class='flag-5'>SysTick</b>

    STM32—關于SYSTICK系統時鐘的詳解及學習筆記

    SysTick_Handler中也無需對中斷標志進行清零(參考exit外部中斷服務函數)2.要注意的是關于systick其實有兩個關鍵函數,SySTick_Config,SysTick
    發表于 11-30 15:51 ?15次下載
    <b class='flag-5'>STM32</b>—關于<b class='flag-5'>SYSTICK</b>系統<b class='flag-5'>時鐘</b>的詳解及學習筆記

    STM32F103:精準延時delay——SysTick使用

    處理器的微控制器都可以由這個定時器獲得一定的時間間隔。2. SysTick相關寄存器狀態寄存器-CTRLSTCLK外部時鐘:AHB總線時鐘的 1/8FCLK 內部
    發表于 12-02 18:36 ?10次下載
    <b class='flag-5'>STM32</b>F103:精準延時delay——<b class='flag-5'>SysTick</b>使用

    17、STM32——SysTick詳解

    。不過,STCLK 的具體來源則由芯片設計者決定,因此不同產品之間的時鐘頻率可能會大不相同,你需要查找芯片的器件手冊來決定選擇什么作為時鐘。Cortex-M3 的內核中包含一個 SysTic
    發表于 12-23 19:56 ?0次下載
    17、<b class='flag-5'>STM32</b>——<b class='flag-5'>SysTick</b>詳解

    初學stm32-Systick滴答時鐘定時

    系統的心跳時鐘。這樣可以節省MCU資源,不用浪費一個定時器。比如uCOS中,分時復用,需要一個最小的時間戳,一般在STM32+UCOS系統中,都采用Systick做uCOS心跳時鐘
    發表于 12-31 19:46 ?15次下載
    初學<b class='flag-5'>stm32-Systick</b>滴答<b class='flag-5'>時鐘</b>定時

    一文詳解STM32的嘀嗒時鐘(SysTick)

    嘀嗒時鐘SysTick)是一個簡單的系統時鐘節拍計數器,它屬于Cortex-M4內核嵌套向量中斷控制器(NVIC)里的一個功能單元。他是一個24位的倒計時定時器(在NVIC中),當systi
    的頭像 發表于 01-19 18:11 ?1.6w次閱讀
    一文詳解<b class='flag-5'>STM32</b>的嘀嗒<b class='flag-5'>時鐘</b>(<b class='flag-5'>SysTick</b>)
    主站蜘蛛池模板: 在线观看二区三区午夜 | 欧美 亚洲 国产 精品有声 | www.五月婷 | 天天爱夜夜爱 | 久久精品亚洲青青草原 | 毛片网站网址 | 美女黄色在线 | 天堂8在线天堂资源在线 | 亚洲欧美4444kkkk | 欧美极品bbbbⅹxxxx | 亚洲人成人网毛片在线播放 | 手机看片自拍自拍自拍 | 亚洲成a人片在线观看尤物 亚洲成a人片在线观看中 | 免费在线亚洲 | 伊人久久大香线蕉综合亚洲 | 手机看片免费永久在线观看 | 免费网站直接看 | 久久精品午夜视频 | 国产肥女bbwbbw | 一区二区三区伦理 | 夜夜摸天天操 | 乱h亲女小说 | 久久手机视频 | 久久综合久色欧美婷婷 | 美女把尿口扒开让男人桶出水 | 加勒比综合网 | 国产情侣草莓视频在线 | 国产精品天天看大片特色视频 | 嫩草影院在线入口 | 欧美亚洲综合图区在线 | 综合网 色天使 | 久精品视频村上里沙 | 亚洲人成电影在线播放 | 国产精品九九热 | 精品日韩 | 免费又爽又黄禁片视频在线播放 | 天天拍天天干 | 国产午夜精品久久久久 | 国产全肉乱妇杂乱视频 | 精品一区二区三区视频 | 可以免费看黄色的网站 |