цифровая электроника
вычислительная техника
встраиваемые системы

 



Как использовать UART DMA в микроконтроллерах STM32F103

Автор: Mike(admin) от 7-05-2021, 05:55

Для связи по интерфейсу UART вы можете использовать блокирующий режим или неблокирующий режим с использованием прерывания. В блокирующем режиме все другие операции блокируются до завершения связи по UART, тогда как другие операции могут выполняться независимо от UART в неблокирующем режиме и выполняться критичные по времени операции. UART DMA – это неблокирующая операция, она сокращает количество прерываний и улучшает реальное время связи.


Как использовать UART DMA в микроконтроллерах STM32F103

В данном материале будет рассказано, как использовать UART DMA в микроконтроллерах STM32F103.


В качестве порта для UART DMA мы будем использовать UART4. Итак, сначала выберите «Pinout & Configuration» в STM32CubeIDE, затем настройте все, как показано далее.


Выберите Configuration - DMA Setting и нажмите на кнопку Add, чтобы выбрать UART_TX. Выберите «Normal» в «Mode». В «нормальном» режиме передача/прием через DMA происходит только один раз. В случае, если вам нужно выполнять передачу/прием через DMA многократно без вмешательства пользователя, вам следует выбрать «Circular».


Как использовать UART DMA в микроконтроллерах STM32F103

Затем проверьте, включено ли «UART4 global interrupt» в «NVIC Settings». В «нормальном» режиме, если «UART4 global interrupt» не включено, операция DMA не будет запущена при следующем вызове функции, потому что состояние UART не изменится на HAL_UART_STATE_READY.


Как использовать UART DMA в микроконтроллерах STM32F103

После вышеуказанной конфигурации выполните «Generate Code», а затем вы можете проверить, что «MX_DMA_Init()» добавлено в main.c.


Как использовать UART DMA в микроконтроллерах STM32F103

Затем добавьте коды для вызова HAL_UART_Transmit_DMA каждую секунду в блоке while(). В нашем коде UART1 будет передавать данные без DMA, а UART4 будет делать это с использованием DMA. Вызов HAL_UART_Transmit_DMA() – это все, что вам нужно.



while (1)
  {
    /* ПОЛЬЗОВАТЕЛЬСКИЙ КОД */

    /* ПОЛЬЗОВАТЕЛЬСКИЙ КОД 3 */
	  if(onesecondElapsed)
	  {
		  onesecondElapsed = 0;
		  count++;

		  memset(msg, 0, 200);
		  sprintf((char *)msg, "UART1,[%d],%srn", count, message);
		  HAL_UART_Transmit(&huart1, msg, strlen((const char*)msg), 20);

		  memset(dma_buf, 0, 200);
		  sprintf((char *)dma_buf, "UART4 DMA,[%d],%srn", count, message);
		  HAL_UART_Transmit_DMA(&huart4, dma_buf, strlen((const char*)dma_buf));

	  }
	  loopback_tcps(0, ethBuf0, 5000);
  }

Скомпилируйте и загрузите двоичный файл, используя STM32CubeProgrammer, как обычно. Затем запустите Putty, чтобы отслеживать, что отправляет STM32F103.




© digitrode.ru


Теги: STM32, UART, DMA




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий