问题描述:
void TIM2_IRQHandler(void)
{
static int tim=0;
if(LL_TIM_IsActiveFlag_UPDATE(TIM2) == SET)
{
LL_TIM_ClearFlag_UPDATE(TIM2);
tim++;
TimN++;
}
}
for (n_data = 1; n_data < Len_Data; n_data++)
{
if ((data[n_data] > data[n_data - 1]) && (data[n_data] > data[n_data + 1])) //筛选峰值
{
PeakVall->Peakval[i] = data[n_data];
PeakVall->PeakValle[k] = data[n_data];
T[i]=TimN; //记录峰值时间点
i++;
n_peak = i; //峰值数量
PeakVall->n_peak= i; //返回结构体
k++;
}
if ((data[n_data] < data[n_data - 1]) && (data[n_data] < data[n_data + 1])) //筛选谷值
{
PeakVall->Valleyval[j] = data[n_data];
PeakVall->PeakValle[k] = data[n_data];
j++;
n_valley = j; //谷值数量
PeakVall->n_valley = j; //返回结构体
k++;
}
}
如果你觉得是引用中断的时间变量导致的,你可以使用stm32的滴答时钟计算程序运行时间。如果还是崩溃,可以尝试将TimN用常量代替,再继续调试排查,因为我看不到所有代码,所以需要你自己好好思考,然后调试。加油!!!
可能i值太大了,T[i]越界了
中断里访问的全局变量,要加上volatile