之前使用SysTick滴答定時(shí)器都是通過(guò)查找內(nèi)核編程手冊(cè)配置寄存器讓SysTick滴答定時(shí)器工作的。其實(shí)在內(nèi)核相關(guān)的頭文件core_cm4.h中已經(jīng)有SysTick滴答定時(shí)器的相關(guān)配置了。
條件__Vendor_SysTickConfig == 0成立,配置函數(shù)才能使用。
剛好在stm32f4xx.h中定義了__Vendor_SysTickConfig = 0,所以可以使用該配置函數(shù)。
觀(guān)察函數(shù)__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks),其中的寄存器和我們?cè)赟ystick查詢(xún)定時(shí)中用到的寄存器其實(shí)是一樣的。
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
//SysTick_LOAD_RELOAD_Msk為24,如果裝載值超過(guò)24位,返回錯(cuò)誤信息
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); } /* Reload value impossible */
SysTick- >LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
//設(shè)中斷端優(yōu)先級(jí)
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 */
}
這種方式?jīng)]有分頻,時(shí)鐘速度為168Mhz,每秒可計(jì)數(shù)168000000次,每毫秒可計(jì)數(shù)168000次,每微秒計(jì)數(shù)168次。裝載值為24位,最大為16777215,可以算得最大延時(shí)時(shí)間為100ms。
這次的程序不需要上次寫(xiě)的delay文件了,只要在主文件加入SysTick配置函數(shù)的頭文件core_cm4.h,根據(jù)想要定時(shí)的時(shí)間,計(jì)算相應(yīng)的數(shù)值,初始化SysTick配置函數(shù)。再調(diào)用中斷接口封裝中斷函數(shù),就可以實(shí)現(xiàn)SysTick中斷了。
如果中斷函數(shù)像之前那樣可能會(huì)看不到現(xiàn)象,因?yàn)槎〞r(shí)時(shí)間過(guò)短,人眼可能識(shí)別不出led燈在閃爍,這里可以添加個(gè)計(jì)數(shù),相當(dāng)于定時(shí)更長(zhǎng)時(shí)間才執(zhí)行想要的程序。
#include "stm32f4xx.h"
#include "led.h"
#include "core_cm4.h"
int main()
{
LED_Init(); //初始化LED燈
SysTick_Config(8400000);//延時(shí)50ms 168000000/8400000=20 1000/20=50
while(1)
{
}
}
void SysTick_Handler()
{
static u8 cnt = 0;
SysTick- >CTRL &=~ (1< 16); //清計(jì)數(shù)標(biāo)志位
cnt++;
if(cnt == 10)
{
LED_Toggle(DS0); //LED燈閃爍
cnt = 0;
}
}
編譯工程項(xiàng)目并燒入開(kāi)發(fā)板,LED燈閃爍,SysTick配置函數(shù)調(diào)用成功。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
108182 -
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120779 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3253瀏覽量
115067 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
13959 -
STM32F4
+關(guān)注
關(guān)注
3文章
194瀏覽量
28104
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論