简介:
1、定时器是一个24位的定时器。
2、来一个时钟计数减一,减到0触发中断,自动重装。
3、计数时钟可配置为AHB时钟 或 AHB时钟/8。
stm32的滴答定时器在V3.5版本的固件库中使用起来非常的简单。just一个函数就开启这个时钟了。
uint8_t SysTick_Config(uint32_t ticks);
ticks参数是定时器的初始值。配置成功返回0,失败返回1;不过这个函数的原型用keil跟踪不到。
如果想用的话直接配置就行了。
常用的有:
SystemCroeClock/1000000 1us中断一次
SystemCroeClock/1000 1ms中断一次
默认是用的AHB时钟如果你想用8分频的话就使用这个函数:
void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
这个函数在misc.c中,有个参数是两个宏,意思一目了然:
#define SysTick_CLKSource_HCLK_Div8 ((uint32_t)0xFFFFFFFB)
#define SysTick_CLKSource_HCLK ((uint32_t)0x00000004)
下面是一个例子,LED灯0.5秒闪烁:
main.cpp
#include "stm32f10x.h"
#include "led.h"
#include "stm32f10x_it.h"
#include<string>
#include<time.h>
using namespace std;
void init()
{
SysTick_Config(72000000/1000);
}
LED led;
int main()
{
string str;
uint8_t flag=0;
uint32_t lastTime=0;
init();
while(1)
{
if((getTime()-lastTime)>500)
{
lastTime = getTime();
flag = 1-flag;
if(flag)
led.LED2On();
else
led.LED2Off();
}
}
}
中断函数SysTick_Handler(),在stm32f10x_it.c中:
uint32_t getTime(void)
{
return GlobalTime;
}
void SysTick_Handler(void)
{
++GlobalTime;
}