F031のADC連続変換が・・・

なんかADCの様子が・・・

STM32F031でADCをしていた. RegularModeでいいだろと,DMAを使わないでマルチチャンネル取得を試したいたのだが・・・

ADCにはEOC/EOSというフラグがあって, ADCコンバート終了時の割り込み時にこのフラグを同時に確認すると, 今読み出してるデータの種類がわかる. ちなみに,EOC(End of conversion),EOS(End of sequence)である.

hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;として, main.c内ADC終了時のコールバック関数を以下のように記述するも

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
    if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))
        {
        adcval[adc_chcount] = HAL_ADC_GetValue(hadc);
        adc_chcount++;
        //adc_convflag=1;
        }

    if(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS))
        {
        adc_convflag=0;
        adc_chcount=0;
        }
}

サンプルのほぼパクリだがダメー!!

素直にDMAしよう?ね?

最初からこうしとけって話,無駄に2日費やした. 開発に大事なのはペースなのだよ.

ところでDMAの動きを確認したら脳筋だった. ADC側,DMA側の連続変換モードをともにONにして, HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcval, sizeof(adcval)); と記述して本日の試合終了

f:id:realteck:20171118010257p:plain

めでたしめでたし