なんか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

めでたしめでたし


STMデバッグ時にやることリスト

(環境:SW4STM32+ST-LinkV2.1)

  1. マイコンに別電源を供給した上でST-Linkと接続(LEDがカラフルになる).ここでだめそうならST-Link Utilityで接続だけ確認してみる.

  2. SW4STM32を開く→CubeMXデータをインポート

  3. indexerの設定を切る.(project » Properties » C/C++ General » Indexer) 出典は海外フォーラムより.

  4. Expressionの設定をする.(Window » Show view » Expression) この辺の便利機能はガレスタ大先生がやってくれてる.

現在追記中

Linuxにうつつを抜かしていたためマイコンデバッグですっかり足をすくわれてしまったトホホ


テスト

いろいろ試し中です。試運転につきしばらくお待ちください。