사용 MCU : STM32F103VCT

 

Uart를 사용하기 위해서 CubeMX에서 USART1을 아래와 같이 활성화 시킵니다.

 

통신속도는 115200 Bits/s로 설정합니다. 

 

아래와 같이 USART TX RX 핀이 활성화 됩니다.

 

 

인터럽트 설정을 하기 위해서 NVIC에서 USART1 global interrupt Enabled에 체크합니다.

 

 

 

 

UART 관련 함수

// Uart 송신 인터럽트 함수: Uart Tx로 데이터를 Size만큼 전송하면 인터럽트가 발생한다.
// huart: uart 인스턴스
// pData: 송신 데이터 버퍼
// Size: 송신 데이터 개수
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);


// Uart 수신 인터럽트 함수: Uart Rx로 데이터가 Size만큼 들어오면 인터럽트가 발생한다.
// huart: uart 인스턴스
// pData: 수신 데이터 버퍼
// Size: 수신 데이터 개수
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

 

UART Interrupt예제

/*
  Uart Interrupt Echo 예제
  
  인터럽트로 수신한 Uart 데이터를 전송한다.
  
  main.c
*/


uint8_t rx_data;


// 인터럽트 콜백 함수: 인터럽트가 발생되면 이 함수가 호출된다.
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
	if (huart->Instance == USART1) {
        // 데이터 1개를 수신하면 인터럽트를 발생시킨다.
		HAL_UART_Receive_IT(&huart1, &rx_data, 1);
        
        // 받은 데이터를 전송한다.
		HAL_UART_Transmit(&huart1, &rx_data, 1, 10);
	}
}



void main ()
{

  /* USER CODE BEGIN 1 */

  /* 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_USART1_UART_Init();

  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
  HAL_UART_Receive_IT(&huart1, &rx_data, 1);
 /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

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

 

예제에서는 간단하게 인터럽트 수신을 받으면 바로 송신하도록 하였지만,

 

실제 운용할 때에는 Queue Buffer를 구성하고 main 에서 데이터를 빼내어 사용하여야 합니다.

 

[MCU/STM32:HAL] - [HAL][STM32F]USART와 Queue

반응형

+ Recent posts