Easyelectronics.ru

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

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

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


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

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 117
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
Сообщения: 633
Цитата:
нельзя выполнять 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
Сообщения: 117
Смотреть в отладчик хорошо , но лучше смотреть в 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
Сообщения: 633
Не могу понять почему нужно удалять де последнее строчки 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
Сообщения: 2478
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
Сообщения: 633
Все равно вылазиет ошибка, при передачи данных.
Код:
  if(DMA2->LISR & DMA_LISR_FEIF1) //+
  {
  DMA2->LIFCR = DMA_LIFCR_CFEIF1;
  }


Show

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


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

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


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

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


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

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

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


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

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


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

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


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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