* 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 */
'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 |