CCWO

挫けそうになるブログ

STM32F303K8 ADC 1ch レギュラー変換

開発環境

評価ボード Nucleo STM32F303K8
IDE System Workbench for STM32 (SW4STM32)
Library Hal Library
OS windows 10 pro

ADCを連続変換で1ch読んでみます。

CubeMXの設定

f:id:CCWO:20170822072204p:plain
左ツリー ADC1のIN1: IN1 Single-ended(GNDと比較する。)

ADC1の設定

Configurationタブ→ADC1→ADC1 Configuration→Parameter Settings
f:id:CCWO:20170822072345p:plain
変更点
Continuous Conversion Mode: Enable
だけ。これでgenerateします。

SW4STM32の設定

main.c
設定用構造体の宣言

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
TIM_MasterConfigTypeDef sMasterConfig;
ADC_ChannelConfTypeDef sADCConfig;
/* USER CODE END PV */

読み取り用の変数宣言

/* USER CODE BEGIN 0 */
uint16_t uhADCxConvertedValue = 0;
/* USER CODE END 0 */

ADCの初期化とスタート

  /* USER CODE BEGIN 2 */
  // ADC
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
	  /* ADC initialization Error */
	  Error_Handler();
  }
  if (HAL_ADC_ConfigChannel(&hadc1, &sADCConfig) != HAL_OK)
  {
	  /* Channel Configuration Error */
	  Error_Handler();
  }
  /* Run the ADC calibration in single-ended mode */
  if (HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED) != HAL_OK)
  {
	  /* Calibration Error */
	  Error_Handler();
  }

  /*##-3- Start the conversion process #######################################*/
  if (HAL_ADC_Start(&hadc1) != HAL_OK)
  {
	  /* Start Conversation Error */
	  Error_Handler();
  }
  /* USER CODE END 2 */

while文の中

  /* USER CODE BEGIN 3 */
	  if (HAL_ADC_PollForConversion(&hadc1, 10) != HAL_OK)
	  {
		  /* End Of Conversion flag not set on time */
		  Error_Handler();
	  }
	  else
	  {
		  /* ADC conversion completed */
		  /*##-5- Get the converted value of regular channel  ######################*/
		  uhADCxConvertedValue = HAL_ADC_GetValue(&hadc1);
	  }
	  printf("%" PRIu16 "\r\n", uhADCxConvertedValue);
	  HAL_Delay(100);
  }
  /* USER CODE END 3 */

結果 Consoleに赤字で結果が表示されています。1kΩの可変抵抗(ボリューム)の出力を読みました。デバッグ用のsemihostingとuint16_t用のinttypes.hをインクルードしています。
f:id:CCWO:20170822072900p:plain
こんな感じ。
f:id:CCWO:20170822072957j:plain
参考にしました。
gsmcustomeffects.hatenablog.com
マルチチャンネル使えないとほぼ意味ないのがマイコンなんですが、DMA使ったADCがちょっとてこずずったのでまた今度やってみよう・・・