본문 바로가기

STM32/touchGFX_STM32

[stm32F746] UART + LED control

728x90

* UART 통신을 통해 '0' -> LED OFF / '1' -> LED ON

 

1) USART1_IRQHandler() 함수 구현

- stm32f7xx_it.c 파일에 USART1 수신 인터럽트 발생 시 콜백 함수를 호출하고 플래그를 클리어해 주는 코드 작성

 

void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */
if((__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET) && (__HAL_UART_GET_IT_SOURCE(&huart1, UART_IT_RXNE) != RESET))
{
HAL_UART_RxCpltCallback(&huart1);  // 콜백 함수 호출 
__HAL_UART_CLEAR_PEFLAG(&huart1);  // 플래그 클리어
}
  /* USER CODE END USART1_IRQn 0 */
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

 

2) USART1 수신 인터럽트 활성화

- __HAL_UART_ENABLE_IT() 함수를 통해 수신 인터럽트 활성화

 

/* USER CODE BEGIN 2 */
  __HAL_UART_ENABLE_IT(&huart1, UART_IT_RXNE);  // 수신 인터럽트 활성화
  
  /* USER CODE END 2 */

 

3) UART RX 콜백함수 구현

- 데이터를 읽어 0이면 LED를 끄고, 1이면 LED를 켠다

 

/* USER CODE BEGIN 4 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
uint8_t rx;

if(UartHandle->Instance == USART1)
{
rx = (uint8_t) (UartHandle->Instance->RDR & (uint8_t) 0x00FF);

switch(rx) {
case '0' :
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_RESET);
break;

case '1' :
HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_SET);
break;
}
}
}
/* USER CODE END 4 */

728x90

'STM32 > touchGFX_STM32' 카테고리의 다른 글

[stm32F746] PWM  (0) 2020.09.01
[stm32F746] printf 사용 시 추가해야할 코드  (0) 2020.09.01
[stm32F746] UART Echo 프로그램  (0) 2020.09.01
[stm32F746] 100ms마다 USART1 1byte tx test  (0) 2020.09.01
[stm32F746] UART 송신  (0) 2020.09.01