stm32 SysTick(滴答定时器)

    简介:

        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;
}


你可能感兴趣的:(C++,stm32,SysTick)