一、Systick定時(shí)器
1、SysTick定時(shí)器簡(jiǎn)介
SysTick定時(shí)器也稱為滴答定時(shí)器,SysTick定時(shí)器是內(nèi)核中的一個(gè)外設(shè),內(nèi)嵌在NVIC(嵌套向量中斷控制器)里面,在cortex M3、M4中都存在,很方便用戶移植。
雖然我用的是cortex M4的內(nèi)核,但是他的內(nèi)核文檔在這方面和Cortex M3的相似。
所以我這里參考了M3的內(nèi)核中文文檔。M3和M4內(nèi)核文檔——密碼:0423。
注意:因?yàn)镾ystick定時(shí)器是內(nèi)核外設(shè),所以在STM32F4中文參考手冊(cè)是找不到的,可以參考Cortex M3權(quán)威指南(第8章) + M3/M4內(nèi)核權(quán)威指南(9.5章節(jié))。
?Systick定時(shí)器是一個(gè)24bit的倒計(jì)時(shí)(向下計(jì)數(shù))定時(shí)器,功能就是實(shí)現(xiàn)簡(jiǎn)單的延時(shí)。
24位向下計(jì)數(shù)定時(shí)器。
2、SysTick時(shí)鐘源
SysTick定時(shí)器有兩個(gè)時(shí)鐘源可以選擇,具體可以參考下圖中的中文手冊(cè)的時(shí)鐘樹(shù)。(stm32f4xx中文手冊(cè))密碼同上。
?我們主要看粉色虛線框中的內(nèi)容,從左往右看,首先是AHBPRESC/1,...,512這一個(gè)輸出的AHB頻率為168MHz,向上分為兩個(gè)方向,一個(gè)是到Cortex 系統(tǒng)定時(shí)器,一個(gè)是FCLK Cortex自由運(yùn)行時(shí)鐘,這兩個(gè)時(shí)鐘源都可以作為SysTick定時(shí)器的時(shí)鐘源。這兩個(gè)的頻率分別是8分頻:21MHz和沒(méi)有分頻的168MHz。
也可以參考stm32CubeMX中的圖片:
?讓我們思考一下為什么要分頻呢?為什么有不同頻率的時(shí)鐘源?
因?yàn)檫x擇不同頻率的時(shí)鐘源會(huì)影響延時(shí)的長(zhǎng)短。
如果選擇168MHz的時(shí)鐘源作為SysTick的時(shí)鐘源,168MHz:1s震蕩168 000 000次,也就是1us(1s == 1 000 000 us)震蕩168次,而我們的SysTick定時(shí)器是一個(gè)24位的向下計(jì)數(shù)定時(shí)器。所以最多計(jì)數(shù)2^24-1(從零開(kāi)始計(jì)數(shù),所以要減一),所以可以算出最大延時(shí)時(shí)間:99.864ms
計(jì)算過(guò)程:2^24/168 = 99864.380952380952380952380952381us = 99.864ms
如果選擇21MHz作為時(shí)鐘源,則1s震蕩21 000 000次,所以1us 震蕩 21次,最大延時(shí)時(shí)間:
2^24/21 =?798,915.04761904761904761904761905 us = 798.915 ms
關(guān)于Systick定時(shí)器的寄存器說(shuō)明以及函數(shù)接口都存儲(chǔ)在內(nèi)核文件misc.c以及misc.h,同時(shí)在core_cm4.h頁(yè)定了關(guān)于Systick定時(shí)器的內(nèi)容。
內(nèi)核中提供了一個(gè)函數(shù)接口可以去修改Systick的時(shí)鐘源? 函數(shù)為 SysTick_CLKSourceConfig()
我們來(lái)講一下?SysTick_CLKSourceConfig()這個(gè)函數(shù):
函數(shù)原型
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
函數(shù)參數(shù)
參數(shù)一:SysTick_CLKSource?? 選擇時(shí)鐘源? 一般選SysTick_CLKSource_HCLK_Div8?? 21MHZ
@brief配置SysTick時(shí)鐘源。
@param SysTick_CLKsource: SysTick時(shí)鐘源。該參數(shù)可以是以下值之一:
????????@arg SysTick_CLKSource_HCLK_Div8:選擇AHB時(shí)鐘除以8作為SysTick時(shí)鐘源
????????@arg SysTick_CLKSource_HCLK:選擇AHB時(shí)鐘作為SysTick時(shí)鐘源。
@retval 無(wú)
3、SysTick定時(shí)器的應(yīng)用
內(nèi)核提供兩種方案來(lái)使用systick定時(shí)器,分別是 中斷方式 + 非中斷方式
①中斷方式:
?第一步:設(shè)置Systick的中斷周期(SysTick_Config函數(shù))
?讓我們分析一下這個(gè)SysTick_Config函數(shù):
函數(shù)原型:__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
函數(shù)參數(shù)分析:
?ticks是兩個(gè)中斷中的滴答數(shù),我們回頭看內(nèi)核文檔:
滴答數(shù) = 時(shí)鐘源 / 時(shí)間,假如中斷周期為1us,時(shí)鐘源為168MHz,則ticks = 168 000 000 / 1 000 000 = 168
第二步:編寫(xiě)延時(shí)函數(shù)
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-762839.html
第三步:在Systick中斷服務(wù)函數(shù)中修改中斷次數(shù)
?
?②非中斷方式:
直接操作Systick定時(shí)器的4個(gè)寄存器,使用流程如下
?
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-762839.html
?
到了這里,關(guān)于stm32的學(xué)習(xí)——SysTick定時(shí)器的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!