2017-04-12 8 views
0

STM32 시리즈에서 UART DMA 수신을 활성화하기위한 요구 사항은 무엇입니까? 내 관찰에서, 어떤 오래된 데이터가 uart 수신 데이터 레지스터에 있다면, 새로운 데이터가 dma 인터럽트를 트리거하여 바이트를 지우고 정상적으로 계속 진행할 수 없으므로 활성화되었을 때 dma가 시작되는 것을 방지합니다.stm32 usart dma가 데이터 레지스터의 바이트가 수신되지 않음

dmar 비트를 설정 한 후 (즉, uart dma receive enabled) 인터럽트 컨텍스트에서 데이터를 수신하면 dma는 인터럽트를 빠져 나가면 해당 비트를 지우겠습니까? 그렇지 않으면 dma를 잠급니다. 그렇다면 dma가 활성화 될 때와 인터럽트 컨텍스트를 종료 할 때 (모든 인터럽트가 같은 우선 순위이므로 인터럽트가 현재 인터럽트 동안 효과적으로 비활성화 됨)이 경쟁 조건을 방지하는 방법.

답변

2

  • 가 DMA를 설정 한 후, UARTx->SRRXNE 비트를 취소하십시오.

또는

  • 저장 CR1는 0-CR1를 설정 (또는 RE 비트를 지우), SRDR을 읽고, DMA를 설정하고 CR1을 복원 할 수 있습니다.
+0

그래, 내 질문은 오히려 왜 DMA가 자동으로 그 바이트를 읽지 않을지라도 내가 끝내는 것이다. @ 베렌디 – ryeager