STM32: Свое тактирование SPI

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Родился
Сообщения: 7
Зарегистрирован: Пн сен 24, 2012 18:58:49

Сообщение xmailer »

Подскажите пож-та, пытаюсь тактировать SPI по своему алгоритму:
1. настроил на таймере Output Compare на 1 секунду и режимом Toggle on match, на выходе получаю секундный меандр
2. соединил выход таймера с пином тактирования SPI, по идее теперь SPI должен сдвигать свой регистр с частотой в 1 секунду
3. пытаюсь передать 1 бит 01010100 в SPI и жду на выходе мигание светодиодом 3 раза с задержкой 1 секунда
----- проблема -------
1. диод мигает не с секундной задержкой, о несколько дольше.
2. передача повторяется циклично, т.е. передачей одного байта дело не заканчивается, он снова и снова передается, хотя HAL_SPI_Transmit я делаю сразу после инициализации, т.е. не в цикле.

Спасибо.
Вложения
spi.png
(187.89 КБ) 400 скачиваний
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

В Кащенко день открытых дверей?
Реклама
Родился
Сообщения: 7
Зарегистрирован: Пн сен 24, 2012 18:58:49

Сообщение xmailer »

dosikus писал(а):В Кащенко день открытых дверей?
Ну зачем Вы так, все не так плохо.
Данная реализация нужна только для визуальной проверки. Нет в наличие осциллографа.
По сути SPI - это сдвиговый регистр, размер я указал 8bit, помещаем туда эти самые 8bit, и на каждом такте выщелкивается на пин очередной бит.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Ну тогда так, - вы уверены, что подавая на выход тактовой SPI затактируете модуль SPI? Не торопитесь с ответом...
Реклама
Эиком - электронные компоненты и радиодетали
Родился
Сообщения: 7
Зарегистрирован: Пн сен 24, 2012 18:58:49

Сообщение xmailer »

dosikus писал(а):Ну тогда так, - вы уверены, что подавая на выход тактовой SPI затактируете модуль SPI? Не торопитесь с ответом...
почему на ВЫХОД, SPI засетапен как slave. Соответственно SCK это вход, тактируется от мастера. SPI мастера - нет, есть только тактирование.
Поэтому такты от таймера можно трактовать как такты от мастера.
dosikus писал(а):2. соединил выход таймера с пином тактирования SPI, по идее теперь SPI должен сдвигать свой регистр с частотой в 1 секунду
не уверен, поэтому и спрашиваю совета, в чем накосячил
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Ну то что модуль slave , надо было сразу писать а не в иероглифах калокуба ставить. :)))
А то такое надумалось.
Если подождете до завтра, испытаю . Но не уверен что на такой низкой частоте будет работать.
Естественно все будет без калокуба.
И сразу вопрос- на хрена такие извращения?
Реклама
Родился
Сообщения: 7
Зарегистрирован: Пн сен 24, 2012 18:58:49

Сообщение xmailer »

dosikus писал(а):Если подождете до завтра, испытаю . Но не уверен что на такой низкой частоте будет работать.
Естественно все будет без калокуба.
И сразу вопрос- на хрена такие извращения?
Буду признателен за результат испытаний.
Вся тема завертелась из-за генерации видео сигнала, там в качестве тактирующего таймера был gate таймер выдающий на выход тактовый pwm на вход spi, все гналось через dma, фактически spi биты были видео пикселами, навскидку ничего не заработало. Поэтому разбил задачу на несколько простых и вот - пытаюсь разобраться с SPI и DMA.
Основная трудность на данном этапе - HAL, на Periph-е все как-то проще, сконфигурировал spi, dma, сказал откуда и куда, сделал enable для одного и второго и все, остальное делает проц (мне нужно гнать циклично данные из массива в периферию).
На hal не прослеживается такого четкого регламента, насколько я понял, в кубе конфигурируешь spi,dma и с помощью hal_spi_transmit_dma запускаешь настроенную в кубе цепочку (spi+dma). Т.е. на перифе
DMA_Cmd(DMA_StreamX,ENABLE); SPI_Cmd(SPIX, ENABLE); на hal - hal_spi_transmit_dma
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Ответить

Вернуться в «ARM»