标题: STM32 systick定时数组循环赋值,不会循环赋值? [打印本页]

作者: laym    时间: 2021-5-28 14:44
标题: STM32 systick定时数组循环赋值,不会循环赋值?
systick定时20ms得一个值放入数组中,连续取50个数(1s)得到一个数组,然后去掉第一个和左后一个值计算剩下值得平均值。第一个1秒得到一个数组,后面定时时间内得不到值。我想每隔1秒都能得到一个数组,求各位教教我,谢谢!

static int16_t BatAdcCount=50;//1秒的定时次数
static uint32_t Bat_VotageAD[10];
void BatVoltageAD(int arg)//20ms执行一次,
{
      if(BatAdcCount!=0)  //计数50次,就是1秒,得到一个数组Bat_VotageAD[50]
     {
          Bat_VotageAD[BatAdcCount-1] = AdcValueGet(BAT_DETECT_CHANNEL);
          BatAdcCount--;
      }
}

作者: glinfei    时间: 2021-5-28 15:06
你的中断函数怎么写的,没看到;你在哪里恢复BatAdcCount=50了呢?没有恢复就没法得到新的数组啊;还有如果仅仅就是要个平均值,不用数组直接累加就行了;
作者: laym    时间: 2021-5-28 15:13
glinfei 发表于 2021-5-28 15:06
你的中断函数怎么写的,没看到;你在哪里恢复BatAdcCount=50了呢?没有恢复就没法得到新的数组啊;还有如果 ...

我是这样做的:在        TimerOnMsRepeatDelay(BatADCTimer,10,BatVoltageAD,0);这里是BatADCTimer=10ms回调函数BatVoltageAD, 然后再另一个    TimerOnMsRepeatDelay(PowerBatteryTimer, 100, PowerManagerOpt, 500);//每100ms 里的PowerManagerOpt回调函数内部求平均值,并恢复BatAdcCount=50


作者: xuyaqi    时间: 2021-5-28 15:19
中断里只负责放数,处理工作放在主循环里,50个放够处理一次。
作者: laym    时间: 2021-5-28 15:27
xuyaqi 发表于 2021-5-28 15:19
中断里只负责放数,处理工作放在主循环里,50个放够处理一次。

SysTick_Handler是1ms中断一次,你是说把下面的

    if(BatAdcCount!=0)  //计数50次,就是1秒,得到一个数组Bat_VotageAD[50]
      {
           Bat_VotageAD[BatAdcCount-1] = AdcValueGet(BAT_DETECT_CHANNEL);
           BatAdcCount--;
       }
放入中断函数里面吗? 但它是20ms得一个数组元素,而中断时间是1ms

作者: laym    时间: 2021-5-28 15:34
而且如果不用数组,怎么直接叠加求平均值呢?
作者: glinfei    时间: 2021-5-28 15:48
laym 发表于 2021-5-28 15:34
而且如果不用数组,怎么直接叠加求平均值呢?

你就读一个,累加一下;读完了再求平均。 要不你把主程序,中断和调用的程序都贴一下,否则没有流程图知识叙述两句很难懂的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1