Easyelectronics.ru

Электроника для всех
Текущее время: 18 июл 2018, 00:18

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 02 июл 2018, 23:53 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1942
Уважаемый, вы уж тогда хоть до конца правильно советуйте. А то во-первых, скобки неправильно ставите вот тут: !(SPI4->SR) & SPI_FLAG_TXE , во-вторых, не SPI_FLAG_TXE, а SPI_SR_TXE, и в-третьих, ну уж не TXE жеж.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 03 июл 2018, 00:58 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 85
BusMaster писал(а):
Уважаемый, вы уж тогда хоть до конца правильно советуйте. А то во-первых, скобки неправильно ставите вот тут: !(SPI4->SR) & SPI_FLAG_TXE , во-вторых, не SPI_FLAG_TXE, а SPI_SR_TXE, и в-третьих, ну уж не TXE жеж.

Вы не правильно меня поняли я говорю: 1. while выкинуть , какие там флаги мне все равно , ( строки взяты у TC. Я показал, что надо выкинуть ). 2. перед настройками DMA его надо отключать. 3. убрать в конце старт SPI (или в начале добавить отключение SPI , но тогда надо ожидать конца передачи). 4 . Прерывание вызывать по концу приема DMA .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 03 июл 2018, 05:39 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 557
Цитата:
нельзя выполнять DMA2_Stream1->NDTR = sizeof(TDC7200); // счетчик сколько передать данных
DMA2_Stream1->PAR = (uint32_t)(&(SPI4->DR));
DMA2_Stream1->M0AR = (unsigned int)&TDC7200;


А как тогда нужно написать ? Смотрел в отладчике все данные в регистрах записаны верно.

Цитата:
Отключение DMA происходит не мгновенно там надо ставить задержку
Не много ни понял про какую задержку идет речь ?

Цитата:
Этот бит работает диаметрально противоположно. Direct mode Disabled, если =1, то запрещен, если =0, то direct mode разрешен.


Записал в регистр
Код:
DMA2_Stream1->FCR |= DMA_SxFCR_DMDIS;
Не помогло.

Все равно появляется ошибка DMA_LISR_FEIF1.


Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 03 июл 2018, 11:12 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 85
Смотреть в отладчик хорошо , но лучше смотреть в RM.
Задержка __Nop или барьер надо ставить на выполнение или как HAL делать чтение и while ,что тут непонятно.
Исправить везде DMAX->LIFCR |= на DMAX->LIFCR = !!!!!!

порядок выполнения должент быть такой
DMA2_Stream3->CR &= ~DMA_SxCR_EN; (или DMA2_Stream3->CR = 0x00000000;) __NOP();__NOP();__NOP();__NOP(); (это и есть задержка ) затем DMA2_Stream3->NDTR = sizeof(all_data); // счетчик сколько передать данных
DMA2_Stream3->PAR = (uint32_t)(&(SPI4->DR));
DMA2_Stream3->M0AR = (unsigned long)&all_data; в конце удаляем 2 строки SPI4->CR2 |= SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN;
SPI4->CR1 |= SPI_CR1_SPE;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 03 июл 2018, 11:59 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 557
Не могу понять почему нужно удалять де последнее строчки SPI4->CR2 |= SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN;
SPI4->CR1 |= SPI_CR1_SPE;?
Кто тогда будет запускать SPI ? DMA ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 03 июл 2018, 12:39 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1942
zhilenkov, любезнейший, вы 0 от 1 отличаете? Я же вам написал, что 0 - отключает FIFO и разрешает Direct Mode. А вы снова отключаете Direct mode, включая FIFO. Бит назвывается Direct mode DISABLED. Если 1, то Direct mode есть DISABLED.
И да, устанавливать кол-во передаваемых данных и адреса источника/назначения можно только при выключенном потоке DMA.
Вообще же, ваш код не шибко то отличается от HAL-а. То, что у вас получилось, зовется "китайским кодом", отличительная черта которого - последовательное перечисление всех действий по одному. Каждый бит, каждый элемент массива описывается отдельной строчкой.

Строчка SPI4->CR2 |= SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN; разрешает генерацию запросов DMA от SPI4. Конкретное начало работы всей этой простыни зависит от нескольких факторов - включенного SPI, включенных запросов от SPI к DMA, настроенного потока DMA с установленным числом транзакций, и включенного потока DMA.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 05 июл 2018, 13:01 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 557
Все равно вылазиет ошибка, при передачи данных.
Код:
  if(DMA2->LISR & DMA_LISR_FEIF1) //+
  {
  DMA2->LIFCR = DMA_LIFCR_CFEIF1;
  }


Show

Больше не каких проблем с приемом и передачей данных не заметили. Из документации не понял для чего ваще нужен буфер FIFO?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 05 июл 2018, 13:20 
Старожил

Зарегистрирован: 16 ноя 2012, 07:47
Сообщения: 2651
Почитайте раздел "10.3.18 Error management". FIFO нужен, чтобы можно было, например, однобайтовые данные собирать в транзакцию по 4 байта и наоборот.
Картинка более чем понятна:
Вложение:
2018-07-05_152348.jpg
2018-07-05_152348.jpg [ 82.95 Кб | Просмотров: 201 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 05 июл 2018, 19:34 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 557
Для чего нужны биты MBURST и PBURST ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 05 июл 2018, 19:49 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1942
Аа, я понял, про что так переживает топикстартер. При Direct mode на FIFO error него можно не обращать внимания. В direct mode значение имеет другой флаг - Direct mode error.
Вот демо-пример, всё работает превосходно.
Show

Вложение:
DS1Z_QuickPrint5.jpg
DS1Z_QuickPrint5.jpg [ 144.66 Кб | Просмотров: 180 ]


zhilenkov писал(а):
Для чего нужны биты MBURST и PBURST ?

Ну почему приверженци HAL-а никогда не смотрят мануалы??? Хиз из факин шит!
Эти биты работают в паре с DMA FIFO и определяют порядок передачи между периферией и памятью, когда размеры единицы передачи не равны. Вышеприведенная табличка показывает это.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Stm32f429 SPI
СообщениеДобавлено: 05 июл 2018, 20:14 
Старожил

Зарегистрирован: 23 авг 2014, 11:01
Сообщения: 557
Почему не смотрю? Смотрю, не надо ругаться :). Просто из-за этой ошибки уже всю перечитал но не где не смог найти ответ. Думал завтра написать в сапорт st.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: MasterElectric


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB