2016-06-15 5 views
1

안녕하세요 여러분 stm32 HAL 라이브러리를 사용하여 직렬 rx 인터럽트를 만들려고 노력하고 있으며 내가 모르는 오류가 발생했습니다.STM32 HAL rx 인터럽트가 올바르게 바이트를 가져올 수 없습니다.

정말 간단한 프로그램입니다. PC는 stm32 보드에 바이트를 제공하고 stm32는 rx 인터럽트 루틴을 사용하여 해당 바이트를 가져옵니다.

문제는 내가 "12345"와 같이 4 바이트 이상을 보내면 stm32 보드가 4 바이트 만 가져 왔고 마지막 1 바이트 (5)가 어딘가에 있다는 것입니다. 더 나은 이해를위한 사진입니다. 당신이 어떤 생각을 가지고있는 경우

HAL_UART_Transmit(&huart4, &receive1, 1, 1000); 
HAL_UART_Receive_IT(&huart4, &receive1, 1); 

, 의견을하시기 바랍니다 :

답변

3

체크 기능 : 여기

enter image description here

는 HAL_UART_RxCpltCallback 루틴 내 코드입니다 HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)를;

  1. 예를 들어 16 바이트와 같이 충분히 긴 크기를 만듭니다.
  2. HAL_UART_RxCpltCallback 루틴을 HAL_UART_Receive_IT(...) 루틴으로 호출하십시오. 나는 (\n) 탐지과 같이 끝 문자를 추가하는 당신에게 제안 :

    if ((*huart->pRxBuffPtr) == '\n') { 
        HAL_UART_RxCpltCallback(huart); //-------------------------------------------///////// 
    } else { 
        huart->pRxBuffPtr++; 
    }