Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

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

AVR-программатор USB ASP
AVR-программатор USB ASP
USB-реле (2 канала) USB осциллограф DSO-2090
вверх