народ. есть хорошие примеры как в режиме прерываний делать прием байт без задания длины пакета. т.е. когда устройство слейв и не знает зарание что за команда к нему залетит. интересует аспект как лучше перезапускать прием очередного байта. сейчас нужно про spi узнать, но кажется там все одинаково устроено, так что usart и подобное подойдет рисуется что то вроде такого. чтобы успеть перезапустить прием "пока не поздно" вопрос про то можно ли пихать HAL_SPI_Receive_IT() и подобные команды в прерывания
Комментарии: 9
Indr1x
Используй флаг RXNE, Люк
Dmytro
Ну вообще обычно берут буфер с запасом, чтобы любая команда в него целиком влезла
Aleksandr
) ты про буфер в регистрах приемника? в железе то есть? а кто пользовался HAL_TIM_OnePulse_Start() - это запуск обычного таймера для одного прохода? Starts the TIM One Pulse signal generation. что считать - One Pulse signal generation..
Dmytro
За stm сейчас не скажу как точно, но обычно при настройке приёма в DMA, указывается буфер и его размер - то куда складывать входящие данные
Aleksandr
ясно. я пока на уровне прерываний делаю. dma потом.
Dmytro
Ну в общем рекомендую, полезная вещь. С ним обычно проще работать чем с голым spi
Aleksandr
обязательно. я давно замахиваюсь. в любом случае нужно четко понимать логику работы в парадигме прерываний. дма не дма, а это, имхо, база. на ней (в рамках неё) будет строится общение с дма. но это не точно.
Dmytro
Ну окей, тогда вы тоже самое можете сделать программно. Зарезервировать буффер и в него складывать байты один за другим, пока не будет поднят CE (ну или как вы хотите конец посылки различать)
Aleksandr
это понятно. я так монял дма дает произвольный запас. можно расширить железный буфер до большого. по скорости, ресурсам это как бы буфер из "железных" регистров мк, НО такой который можно пристегнуть куда угодно и расширить до огромных (по сравнению с стандартными регистрами) пределов.