вівторок, 20 жовтня 2020 р.

STM32CubeIDE: Встановлення Serial Terminal

Передмова

 Коли перейшов з засобу розробки Atolic TrueStudio на STM32CubeIDE, зіткнувся з тим, що з "коробки" Serial Terminal - не встановлено. І відправляти відладочну інформацію по UART нікуди, крім як на сторонню термінальну програму. Що не зовсім зручно. А так як, що Atolic TrueStudio, що STM32CubeIDE це - Eclipse IDE з певними налаштуваннями і плагінами (надбудовами), то можемо потрібний нам Serial Terminal встановити самотужки із репозиторію.

Встановлення Terminal

Йдемо по меню “Help->Install New Software”:

Install New Software
Install New Software

Потрібно обрати репозиторій, або Eclipse Repository або TM Terminal Marketplace Update Site. І вводимо в поле пошуку "terminal" або "serial" (без лапок). Або робимо як на зображені, обираємо всі сайти, вводимо для пошуку "tm terminal" і обираємо свіжу версію "TM Terminal":

Обрати останню версію TM Terminal

Можливо в додачу до цього, потрібно ще, додати плагін "RXTX", або "Serial Connector":

Встановлення плагіну RXTX End-User Runtime
Serial Terminal - встановлено!

Як користуватись

Тепер розберемось як користуватись Serial Monitor. Покажемо вікно для терміналу "Window -> Show View -> Terminal:

Виклик вікна для терміналу

Тепер викличемо сам термінал, або через "іконку", або за допомоги "гарячих" кнопок "Ctrl + Alt + Shift + T":

Виклик терміналу Ctrl + Alt + Shift + T

Та оберемо/погодимось з налаштуваннями. Обираєм COM порт до якого під'єднано UART мікроконтролера. Наприклад, через пристрій UART 2 USB Converter і в системі на ПК він визначений як COM4, тоді налаштування будуть виглядати так:

Налаштування Serial Monitor
Тиснемо "ОК" і термінал готовий до прийому байтів з вашого МК. Натиснувши "іконку" командний рядок, можна і надсилати байти в ваш МК:

Обмін байтами між ПК і МК

Як надсилати інформацію відладки

Потрібно задіяти UART мікроконтролера, наприклад увімкнути і налаштувати USART2 на мікроконтролері і тоді код який треба додати до вашого проекту буде виглядати так. Вставте в відповідні ділянки коду (визначення який UART задіяний, прототип функції і саму функцію), як в прикладі нижче:
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define UART_PRINTF	huart2
/* USER CODE END PD */

/* USER CODE BEGIN PFP */
int _write(int file, char *ptr, int len);
/* USER CODE END PFP */

/* USER CODE BEGIN 4 */
int _write(int file, char *ptr, int len)
{
	HAL_UART_Transmit(&UART_PRINTF, (uint8_t *) ptr, len, HAL_MAX_DELAY);
	return len;
}
/* USER CODE END 4 */
Тепер можна користуватись функцією "printf" і вона буде виводити потік через UART MK в термінальну програму на ПК:
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  printf("%8lu: UART is Ok!\r\n", HAL_GetTick());
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  printf("%8lu: Current Tick\r\n", HAL_GetTick());
	  HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

2 коментарі:

  1. Дякую за корисні статті. Підскажіть, а як функцією printf виводить не стрінг, а якусь перемінну?

    ВідповістиВидалити
  2. все, зрозумів, це звичайний printf. Наприклад, вивести значення SUMMA:
    printf("%i", summa);

    ВідповістиВидалити