如题,正文如下:
1、介绍
完成Cortex-M3体系定时器SysTick的装备,需求具有以下常识:Cortex-M3体系定时器默许频率是HCLK的8分频(如下图所示),因而需求会RCC时钟的装备;然后装备SysTick体系定时器;编写SysTick中止处理函数。
体系时钟及体系定时器时钟(详见手册)
2、寄存器描绘
lSysTick操控及状况寄存器STK_CTRL
lSysTick重装载数值寄存器STK_LOAD
lSysTick当时数值寄存器STK_VAL
lSysTick校准数值寄存器STK_CALIB
与SysTick相关的固件库函数有以下几个:
l装备SysTick体系时钟:SysTick_CLKSourceConfig();
l设置SysTick重装值:SysTick_SetReload();
l使能或除能SysTick定时器:SysTick_CounterCmd();
l使能或除能SysTick定时器中止:SysTick_ITConfig();
l获取SysTick时钟当时值:SysTick_GetCounter();
l检测SysTick标志位是否设置:SysTICK_GetFlagStatus();
3、SysTick装备流程
?首要装备RCC:挑选体系时钟、装备总线时钟、使能外围设备时钟等;
?装备NVIC:挑选中止优先级组,设置SysTick中止优先级,使能SysTick中止通道;
?编写SysTick中止处理函数;
?装备SysTick时钟:
n设置SysTick时钟源(不需求,默许挑选HCLK的8分频作为SysTick体系定时器的时钟源):调用SysTick_CLKSourceConfig()函数;
n设置SysTick时钟重装值:调用SysTick_SetReload();
n使能SysTick时钟中止(依据详细使用需求):调用SysTick_ITConfig()函数;
?使能SysTick时钟:调用SysTick_CounterCmd()函数;
然后还能够调用SysTick_GetCounter()函数获取SysTick体系时钟计数器的当时值;也能够调用SysTick_GetFlagStatus()函数查看指定的SysTick标志位是否设置(没有敞开中止,通过软件查询方法查看体系定时器是否计数到0)。
SysTick体系定时器的中止标志位在体系时钟节拍操控与状况寄存器CTRL的COUNTFLAG位,该位由定时器计数到0置1,读取时清零。因而能够调用函数SysTick_GetFlagStatus(SysTick_FLAG_COUNT)来铲除COUNTFLAG标志位。
通过测验:不调用SysTick_GetFlagStatus(SysTick_FLAG_COUNT)函数来铲除标志位,在每次体系时钟节拍SysTick在计数为0时,也都能进入中止处理函数。但程序的严密性考虑,最好仍是调用该函数。
4、SysTick体系定时器比如
比如1:
/*主函数中装备,这儿没有挑选SysTick的时钟源,是因为c8芯片现已将该时钟固化成HCLK的8分频了*/
SysTick_SetReload(9000);
SysTick_ITConfig(ENABLE);
SysTick_CounterCmd(SysTick_Counter_Enable);
/*中止处理函数*/
void SysTick_Handler(void)/* 1ms中止一次*/
{
if(SET == SysTick_GetFlagStatus(SysTick_FLAG_COUNT))/*读标志位,一起铲除标志位*/
{
SysCount++;
if(500 == SysCount)
{
SysCount = 0;
count++;
}
}
}
比如2:
/*主函数装备*/
SysTick_SetReload(9000);
SysTick_ITConfig(ENABLE);
/*延时函数,延时nms */
void Delay(u32 nTime)
{
//敞开SysTick计数器
SysTick_CounterCmd(SysTick_Counter_Enable);
TimingDelay = nTime;
while(TimingDelay != 0);//死等候
//关闭体系滴答
SysTick_CounterCmd(SysTick_Counter_Disable);
//铲除SysTick计数器
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*中止处理函数*/
void SysTick_Handler(void)
{/*没有铲除标志位,在计数为0时,相同能够进入中止处理函数完成TimingDelay自减作业*/
if (TimingDelay != 0x00)
{
TimingDelay–;
}
}