ST/STM32F746DIS

STM32F746G DISCOVERY - UART(DMA)

engineer4ever 2025. 4. 19. 11:37

 

MCU
STM32F746G DISCOVERY(ST)
IDE
Atollic(TrueSTUDIO), STM32CubeMX
목표
HAL driver를 사용하여 UART DMA mode 입출력 Test(Receive Overrun 방지)

 

- UART Firmware 작성시 아래와 같이 크게 세가지 모드로 구분 할 수 있음

- 각 mode별로 입출력 Test

1. Polling

2. Interrupt

3. DMA

이번 페이지에서는 DMA mode 사용


3. STM32CubeMX : UART-DMA 설정

- Configuration은 STM32F746 DISCOVERY - printf()를 이용하여 UART로 문자열 출력 참고

 

- DMA Settings 확인

1) DMA 선택

2) Add 클릭

3) USART1_RX : Mode : Circular, Increment : Memory

- GENERATE CODE 클릭


- ATOLLIC : main.c

- 터미널에서 Keyboard 입력을 받아 다시 Terminal로 출력 코드 작성

- 필요한 변수 선언

#define RX_MAX    1

uint8_t rcv_data[RX_MAX];
 

- while() 작성

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_UART_Receive_DMA(&huart1, rcv_data, RX_MAX);

  while (1)
  {
	  HAL_Delay(50);

	  if(rcv_data[0])
	  {
  		  printf("Rx OK = %c\r\n", rcv_data[0]);
  		  rcv_data[0] = 0x00;
  	  }

  	  if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_ORE))
  	  {
  		  printf("UART1 Overrun Error occurred.\r\n");
  		  __HAL_UART_CLEAR_IT(&huart1,UART_CLEAR_OREF);
  	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }