사용 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' 카테고리의 다른 글
[STM32F][HAL] CAN (0) | 2021.05.20 |
---|---|
[HAL][STM32F]USART와 Queue (2) | 2021.03.24 |
[STM32F]FSMC와 LCD (0) | 2021.02.28 |
[STM32F]FSMC로 LCD(SSD1963) 제어하기 (2) | 2021.02.07 |
[STM32F][HAL] DAC (Digital to Analog Converter) (0) | 2020.12.22 |
[STM32F][HAL] OUTPUT COMPARE 사용하기 (0) | 2020.06.01 |
[STM32F][HAL] USB CDC (Virtual Port Com) 사용하기 (1) | 2020.05.28 |
[STM32F][HAL] HAL_Delay (0) | 2020.05.21 |