|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||||||||||
Stm32f407 и SPI06.05.2016, 22:25. Показов 2271. Ответов 11
Метки нет (Все метки)
начал запускать дисплейчик на ST7735
на программным SPI все работает, на железном глюки везде видел такую конструкцию( посылка с ожиданием окончания передачи)
если ставил задержку после/перед вторым циклом глюки пропадали подумал что ядро намного быстрее чем модуль и модуль просто не успевает выставить бит занятости сделал так
кто, что думает по этому поводу?
2
|
|||||||||||
| 06.05.2016, 22:25 | |
|
Ответы с готовыми решениями:
11
STM32F407 SPI NSS STM32F407+mcp3201(spi) Прием с SPI 16bit STM32F407 DISCOVERY |
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 07.05.2016, 16:52 | |
|
Хорошая тема для обсуждения. Подобные вещи встречались с другими интерфейсами (например, с CAN). Причем, везде говорилось, что это очень плохо описано в документации.
Я себе это объяснил так, что периферия работает на сниженных частотах шины, поэтому, при переключении режима его соответствующие флаги выставляются не сразу, относительно тактов ЦП (ядра). Соответственно, вы можете, к примеру, на первом такте отправить данные в уарт, но на следующем такте (если есть рассинхронихация) вполне возможно, не сбросится флаг TXE, т.к. UART еще просто не дождался своего такта. То же самое и с SPI. Эффективнее всего у меня получалось использовать штатные прерывания и DMA - эта штука работала лучше всего.
2
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 07.05.2016, 17:07 [ТС] | ||
|
и куча посылок однобайтовые, причем есть команда а есть данные, отдельную ножку нужно на данные посадить на 1 а на команды на 0, вот здесь то и нужно ожидание конца посылки, чтобы синхронно дергать а насчет прерываний пока не думал
1
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 07.05.2016, 18:53 | |
|
ну просто DMA, прерывания работают в такт с периферией. Здесь у вас не случится неправильного вызова, все флаги выставляются вовремя, и периферия запускается тоже вовремя. А так - меня, если честно, доставало настроить правильную работу, скажем RTC, т.к. низкочастотный клок (40кГц в STM32 или 32768 с внешним кварцем), потому что после каждой команды управления пришлось ждать, пока он поймет что ему отправили.
ЗЫ: что касается "сложных обменов" - то можно глянуть как это было сделано у CHAN'а в библиотеке работы STM32 с SDCARD через DMA ). В принципе он комбинировал - часть команд отправляется напрямую, а часть работает через буферы. Но все равно есть ожидание окончания, то есть такие решения будут хорошо работать в RTOS. ЗЫ2: я делал чтение данных с флешки по SPI (просто флешка, SOIC8) через DMA. Получалось сделать поток данных, и все это работало и управлялось через прерывания DMA. Но самому написать обмен по SPI с SDCARD не получилось - содрал чужой вариант. Там и как в вашем случае (с экраном, я т.п.) обмен будет сложнее, и следовательно, дольше думать надо, чтобы это заработало.
1
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 07.05.2016, 19:40 [ТС] | |
|
Voland_, "раз пошла такая пьянка"
точнее DMAвот например нужно послать кучу однотипных данных, заливка области, вот можно ли настроить DMA на определенное количество посылок, например 100 а потом 200, а в буфере будет всего один байт(слово)?
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 07.05.2016, 21:35 | ||
|
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|||
| 07.05.2016, 21:59 [ТС] | |||
|
интересует как раз циклическое исполнение, DMA у STM может читать из одного места, достаточно отключить дикремент/икремент, но вот как заставить его сделать пересылку определенное количество раз, я такой настройки не видел, или однократно или бесконечно, правда я еще глубоко не рыл, была в основном задача заполнить буфер можно конечно в прерываниях от DMA заделать какой-нибудь счетчик, но тогда все преимущества DMA теряются и так до бесконечности
0
|
|||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|||
| 07.05.2016, 22:50 | |||
|
1
|
|||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 07.05.2016, 23:34 [ТС] | ||
не знаю что получитсяА окончание пересылки наверно все равно прерывание ДМАшное нужно ловить? а может ловить флаг Занято у SPI? в общем как всегда, вопросов больше чем ответов
0
|
||
| 31.01.2021, 00:04 | |
|
гм... в документации описано что txe это не конец передачи ! а освобождение spi_dr (его значение уходит в shift и после этого txe выставляется)
а вот bsy - это именно конец передачи данных (то есть shift пустой), но есть ньюанс :-) для определения настоящего конца передачи данных сначала надо проверять txe и потом bsy.. на СИ скорее всего проблем не будет (по крайней мере на HAL), а вот на ассемблере вас будут ждать чудные сюрпризы :-) вот так бывает вдумчивое чтение и смотрение в код помогли в итоге: конец передачи это txe и bsy, передача данных без пауз это проверка txe до записи данных в spi_dr
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||
| 31.01.2021, 08:10 [ТС] | ||||
|
0
|
||||
| 31.01.2021, 08:14 | |
|
проблемы из за работы железа..
то как вы отправляете правильно для команд (с пред/после выставлением DC/A0 и т.д.) а данные все таки по txe надо передавать.. ну в принципе если через dma то так оно и будет скорее всего
0
|
|
| 31.01.2021, 08:14 | |
|
Помогаю со студенческими работами здесь
12
stm32f407 + SPI MMC + usb mass storage [Решено] STM32F407 SPI slave + Cubieboard2 не работает [РЕШЕНО] STM32F407+LSM303C, STM32F407 (дискавери) ILI9341 SPI DMA, SPI, UART библиотеки ILI9341 SPI DMA, SPI, UART библиотеки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|