У вас есть 25 вещей, передающих со скоростью 9600 бит / с.У вас есть MCU, работающий на частоте 180 МГц с 8 UARTS и множеством каналов захвата таймера (32 канала, 30 из которых можно использовать на 100-контактном STM32F427VITx
).О 8 из 25 входных данных заботятся UARTS, 17 необходимо обработать другими способами.Подключите их к каналам захвата таймера.
MCU работает на частоте 180 МГц, состояние входа изменяется на 9600 Гц, что означает 18750 тактов между событиями.Должно быть более чем достаточно, чтобы обработать их все, если вы не используете HAL.
- читать регистр состояния таймера, проверять наличие событий захвата и очищать их
- проверять выводсостояние, низкий означает начало кадра
- сохранить значение регистра захвата для этого канала
- продолжать проверять события захвата
- , если таковой имеется, очистить его
- прочитать метку времени захвата, вычесть из нее сохраненное значение из шага 3
- вычислить количество битов, полученных с идентичным состоянием
- продолжать делать это, пока у вас не будет 9 бит (стартовый бит + 8биты данных) и высокий входной сигнал на выводе
Выполните вышеуказанное параллельно для всех 17 каналов.Вам нужен подходящий прескалер для таймеров, чтобы они не переполнялись при чтении полного кадра (9 * 18750 = 168750 циклов)