Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

STM32Fxxx вывод последовательности битов

Пт авг 05, 2022 15:04:24

Доброго все времени суток. Есть очень не стандарный вопрос: можно ли каким-либо способом преобразовать любой стандартный интерфейс (UART, SPI, CAN) в поток битов, например в кодировки NRZ средствами самого мк ?

Re: STM32Fxxx вывод последовательности битов

Пт авг 05, 2022 17:42:34

С такой задачей справится и GPIO. Или по какой-то причине хочется именно периферию применить?

Re: STM32Fxxx вывод последовательности битов

Пт авг 05, 2022 18:06:27

Применение GPIO (даже через DMA) - это уж совсем крайность.

Re: STM32Fxxx вывод последовательности битов

Пт авг 05, 2022 21:20:10

SPI (I2S) - чисто data, никакого "обрамления", кодирование, как раз - nrz
или я не понял вопроса
можно еще таймером через dma.

Re: STM32Fxxx вывод последовательности битов

Сб авг 06, 2022 07:58:33

a797945, вы правильно поняли вопрос. Да, я понимаю, что можно через gpio с таймером по dma. Но проблема в том, что кодировка может быть любой: NRZ, NRZI, манчестерский кол итд. Сейчас есть проект, в котором прием NRZI, а вот выход может быть другим.

Добавлено after 10 minutes 49 seconds:
a797945, да еще забыл добавить: просто поток байтов как в мк то и из него без какого либо тактирования со стороны.

Re: STM32Fxxx вывод последовательности битов

Сб авг 06, 2022 08:55:32

не имел ввиду gpio.
самим таймером, способ разжеван в мигалках на ws2812
примерно в таком духе (выводил 32-б слова с определенным таймингом):

Re: STM32Fxxx вывод последовательности битов

Пн авг 08, 2022 07:23:14

Забавно. А я для вывода битов в WS2812 использовал SPI с кольцевым буфером (фактически, буфером на два светодиода) и его заполнением через DMA по переходу через середину и конец буфера. Конкретно для диодов - отличное решение. Для более широких временнЫх интервалов, лучше всё же таймер.

Re: STM32Fxxx вывод последовательности битов

Пн авг 08, 2022 08:30:54

Я для адресных светодиодов таймер с DMA использовал.

Re: STM32Fxxx вывод последовательности битов

Пн авг 08, 2022 18:58:59

в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера.
а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил.
формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.

пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу. :)

без какого либо тактирования со стороны.

не вижу в чем затык, не нужен clock - просто не отдаете его, даже не формируете.

Re: STM32Fxxx вывод последовательности битов

Ср авг 10, 2022 15:38:32

Поток произвольных битов легко сделать на LPC43xx. Там и периферия соответствующая имеется - SGPIO. Хоть на ввод хоть на вывод. Хоть с DMA хоть без. С макс. частотой <=102МГц (если не путаю).
Вроде в некоторых других линейках LPC SGPIO тоже есть.

SGPIO - это не костыли на GPIO+DMA. Совсем другой уровень.

Re: STM32Fxxx вывод последовательности битов

Пт авг 12, 2022 15:51:16

в той приспособе (на blue pill) у меня получился I2S на любые (условно) скорость и размер слова. data и clock с двух каналов одного таймера.
а поскольку данные готовятся "в ручную", то и кодировку можно прикрутить разную, какую-то элементарно, какую-то чуть геморойней. поэтому и предложил.
формировать данные в буфере, а dma через таймер сам будет выталкивать на нужной скорости.

пишу "получился" потому, что цель была не s2i - это мои замуты с Arinc, по второму кругу. :)

без какого либо тактирования со стороны.

не вижу в чем затык, не нужен clock - просто не отдаете его, даже не формируете.


Да, вы правы, насчет вывода, а как быть со входом. Ни SPI, ни I2C без тактирования из вне ничего не будет принимать.

Re: STM32Fxxx вывод последовательности битов

Пт авг 12, 2022 16:59:29

Вам же дали грамотный совет- применяйте "шапку по Сеньке".

Re: STM32Fxxx вывод последовательности битов

Ср авг 17, 2022 17:18:13

Уважаемые, может быть подскажите возможное решение вопроса: есть сформированный массив из n элементов (каждый 1 байт). Его нужно преобразовать в NRZI кодировку. Каким алгоритмом это можно сделать ?

Re: STM32Fxxx вывод последовательности битов

Ср авг 17, 2022 21:20:49

Представьте, как выглядит NRZI:
- если подряд идет два нулевых бита, состояние выхода не переключается.
- если соседние биты меняются из 1 в 0, состояние выхода не переключается.
- если соседние биты меняются из 0 в 1, состояние выхода переключится между битами на противоположное.
- если подряд идут два единичных бита, состояние выхода переключится между этими битами на противоположное.
(существует вариант, когда выход инвертируется при двух нулевых битах, а при двух единичных не изменяется)

Таким образом, есть 4 входных комбинации и 2 выходных состояния. Это надо и записать. Проверка состояние бита в языке Си делается через логическую операцию AND по маске, содержащей 1 в проверяемом разряде. Здесь нужно проверять два соседних бита. Можно сделать несколькими способами. Например вот так:
Код:
   for(int bit = 0; bit < 7; bit++)
   {
      if(((byte >> bit) & 0x03) < 0x2)
         change[bit] = FALSE;
      else
         change[bit] = TRUE;
   }

, где массив change[] содержит признак, требующий смены состояния на выходе (THUE) после передачи бита или оставляющий состояние выхода без изменения (FALSE).

PS. Кодирование NRZ и NRZI значительно отличается по виду. В NRZ смена состояния выхода на противоположное происходит при изменении двух соседних битов и по форме оно повторяет битовые измениния. А в NRZI алгоритм сложнее. Вам какое всё-таки нужно? Вначале вы писали про NRZ а сейчас NRZI хотите.

Re: STM32Fxxx вывод последовательности битов

Чт авг 18, 2022 10:18:41

MLX90640, спасибо. Сейчас принято решение про NRZI. Я понимаю как устроена кодировка NRZI. Вопрос в следующем: есть последовательность байтов, она может быть любой длины (ну в разумных пределах, естественно). Проблема в том, что в ручную, когда последовательность маленькая можно и в ручную построить последовательность. А вот когда она неизвестного размера.... Я понимаю, что NRZ и NRZI принципиально отличаются. Меня интересует NRZI. Просто про NRZ я написал для примера, там могла быть абсолютно любая кодировка.

Re: STM32Fxxx вывод последовательности битов

Чт авг 18, 2022 16:22:49

А вот когда она неизвестного размера....
А в чём проблема держать во временной переменной последний бит и при переходе на следующий байт просто учитывать его?

ЗЫ: Про приколу накидал алгоритм с табличной перекодировкой. Compiler Explorer.

Re: STM32Fxxx вывод последовательности битов

Чт авг 18, 2022 18:46:36

VladislavS, спасибо.
Ответить