Создание виртуального uart на микроконтроллере stm32

Мне нужно создать виртуальный порт uart на микроконтроллере stm32. Пины даны и могут быть изменены на входные каналы таймера. Принимаемый сигнал будет модулироваться по току и напряжению, и мне нужно обнаружить и то, и другое. Эти два контакта нельзя назначить uart. Есть ли у кого-нибудь учебник или что-то в этом роде, которое может привести меня в правильном направлении? Я только начал программировать микроконтроллеры и все еще борюсь со всеми таймерами, прерываниями и деталями.


person Aeonos    schedule 29.03.2017    source источник
comment
Если вы только начали программировать микроконтроллеры, создание виртуального битового UART - не лучший проект, так как это довольно сложная задача. Начните с написания кода, который вместо этого использует доступное оборудование UART. Кроме того, вы уверены, что это на самом деле не аппаратная задача? Например, как преобразовать модулированный током сигнал в уровни TTL с модуляцией напряжения?   -  person Lundin    schedule 29.03.2017
comment
При этом этот вопрос слишком широк для SO. Также обратите внимание, что вопросы о том, где найти учебные пособия или другие внешние ресурсы, здесь не по теме.   -  person Lundin    schedule 29.03.2017
comment
Вообще не понимаю, как будут модулироваться напряжение и ток. Каким должен быть входной сигнал UART?   -  person tilz0R    schedule 29.03.2017
comment
Ваш вопрос непонятен. Пожалуйста, подробно опишите этот модулированный сигнал и какой у вас контроллер STM32 (полный номер детали).   -  person Bence Kaulics    schedule 29.03.2017


Ответы (1)


Если мы говорим о скорости передачи для малых (9600), то вы можете добиться этого с помощью таймера и EXTI. На EXTI установите контакт на передний и задний фронт и между каждым IRQ проверьте значение таймера.

Если значение больше, чем время условия запуска и остановки, вы потерпели неудачу, иначе вам нужно проверить время, потраченное на EXTi, и вычислить, получили ли вы 10101010 или 11001100 или любую другую комбинацию.

Для режима TX используйте таймер для точных прерываний в битовом срезе для выходных данных UART и создайте конечный автомат для побитового вывода данных.

Другой вариант - использовать SPI как виртуальный UART.

person tilz0R    schedule 29.03.2017
comment
Существует также примечание по применению AN4457 от ST для эмулируемого UART, в котором используется рассмотренный подход. - person veeman; 05.04.2017
comment
Верный. Вот почему я упомянул об этом. - person tilz0R; 05.04.2017