Flash*强 2021-08-31 08:58 采纳率: 50%
浏览 179

STM32调用定时器中的全局变量程序死机

问题描述:

  1. 我通过STM32的定时器计时,在TIM2的中断里面调用了全局变量(TimN),让它一直往上加(中断时间是10ms),程序如下
void TIM2_IRQHandler(void)
{
    static int tim=0;
  if(LL_TIM_IsActiveFlag_UPDATE(TIM2) == SET)
  {
            LL_TIM_ClearFlag_UPDATE(TIM2);
            tim++;
               TimN++; 
  }
}

  1. 但是我自己写了一个峰值识别程序,想把这个峰值之间的时间计算出来,所以需要在子程序调用TimN这个变量,但是发现只要运行到T[i]=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++;
        }
    }
  1. 配置TIM2是通过CubeMx配置的,中断可以正常进入计算时间。
  • 写回答

3条回答 默认 最新

  • Rampage_SS 2021-08-31 09:46
    关注

    如果你觉得是引用中断的时间变量导致的,你可以使用stm32的滴答时钟计算程序运行时间。如果还是崩溃,可以尝试将TimN用常量代替,再继续调试排查,因为我看不到所有代码,所以需要你自己好好思考,然后调试。加油!!!

    评论

报告相同问题?

问题事件

  • 创建了问题 8月31日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址