STM32学习笔记(七)---SysTick
STM32學習筆記(七)—SysTick
文章目錄
- STM32學習筆記(七)---SysTick
- 一、SysTick簡介
- 二、SysTick功能框圖
- 三、SysTick寄存器
- 四、SYSTICK使用
- 1.中斷方式使用
- 2.輪詢方式使用
- 五、參考資料:
- 五、參考資料:
一、SysTick簡介
SysTick屬于CM4內核中的一個外設,內嵌在NVIC中,有關寄存器的定義和部分庫函數都在core_cm4.h頭文件中實現。
SysTick(系統滴答定時器)是一個24bit的向下遞減的計數器,計數器每計數一次的時間為1/SYSCLK。
當重裝載初值寄存器的值減到0的時候,系統定時器就產生一次中斷,一次循環往復。
系統定時器一般用于操作系統,用于產生時基,維持操作系統心跳。
二、SysTick功能框圖
三、SysTick寄存器
| CTRL | 控制及狀態寄存器 |
| LOAD | 重裝載數值寄存器 |
| VAL | 當前數值寄存器 |
| CALIB | 校準數值寄存器 |
SysTick控制和狀態寄存器
| 16 | COUNTFLAG | RO | 0 | 當SysTick定時器計數到0時,該位變為1,讀取寄存器或清除計數器當前值會被清零 |
| 2 | CLKSOURCE | R/W | 0 | 時鐘選擇位:0=SYSCLK/8, 1=SYSCLK |
| 1 | TICKINT | R/W | 0 | 1 = SYSTICK定時器計數減至0時產生異常 0 = 不產生異常 |
| 0 | ENABLE | R/W | 0 | SYSTICK定時器使能 |
SysTick重裝載值寄存器
| 23:0 | RELOAD | R/W | 未定義 | 定時器計數為0時的重裝載值 |
SysTick當前值寄存器
| 23:0 | CURRENT | R/Wc | 0 | 讀出值為SYSTICK定時器的當前值。寫入任何值都會清除寄存器,SYSTICK控制和狀態寄存器中的COUNTFLAG也會清零 |
四、SYSTICK使用
1.中斷方式使用
可以直接通過庫函數SysTick_Config(uint32_t ticks)來配置,該函數位于core_m4.h文件中
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) {/* 重裝載初值超出范圍 */if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); } /* 設置重裝載初值 */SysTick->LOAD = (uint32_t)(ticks - 1UL); /* 設置SysTick定時器中斷優先級,這里將SysTick的優先級設置位15(0-15),為系統最低 */NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* 設置當前數值寄存器 */SysTick->VAL = 0UL;/* 設置時鐘源的選擇:SYSCLK=168M * 使能系統定時器中斷* 使能定時器*/SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk |SysTick_CTRL_ENABLE_Msk; return (0UL); } /* SystemCoreClock / 1000 1ms中斷一次* SystemCoreClock / 1000000 1us中斷一次*/ Systick_Config(SystemCoreClock / 1000);注意:這里的tick值最大為2^24 = 16,777,216?,不能超過此值。因此上面函數不能夠配置1s中斷(1s中斷tick值為:168000000>16777216)。
void SysTick_Handler(void) {/* 根據自己的實際需求來寫 */ }2.輪詢方式使用
若要在輪詢模式中使用SysTick定時器,則需要通過上述寄存器來配置。可以利用SysTick控制和狀態寄存器的(SysTick->CTRL)中的計數標志來確定定時器何時變為0。
Systick->CTRL = 0; //禁止SysTick SysTick->LOAD = 0xFF; //計數范圍255-0(256個周期) SysTick->VAL = 0; //清除當前值和計數標記 SysTick->CTRL = 5; //使能SysTick定時器并使用處理器時鐘 while((SysTick->CRTL & 0x00010000) == 0); //等待計數標志置位 SysTick->CTRL = 0; //禁止SysTick上面這段代碼便實現了延時265個時鐘周期的延時功能,具體的延時函數可以參考正點原子的延時函數。
上述兩種實現方法都是在裸機條件下的使用方法,在實際應用時可以根據需求做選擇。
五、參考資料:
1.《零死角玩轉STM32-F407霸天虎》(SysTick)
2.《STM32F4xx標準外設庫源碼》(core_cm4.h)
五、參考資料:
1.《零死角玩轉STM32-F407霸天虎》(SysTick)
2.《STM32F4xx標準外設庫源碼》(core_cm4.h)
3.《ARM Cortex-M3與Cortex-M4權威指南》(9.5 SysTick定時器)
總結
以上是生活随笔為你收集整理的STM32学习笔记(七)---SysTick的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想K29笔记本主板图片
- 下一篇: 在博客和论坛发外链还有用吗?