상세 컨텐츠

본문 제목

[STM32]Uart 통신 (HAL_UART_Receive_IT/HAL_UART_Transmit) & printf

Firmware/STM

by StephanosJ 2022. 12. 9. 15:02

본문

반응형

1. Uart RX/TX port를 설정한다. (PD9 > Uart3 Rx / PD8 > Uart3 Tx)

2. UART3 Mode and Configuration 설정

Interrupt 상용을 위해서 global interrupt enable설정

3. Uart Parameter 설정

BaudRate/Length/Parity/StopBits 속성 설정

4. 저장하면 Uart 속성 설정 관련하여 Code Generate되는 것을 확인 할 수 있다.

main.c

static void MX_USART3_UART_Init(void)
{
...
  huart3.Instance = USART3;
  huart3.Init.BaudRate = 115200;
  huart3.Init.WordLength = UART_WORDLENGTH_8B;
  huart3.Init.StopBits = UART_STOPBITS_1;
  huart3.Init.Parity = UART_PARITY_NONE;
  huart3.Init.Mode = UART_MODE_TX_RX;
  huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart3.Init.OverSampling = UART_OVERSAMPLING_16;
...
}

 

5. HAL_UART_Transmit 사용하여 Uart로 Data를 전송 하고 PC Terminal 프로그램으로 보낸 Data를 확인할 수 있다.

HAL_UART_Transmit(&huart3, "UART4 SEND TEST\r\n", 20, 20);

6. HAL_UART_RxCpltCallback함수를 재정의하여 Uart receive interrupt를 확인 할 수 있으며

   HAL_UART_Receive_IT를 이용하여 UART로 받은 데이터를 확인 할 수 있다.

 

  초기화 코드에 HAL_UART_Receive_IT(&huart3, (uint8_t*)&uart3_data, 1);를 추가한다.

  이 후에는 Uart로 Data가 들어올때마다 interrupt가 발생하여 HAL_UART_RxCpltCallback함수가 호출된다.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

    if(huart->Instance == USART3)
    {
         HAL_UART_Receive_IT(&huart3, (uint8_t*)&uart3_data, 1);

    }
}

반응형

관련글 더보기