Передача полного обратного вызова, не получая вызова в UART DMA - PullRequest
0 голосов
/ 26 апреля 2019

То, что я пытаюсь сделать, довольно просто.Передайте через DMA и подождите, пока он не будет передан.А затем получить и подождать, пока он не будет получен.

Когда я закомментирую принимающую часть (включая обратный вызов), она переходит в функцию обратного вызова для завершения передачи.Но когда я откомментирую полученную часть, она не переходит в обратный вызов tx cplt, а напрямую переходит в обратный вызов receive cplt.И когда я проверяю приемный буфер, я не получаю то, что ожидал (очевидно).Что могло пойти не так?

Я использую Atollic True Studio V 9.0, плату CubeMx v5.1.0, STM32F407VG-DISC1 и включил DMA для UART2.

Я попытался отправить буфер символовчерез UART DMA и получить его.Кажется, он вообще не передает, так как не входит в обратный вызов txCplt.И это прямо в Rxcplt перезвонит.

uint8_t tx_arr[10], rx_arr[10];
__IO ITStatus UartReady = RESET;

int main(void)
{
  int i = 0;
  for(i = 0; i<10; i++)
      rx_arr[i] = 0;

  for(i = 0; i<10; i++)
tx_arr[i] = i*2;

 HAL_Init();
 SystemClock_Config();
 MX_GPIO_Init();
 MX_DMA_Init();
 MX_USART6_UART_Init();
 MX_USART2_UART_Init();

  while (1)
  {

  if( HAL_UART_Transmit_DMA(&huart2, (uint8_t*)tx_arr, 10)!= HAL_OK )
  {
      Error_Handler();
  }
      while(UartReady != SET)
      {

  }
  UartReady  = RESET;
      if( HAL_UART_Receive_DMA(&huart2, (uint8_t*)rx_arr, 10)!= HAL_OK )
 {
    Error_Handler();
 }
     while(UartReady != SET)
 {

 }
 UartReady  = RESET;


}

}

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
    UartReady = SET;
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    UartReady = SET;
}

Я ожидаю, что rx_arr будет заполнен на 0,2,4,6, ... 18, но он заполняется мусором

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...