stm32-M3有一个系统时基定时器,其为一个24位递减计数器。系统时基定时器设置初值并使能后,每经过一个系统时钟周期,计数器就减一,当计数器递减到0时,系统时基定时器自动重装载初值,并继续向下计数,同时内部的COUNTFLAG标志会置位,触发中断。
系统时基定时器功能简单,只能提供一个时基定时器,作为滴答时钟。在外部晶振8MHZ,通过PLL9倍频,系统时钟为72MHz,系统时钟定时器的递减频率可以设为9MHz(HCLK/8),在这个条件下,把系统定时器的初值设置为90000,就能够产生10ms的时间基值。如果开启中断,则产生10ms的中断。值得欣慰的是时基定时器的中断并不需要清除中断位,系统会自动清除。
下面通过一个简单的程序,让灯1s跳变一次。
void SysTick_Configuration(void)
{
/* Configure HCLK clock as SysTick clock source */
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //系统时钟8分频
/* SysTick interrupt each 1000 Hz with HCLK equal to 72MHz */
SysTick_SetReload(90000); //周期10ms
/* Enable the SysTick Interrupt */
SysTick_ITConfig(ENABLE); //打开中断
/* Enable the SysTick Counter */
SysTick_CounterCmd(