STM32F303K8 ADC 1ch レギュラー変換
開発環境
評価ボード | Nucleo STM32F303K8 |
IDE | System Workbench for STM32 (SW4STM32) |
Library | Hal Library |
OS | windows 10 pro |
ADCを連続変換で1ch読んでみます。
CubeMXの設定
左ツリー ADC1のIN1: IN1 Single-ended(GNDと比較する。)
ADC1の設定
Configurationタブ→ADC1→ADC1 Configuration→Parameter Settings
変更点
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をインクルードしています。
こんな感じ。
参考にしました。
gsmcustomeffects.hatenablog.com
マルチチャンネル使えないとほぼ意味ないのがマイコンなんですが、DMA使ったADCがちょっとてこずずったのでまた今度やってみよう・・・
20180822の記事