常规定时中断服务函数
// 满洲里国峰电子科技 www.guofengdianzi.com
// 微信:GuoFengDianZi
/*******关于STM32定时器应用的注意事项,请参考《STM32定时器注意事项》********/
char Cnt=0;//用于长时间的定时
void BASIC_TIM_IRQHandler (void) //50ms定时中断
{
if ( TIM_GetITStatus(BASIC_TIM, TIM_IT_Update) != RESET ) //检查定时器中断是否发生
{
Cnt++;
if(Cnt>=10) //10次中断后,为500ms
{
SignalProcess(); //每500ms处理一次数据
Cnt=0; //清零,为下一次计数做准备
}
}
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); //清除中断标志位
}
/*******关于STM32定时器应用的注意事项,请参考《STM32定时器注意事项》********/
这样的代码是完全没有问题的,可移植性也比较好,但是需要在本文件中新增一个变量Cnt,在移植的时候需要注意一下。
微小的改进
使用静态变量,将Cnt封在函数内部,利用了静态函数运行结束后其值保持不变的特点。这样做的好处是,不用在中断文件stm32f10x_it.c中定义新的变量了,移植起来稍微方便些。
// 满洲里国峰电子科技 www.guofengdianzi.com
// 微信:GuoFengDianZi
void SignalProcess(char RepeatTimes)
{
static unsigned int Cnt;//静态变量只初始化一次,默认值为0,函数运行结束后其值保持不变。
Cnt++;
if(Cnt>=RepeatTimes)
{
BeginSigProcess();
Cnt=0;
}
}
void BASIC_TIM_IRQHandler (void) //50ms定时中断
{
if ( TIM_GetITStatus(BASIC_TIM, TIM_IT_Update) != RESET ) //检查定时器中断是否发生
{
SignalProcess(10); //每500ms处理一次数据
}
TIM_ClearITPendingBit(BASIC_TIM , TIM_FLAG_Update); //清除中断标志位
}
/*******关于STM32定时器应用的注意事项,请参考《STM32定时器注意事项》********/
作者:伏熊(专业:射频芯片设计、雷达系统。爱好:嵌入式。欢迎大家项目合作交流。)
微信:GuoFengDianZi