Главная » Статьи » Микроконтроллер STM32 в качестве преобразователя USB-2xRS232

Микроконтроллер STM32 в качестве преобразователя USB-2xRS232

Микроконтроллер STM32 в качестве преобразователя USB-2xRS232

Данное решение обеспечивает 2 виртуальных последовательных порта, которые могут использоваться независимо одновременно. Проект не поддерживает RTS, линии DTR и т. Д., Но их можно легко добавить (за исключением линии CTS, которая не поддерживается классом USB CDC). Электрическая схема предлагаемого решения приведена на рис. 1.

Рис. 1. Электрическая схема преобразователя

В проекте может использоваться один или два виртуальных последовательных порта, в зависимости от определений, содержащихся в заголовке converter.h. Наиболее важный элемент этого файла для конфигурации показан на примере 1.

Пример 1. Параметры конфигурации проекта

#define USE_VCOM1 1
#define USE_VCOM2 1
#if (USE_VCOM1)
#define VCOM1_USART_NUM 1
#endif
#if (USE_VCOM2)
#define VCOM2_USART_NUM 2
#endif

Если для определения USE_VCOMx задано значение 1, выбранный виртуальный COM будет виден на компьютере. Определение VCOMx_USART_NUM указывает, к какому физическому последовательному порту процессора подключаться. Чтобы иметь возможность одновременно передавать данные в два USART, они были подключены к USB с использованием кольцевых буферов, и вся передача происходит с прерываниями, как показано на рис. 3.

Рис. 3. Модель передачи данных через конвертер

Два виртуальных устройства vcom1 и vcom2 видны со стороны USB и библиотеки vCOM. Когда мы получаем данные через выбранный vcom с компьютера, мы перезаписываем их в кольцевой буфер отправки (назначенный данному порту USART) и разрешаем прерывание при отправке данных через USART. В этом прерывании мы проверяем, есть ли данные в буфере отправки — если это так, то мы читаем и отправляем их — если нет, то мы блокируем прерывание.

Аналогично в случае получения данных USART — если генерируется прерывание приема, мы вводим полученные данные в буфер приема. Когда данный vcom может отправлять дополнительные данные на хост, вызывается соответствующая функция, связанная с данным объектом vcom. Он проверяет, есть ли у нас данные в приемном буфере порта USART, с которым работает данный vcom. Если есть какие-либо данные, то мы читаем столько, сколько можно отправить в одном пакете на хост, и отправляем его.

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

Ваш email нигде не будет показанОбязательные для заполнения поля помечены *

*