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));
と記述して本日の試合終了
めでたしめでたし