欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 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://m.raoushi.com/bbs/) Powered by Discuz! X3.1