본문 바로가기
Stm32/실제 구동(stm32cubeide)

ADC Multi Channel - Joy Stick

by [Akashic Records] 개발의선지자 2024. 7. 10.

stm32에 내장된 ADC 멀티 채널 기능 실습을 정리하고자 합니다.

 

사용 툴 : stm32cubeide 

ADC1 컨트롤러 - 채널 IN0 , IN1, IN6, IN7 사용

 

ADC  Parameter Settings

- 여러 채널을 샘플링 하는 경우  -> Scan Conversion Mode : Enable

- 계속 샘플링을 진행할 경우 -> Continuous Conversion Mode: Enable

- DMA 를 같이 사용하는 경우  -> DMA Continuous Requests  : Enable

- EOC : Single Channel Conversion

- Number Of Conversion : 4

- Sampling Time : 28 Cycles(임의 값, Sampling Time  높을 수록 정교한 데이터 값을 얻을 수 있지만,  고성능이 필요)

 


ADC  DMA Settings : Circular 

 

 

 

 

int main(void)
{
  /* USER CODE BEGIN 1 */
	uint32_t VR[4] = {0, };
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART2_UART_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADC_Start_DMA(&hadc1, VR, 4);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  printf("%d , %d\n", (uint16_t)VR[0], (uint16_t)VR[1]); //2바이트만 출력(형변환)
	  printf("%d , %d\n", (uint16_t)VR[2], (uint16_t)VR[3]); //2바이트만 출력(형변환)
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}