STM32F401のADCの使い方

STM32でADCの使い方をまとめる。
これはSTM32でアナログジョイスティックを使うための前段階の勉強になる。


CubeMXでピンの設定を行う

STM32F401-Nucleoでアナログ入力を行えるピンは、Arduinoと同じ。
なので「A0」ピンを使っていこうと思う。
調べるとA0は「PA0」になるようだ。

PA0を選択して「ADC1_INO」に設定する。


ピンの設定はこれで終了。
ADC一つだけならこれだけで使える。


main.cでプログラムを書いていく

まずは「USER CODE BIGEN Includes」に「<stdio.h>」と「<string.h>」をインクルードする。

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include <string.h>
/* USER CODE END Includes */

あとはmain関数にこれらのコードを記述する。

  /* USER CODE BEGIN WHILE */
  int adc = 1;
  char str[16];
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
   HAL_ADC_Start(&hadc1);
   HAL_ADC_PollForConversion(&hadc1, 100);
   adc = HAL_ADC_GetValue(&hadc1);
   sprintf(str, "ADC: %d\n\r", adc);
   HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen(str), 1000);
   HAL_ADC_Stop(&hadc1);
   HAL_Delay(300);
  }
  /* USER CODE END 3 */

「HAL_ADC_Start」がHALライブラリでADCを使いますよという関数になる。
「HAL_ADC_PollForConversion」でAD変換処理を待機する。
「HAL_ADC_GetValue」でアナログ入力を行っている。
「HAL_ADC_Stop」でADCを終了する関数になる。
STM32でADCを使うのは、Arduinoよりもコードの記述が増えるので注意してほしい。

実行結果がこのような感じになる


今回はアナログ入力するピンが一つなので簡単だが、二つになるとまた難しくなってくる。
STM32のアナログ入力はArduinoのように簡単に扱えないのが難点。








コメント

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401でLチカをする(LED点灯)

STM32F401-Nucleoでシリアル通信をやってみる