Перейти к содержанию
    

stm32 spi+dma

Очень странную дичь я исследую сегодня. Возможно опять моя криворукость даёт о себе знать.

Поднят spi(он рабочий) и dma. И при пересылке данных через dma в spi, а в частности пересылке 256 байт данных, выходит такая картина: 195 байт проходят нормально, остаток какая то ересь. У меня IAR и в процессе всяческих манипуляций я понял, что это как то связано с дебагером, потому как, если остановиться на функции пересылки и нажать "Go"(f5), то собственно 195 байт нормально, остальные ересь, а, если же остановиться на функции и нажать "Step Over" (f10), то (о Боги) всё работает адекватно. Дебагер j-link-arm, интерфейс SWD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это как то связано с дебагером

Отладчик может читать регистры. Флаги могут сбрасываться от чтения. Сброс флагов может влиять на работу периферийных блоков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я даже представления не имею какие флаги могут сброситься, что может произойти в момент передачи, что данные пойдут в регистр совсем левые. Какие флаги DMA влияют на передаваемый из памяти данные в периферию? я не понимаю.

Если вопрос не будет решен, я забью *** и буду делать по 128 байт. Надежнее. Сыт уже второй день хлебать эту дичь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сыт уже второй день хлебать эту дичь.

А камушек какой? Не из F3, случайно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А камушек какой? Не из F3, случайно?

так нет же, у меня f105. У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

Изменено пользователем Still Enemy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно проблема в том, что почему-то SPI нужна какая-то предварительная задержка перед отправкой, что собственно отладчик и делает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

или есть варианты, которые могут решить данную проблему?

Нужно все грамотно инициализировать:

1. Сбросить SPI_CR2_TXDMAEN;

2. Сбросить флаги соответствующего канала DMA и запретить этот канал;

3. Настроить канал DMA и разрешить этот канал;

4. Установить SPI_CR2_TXDMAEN.

 

После этого с небольшой задержкой (тактов 12) DMA начнет записывать значения в SPI.

У меня на F100 и F407 выводятся до 1024 байт без каких-либо проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

Я делаю вот так. Работает как часы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После этого с небольшой задержкой (тактов 12) DMA начнет записывать значения в SPI.

У меня на F100 и F407 выводятся до 1024 байт без каких-либо проблем.

Пасибо большое, вот этот совет частично помог. Поставил задержку(2 мс) после запуска dma и убрал флаг Half transfer complete и всё заработало. Мне всё равно не пригодится этот флаг, я же не по Мбайту передаю, а по 256 байт всего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...