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