找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1614|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

STM32 systick定時(shí)數(shù)組循環(huán)賦值,不會(huì)循環(huán)賦值?

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 10 黑幣 回復(fù)本帖可獲得 10 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:909570 發(fā)表于 2021-5-28 14:44 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
systick定時(shí)20ms得一個(gè)值放入數(shù)組中,連續(xù)取50個(gè)數(shù)(1s)得到一個(gè)數(shù)組,然后去掉第一個(gè)和左后一個(gè)值計(jì)算剩下值得平均值。第一個(gè)1秒得到一個(gè)數(shù)組,后面定時(shí)時(shí)間內(nèi)得不到值。我想每隔1秒都能得到一個(gè)數(shù)組,求各位教教我,謝謝!

static int16_t BatAdcCount=50;//1秒的定時(shí)次數(shù)
static uint32_t Bat_VotageAD[10];
void BatVoltageAD(int arg)//20ms執(zhí)行一次,
{
      if(BatAdcCount!=0)  //計(jì)數(shù)50次,就是1秒,得到一個(gè)數(shù)組Bat_VotageAD[50]
     {
          Bat_VotageAD[BatAdcCount-1] = AdcValueGet(BAT_DETECT_CHANNEL);
          BatAdcCount--;
      }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:844772 發(fā)表于 2021-5-28 15:06 | 只看該作者
你的中斷函數(shù)怎么寫的,沒看到;你在哪里恢復(fù)BatAdcCount=50了呢?沒有恢復(fù)就沒法得到新的數(shù)組;還有如果僅僅就是要個(gè)平均值,不用數(shù)組直接累加就行了;

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:909570 發(fā)表于 2021-5-28 15:13 | 只看該作者
glinfei 發(fā)表于 2021-5-28 15:06
你的中斷函數(shù)怎么寫的,沒看到;你在哪里恢復(fù)BatAdcCount=50了呢?沒有恢復(fù)就沒法得到新的數(shù)組;還有如果 ...

我是這樣做的:在        TimerOnMsRepeatDelay(BatADCTimer,10,BatVoltageAD,0);這里是BatADCTimer=10ms回調(diào)函數(shù)BatVoltageAD, 然后再另一個(gè)    TimerOnMsRepeatDelay(PowerBatteryTimer, 100, PowerManagerOpt, 500);//每100ms 里的PowerManagerOpt回調(diào)函數(shù)內(nèi)部求平均值,并恢復(fù)BatAdcCount=50

回復(fù)

使用道具 舉報(bào)

地板
ID:94031 發(fā)表于 2021-5-28 15:19 | 只看該作者
中斷里只負(fù)責(zé)放數(shù),處理工作放在主循環(huán)里,50個(gè)放夠處理一次。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:909570 發(fā)表于 2021-5-28 15:27 | 只看該作者
xuyaqi 發(fā)表于 2021-5-28 15:19
中斷里只負(fù)責(zé)放數(shù),處理工作放在主循環(huán)里,50個(gè)放夠處理一次。

SysTick_Handler是1ms中斷一次,你是說把下面的

    if(BatAdcCount!=0)  //計(jì)數(shù)50次,就是1秒,得到一個(gè)數(shù)組Bat_VotageAD[50]
      {
           Bat_VotageAD[BatAdcCount-1] = AdcValueGet(BAT_DETECT_CHANNEL);
           BatAdcCount--;
       }
放入中斷函數(shù)里面嗎? 但它是20ms得一個(gè)數(shù)組元素,而中斷時(shí)間是1ms
回復(fù)

使用道具 舉報(bào)

6#
ID:909570 發(fā)表于 2021-5-28 15:34 | 只看該作者
而且如果不用數(shù)組,怎么直接疊加求平均值呢?
回復(fù)

使用道具 舉報(bào)

7#
ID:844772 發(fā)表于 2021-5-28 15:48 | 只看該作者
laym 發(fā)表于 2021-5-28 15:34
而且如果不用數(shù)組,怎么直接疊加求平均值呢?

你就讀一個(gè),累加一下;讀完了再求平均。 要不你把主程序,中斷和調(diào)用的程序都貼一下,否則沒有流程圖知識(shí)敘述兩句很難懂的。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表