なんか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)); と記述して本日の試合終了

ADC_DMA_Check

めでたしめでたし