STM32F4 큐브 HAL UART. 버그입니까, 아니면 뭔가 빠졌습니까?


9

인터럽트 기반 UART IO (DMA 없음)를 사용하고 있습니다.

HAL_UART_Transmit_IT기능은 레지스터 EIE에서 비트를 설정합니다 CR3. STM32F407 데이터 시트 (및 실제 동작)에 따르면, 이는 다중 버퍼 모드 ( DMAR비트가 설정된 경우) 에서만 인터럽트를 생성 합니다. EIE프레임 오류 ( FE), 오버런 오류 ( ORE), 노이즈 오류 ( NE)에 대한 인터럽트 생성을 활성화 합니다. 내가 이해하는 것처럼이 오류는 수신 전용입니다.

HAL_UART_IRQHandler기능의 일부 :

tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_ORE);
tmp2 = __HAL_UART_GET_IT_SOURCE(huart, UART_IT_ERR);
/* UART Over-Run interrupt occurred ----------------------------------------*/
if((tmp1 != RESET) && (tmp2 != RESET))
{ 
  __HAL_UART_CLEAR_OREFLAG(huart);

  huart->ErrorCode |= HAL_UART_ERROR_ORE;
}

if(huart->ErrorCode != HAL_UART_ERROR_NONE)
{
  /* Set the UART state ready to be able to start again the process */
  huart->State = HAL_UART_STATE_READY;

  HAL_UART_ErrorCallback(huart);
}  

HAL_UART_IRQHandler각 오류를 확인합니다. 오류가 발생하고 EIE비트가 설정되면 UART 상태를 재설정하지만 인터럽트 활성화 비트를 재설정하지 않으므로 TXE인터럽트가 항상 생성되지만 UART_Transmit_IT함수는 상태 HAL_UART_STATE_READY를 유효하지 않은 것으로 취급 하고 아무 것도하지 않습니다. 무한 루프.

UART_Transmit_IT기능의 일부 :

static HAL_StatusTypeDef UART_Transmit_IT(UART_HandleTypeDef *huart)
  {
  uint16_t* tmp;
  uint32_t tmp1 = 0;

  tmp1 = huart->State;
  if((tmp1 == HAL_UART_STATE_BUSY_TX) || (tmp1 == HAL_UART_STATE_BUSY_TX_RX))
  {
  }
  else
  {
    return HAL_BUSY;
  }
}

Cube HAL의 버그입니까?


3 년 반 후에도 여전히 문제입니다.
user8908459

답변:


4

버그입니다.

나는 ST 포럼에서 같은 질문을했다 : https://my.st.com/d5c15f59

그들은 그것을 확인했다.


"my.st.com"링크는 로그인이 필요합니다. ST 포럼 에서이 스레드 를 찾았습니다. 문제에 대한보고라고 생각하며 로그인하지 않고 액세스 할 수 있으므로 독자는 유용 할 수 있습니다.
SamGibson

0

MCU에 최신 버전의 Cube HAL을 다운로드하려고 했습니까?

내 HAL_UART_Transmit_IT () 함수는 귀하의 것과 매우 다르게 보입니다. 버그가있는 이전 버전 일 수 있습니다.

st.com에 접속하여 최신 버전의 Cube HAL을 검색하십시오. 아카이브 안에는 USART의 예제가 있습니다.


HAL_UART_Transmit_ITUART_Transmit_IT다른 기능입니다. 첫 번째는 인터럽트 만 설정하고 두 번째는 실제로 데이터를 전송합니다
rublag

예, 그러나 두 번째 기능은 사용자가 직접 지시하지 않는 다른 HAL 기능 만 호출 할 수 있다는 것을 알고 있습니까? 그리고 HAL 소스 파일을 열고 UART_Transmit_IT와 위에 붙여 넣은 부분과 다른 것을 찾으십시오. 여전히 버그가 있다고 생각되면 다른 옵션은 st 포럼에 동일한 질문을 쓰는 것입니다.
Gabriel Rezende Germanovix
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.