Например TDA7294

Форум РадиоКот :: Просмотр темы - STM32H743 DMA
Форум РадиоКот
http://radiokot.ru/forum/

STM32H743 DMA
http://radiokot.ru/forum/viewtopic.php?f=59&t=166933
Страница 1 из 1

Автор:  P0nyL0v3r [ Вт ноя 19, 2019 08:33:21 ]
Заголовок сообщения:  STM32H743 DMA

Доброго времени суток!

Понадобилось передать массив по SPI с использованием DMA. .data .bss ._user_heap_stack расположил в RAM_D1.
Среда разработки TrueSTUDIO в связке с CubeMX, использую стандартную команду HAL_SPI_Transmit_DMA.

При передаче глобального массива все ок, работает без проблем, но при попытке передачи массива, объявленного внутри функции, SPI не передает ничего.

Пробовал включать I,D cache, запрещал кеширование всего RAM_D1, менял расположение на RAM_D2, использовал DMA1,2 с разными потоками(все это в разных комбинациях). Ничего не помогает.
В HAL'овской структуре SPI код ошибки 16(Значит ошибка связана с DMA), в структуре DMA код ошибки 1.
Ниже прилагаю System architecture контроллера и(на всякий случай) данные структуры, после вызова функции HAL_SPI_Transmit_DMA

Изображение Изображение
Буду благодарен за любую идею.

Автор:  jcxz [ Вт ноя 19, 2019 13:23:56 ]
Заголовок сообщения:  Re: STM32H743 DMA

При передаче глобального массива все ок, работает без проблем, но при попытке передачи массива, объявленного внутри функции, SPI не передает ничего.
Объявленного где? Уж не на стеке-ли с последующим выходом из функции до завершения DMA-транзакции? :))) :)))

Добавлено after 1 minute 36 seconds:
Буду благодарен за любую идею.
Лучше бы показали как объявляете массив, стартуете/завершаете DMA-транзакцию. А если массив на стеке, то ещё - где (в каком регионе ОЗУ) находится стек?

Автор:  P0nyL0v3r [ Вт ноя 19, 2019 14:17:28 ]
Заголовок сообщения:  Re: STM32H743 DMA

Объявленного где? Уж не на стеке-ли с последующим выходом из функции до завершения DMA-транзакции? :))) :)))
Лучше бы показали как объявляете массив, стартуете/завершаете DMA-транзакцию. А если массив на стеке, то ещё - где (в каком регионе ОЗУ) находится стек?

Спасибо, что заставили перепроверить, а то я уже хотел забросить это дело. Думал,что в build analyzer(нижеприведенный скриншот) достоверные данные.
Посмотрел через printf адрес переменной, а она почему то в DTCMRAM.

Изображение

Суть в том что в .ld файле есть нижеприведенный параметр(о котором я даже не подозревал). Вот я его и не заметил, поправив только циферки в build analyzer.
Код:
_estack = 0x20020000;    //было(конец DTCMRAM)
_estack = 0x24080000;    //стало(конец RAM_D1)


Теперь работает.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/