voidSysTick_Config(void);//SysTick定时器配置voidDelay_Ms(u32);//定时时间配置
voidvoidSysTickHandler(void);//中断定时时间处理函数
staticvu32TimingDelay;//中断处理函数
本文引用地址:https://www.eepw.com.cn/article/201611/321060.htm
//SysTick设置
voidSysTick_Config(void)
{
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_ITConfig(DISABLE);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_SetReload(9000);
//系统嘀嗒校准值固定到9000,当系统嘀嗒时钟设定为9兆赫,产生1ms时基。
SysTick_ITConfig(ENABLE);
}
voidDelay_Ms(u32nTime)
{
SysTick_CounterCmd(SysTick_Counter_Enable);
TimingDelay=nTime;
while(TimingDelay!=0)
{
}
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
voidSysTickHandler(void)
{
if(TimingDelay!=0x00)
{
TimingDelay--;
}
}
这里所有使用的都是在有stm32f10x_systick.c这个文件的时候,这个是2.0中才有的文件,3.0中使用并不是这样使用的@!
在这里说明一下的是,必须要注意,systick和普通的中断一样,当计数器溢出时就会产生中断,必须要再中断处理函数中处理,但是没有经过NVIC的控制,这个是需要注意的,没有使用NVIC配置systick。
其中systick异常,异常号15,这个定时的异常的主要功能用于操作系统提供时钟信号。
但是当产生恒定的systick中断频率:最简单的作法就是:直接把TENMS的值写入重装载寄存器,这样一来,只要没突破系统极限,就能做到每10ms来一次systick异常,如果需要其他的systick异常周期,则可以根据TENMS的值加以比例计算,只不过,在少数情况下,CM3芯片可能无法准确地提供TENMS的值(如,CM3的叫转输入信号被拉低)。
Systick定时器除了能服务于操作系统之外,还能用于其他目的:如作为一个闹钟,用于测量时间等。要注意的是,当处理器在调试器件被喊停hatl时,则systick定时器亦将暂停运作。
评论