Jump to content

    
Sign in to follow this  
Still Enemy

stm32 spi+dma

Recommended Posts

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

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

Share this post


Link to post
Share on other sites
это как то связано с дебагером

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
А камушек какой? Не из F3, случайно?

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

Edited by Still Enemy

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
или есть варианты, которые могут решить данную проблему?

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

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

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

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

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

 

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

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

Share this post


Link to post
Share on other sites
У вас ведь есть какой то опыт с этой проблемой или есть варианты, которые могут решить данную проблему?

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this