Главная » Микроконтроллеры
Призовой фонд
на октябрь 2021 г.
1. Рюкзак Mean Well
Компэл
2. Инвертор авто Mean Well 150 Ватт
Компэл
3. Термос MeanWell
Компэл
4. 150 руб.
От пользователей

STM32F4. Урок 31 - Использование USB-OTG как виртуальный COM-порт

Данная библиотека позволяет использовать USB OTG порт на плате Discovery в режиме CDC. Это позволяет создать виртуальный COM-порт (с логическими уровнями UART), дающий возможность совершать обмен данными между платой и ПК. На стороне компьютера устанавливается “VirtualComPort-Driver for ST”, который можно загрузить на сайте ST (автор тестировал версию 1.3.1). Поиск можно осуществить по запросу "STSW-STM32102". Библиотека ожидает идентификатор конца строки в виде символа "0x0D", означающий возврат каретки (который должен быть указан в конце). Настройка протокола (скорость, количество стоп-битов и т.д.) производится в драйвере USB. В библиотеке предусмотрены функции для отправки и приема строк и функция проверки соединения с USB. Автор тестировал написанные функции в “mini” PC-Terminal программе. Для подключения использовался microUSB кабель (который можно купить на eBay или Amazon)

Используемые выводы:

 PA8  -> USB_OTG_SOF (не используется)
 PA9  -> USB_OTG_VBUS
 PA10 -> USB_OTG_ID
 PA11 -> USB_OTG_DM
 PA12 -> USB_OTG_DP

Требуемые библиотеки:

Подключаемые модули CooCox-IDE: GPIO, MISC
Поддерживаемые библиотеки: отсутствуют

Перечисления:

typedef enum {
  USB_CDC_NO_INIT =0, // интерфейс USB не инициализирован 
  USB_CDC_DETACHED,   // USB-соединение инициализировано
  USB_CDC_CONNECTED   // USB-Соединение установлено
}USB_CDC_STATUS_t;
USB_CDC_STATUS_t USB_CDC_STATUS;

typedef enum {
  NONE = 0,  // без идентификатора
  LFCR,      // возврат строки и перевод каретки (0x0A,0x0D)
  CRLF,      // перевод каретки и возврат строки (0x0D,0x0A)
  LF,        // перевод строки (0x0A)
  CR         // возврат каретки (0x0D)
}USB_CDC_LASTBYTE_t;

typedef enum {
  RX_USB_ERR =0, // нет подключения к USB
  RX_EMPTY,      // данные не приходят
  RX_READY       // данные, принятые в буфер
}USB_CDC_RXSTATUS_t;

Функции:

void UB_USB_CDC_Init(void);                                                // инициализировать интерфейс USB
USB_CDC_STATUS_t UB_USB_CDC_GetStatus(void);                               // Проверка статуса USB
ErrorStatus UB_USB_CDC_SendString(char *ptr, USB_CDC_LASTBYTE_t end_cmd);  // Отправить строку через USB
USB_CDC_RXSTATUS_t UB_USB_CDC_ReceiveString(char *ptr);                    // Принять строку через USB

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 23.06.2013
// Version  : 1.4
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der USB-CDC-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_usb_cdc.h"

int main(void)
{
  char buf[APP_TX_BUF_SIZE]; // буфер для приема данных
  USB_CDC_RXSTATUS_t check=RX_EMPTY;

  SystemInit(); // Инициализация настроек кварца

  // Инициализация USB-OTG-порта как CDC-устройство
  // (Виртуальный COM порт)
  UB_USB_CDC_Init();

  while(1)
  {
	  // Проверка работы USB-подключения к ПК
	  if(UB_USB_CDC_GetStatus()==USB_CDC_CONNECTED) {
		  // Проверка получения данных по USB
		  check=UB_USB_CDC_ReceiveString(buf);
		  if(check==RX_READY) {
			  // При получении данных
			  // вернуться эхо
			  // (с перемещением на новую строку)
			  UB_USB_CDC_SendString(buf,LFCR);
		  }
	  }
  }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах, а так же программа-терминал для работы с COM-портом. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (2) | Я собрал (0) | Подписаться

0
Иван #
Сам пример работает, но когда захотел слать данные считанные с adc они не отображаются, то есть с ADC1, ADC2 ничего не приходит (цифра 41-42 как будто нет сигнала), а вот с ADC3 приходит нормально, без юсб значения с первых двух адс получаю, подскажите в чем может быть проблема?
Ответить
0
Иван #
Может ли этот порт в управление линиями DTR и RTS? Как их отловить и дернуть пинами мк эмулируя работу линий?
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Макетная плата для пайки (10 шт) Конструктор: DDS генератор сигналов
вверх