2 / 2 / 1
Регистрация: 05.11.2018
Сообщений: 96
|
|
1 | |
[STM32F103C8T6, он-же Blue Pill] - SPI1, CMSIS - пример18.03.2023, 23:48. Показов 1299. Ответов 54
Метки нет Все метки)
(
Доброго времени суток, уважаемые участники форума! Подскажите пожалуйста, есть ли где готовый пример использования SPI (на CMSIS) для данного микроконтроллера? Честно, разбираться лень просто
![]()
0
|
|
18.03.2023, 23:48 | |
Ответы с готовыми решениями:
54
Подключение TFT дисплея к Arduino blue pill Запустить экран на ILI9341 с платой Blue Pill Адаптер USB-Serial с 3 UART портами на STM32 Blue Pill |
19.03.2023, 12:53 | 2 | ||||||||||
ассемблер поймете ?
там в принципе только cmsis и есть... проще некуда...
Добавлено через 6 минут в spi кстати лучше по разбираться... там есть отличия от AVR (если раньше на них писали) - и они могут сильно попортить мозг... хотя то что выше будет работать всегда, но указанная выше процедура отправки байта может работать значительно быстрее. для потоковой передачи отправка должна выглядеть вот так:
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
|
20.03.2023, 13:12 | 3 |
эка вы ТСа загрузили... есть готовые библиотеки и примеры....
просто он настолько ленивый, что кроме порнушных сайтов и чатов... не может открыть поисковик.. но дае если он его откроет и найдёт случайно... там мозг включать надо.... а тут - печалка... ТС- SPI самый простой в реализации протокол.... https://microkontroller.ru/stm... blue-pill/
0
|
Radikal_78
|
20.03.2023, 19:20
#4
|
Не по теме: SergP01, может это троллинг был?)
0
|
20.03.2023, 19:48 | 5 |
ага, сколько ставить на то что начнет обрабатывать BSY или скорее RDY после каждой посылки или будет delay пихать куда надо и не надо ? :-)
Добавлено через 40 секунд за сутки ему никто так их и не дал :-) так что все чем мог :-)
0
|
3543 / 2214 / 401
Регистрация: 09.09.2017
Сообщений: 9,223
|
|
21.03.2023, 09:24 | 6 |
Вот что я изобретал недавно для дисплея st7789: SPI с возможностью DMA. Правда, изобретал я его в первую очередь для gd32vf103, а на stm'ке только первоначальное тестирование, поэтому, кажется, забыл пару багов. Правда, не помню каких.
0
|
21.03.2023, 09:39 | 7 |
bsy в wait ?
гм... ну если только из за дма... p.s. кстати bsy по идее нельзя проверять без предварительной проверки txe, хотя на сях конечно все можно :-) p.p.s. интересно, а автор на хабре бывает? а то там статья про spi была.. в котором все делают не так... как раз про stm32
0
|
3543 / 2214 / 401
Регистрация: 09.09.2017
Сообщений: 9,223
|
|
21.03.2023, 12:58 | 8 |
Разумеется. А как иначе? Не по TXE же.
Есть пример кода / железа, где без этого ломается? Там много статей. В том числе по SPI или STM32 тоже много статей.
0
|
21.03.2023, 17:10 | 9 |
ну да, ну да.. я вообще там txe не обнаружил... хотя может плохо смотрел...
на ассемблере легко... а вот на си возможно только на малых скоростях spi (оверкод большой)
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
|
21.03.2023, 17:20 | 10 |
да ладна.... современные компиляторы генерят нормальный код... можете проверить.
Добавлено через 5 минут и меня программный spi ограничивался скоростью переключения копыт... с аппаратным вообще проблем нет...
0
|
21.03.2023, 17:34 | 11 | |||||
давайте не будем, а ? я на асме пишу... последний раз говнокод кидали вчера утром.. из под куба.. понять не могли
так что не надо писать про эффективность трансляции с си - вы все равно в асме ничего не понимаете, так что не делайте оценок (не ваше это.. и не надо показывать свою некомпетентность, тем более вы пишите на си, а не на асме, и он вам нафиг не нужен же был) в общим мне лучше такие вещи не писать, я вашего си в после компилятора видел всяко больше :-) везде одно и тоже... говнокод он и в африке говнокод... на каких то линейных частях алгоритма иногда действительно хорошо генерит (как и человек бы написал), но основная программа - сплошной говнокод... это даже гейчат-гпт подтверждает (как отражающий статистику используемого кода)... (привести листинг ?) ну можно везде использовать bsy и проблем не будет :-) как и максимальной скорости :-) Добавлено через 7 минут вот делал себе зарубку про txe - bsy https://vk.com/wall-200545792_81 кстати в документации это указано, но на си никогда проблем небыло (всегда использовал макс. скорость спи)... а вот на асме....
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
|
21.03.2023, 18:15 | 12 |
0
|
21.03.2023, 18:18 | 13 |
вы похоже до сих пор не поняли о чем речь..
ладно, не важно, не всем же писать код для быстрого обмена... кому то и управление spi аналогично тому как это сделано в avr божий дар... Добавлено через 51 секунду про ассемблер смотрю вы уже "проехали" ? и правильно !!! и не пишите больше того чего не знаете...
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
||||||
21.03.2023, 18:33 | 14 | |||||
вот так на асм для ADSP2191 выглядит функция sin(a)
копия... только если я токое писать буду ... мне о регистрах надо голову ломать...
0
|
21.03.2023, 18:47 | 15 |
потому что это стандартная функция... макрос готовый...
это как раз и было написано человеком или оптимизировано им :-) а вы посмотрите обычный код... я выше вам показал что куб на генерил.. оно конечно, видать там uint8 тип был.... но как не крути, вместо этих 4х инструкций достаточно было бы одной ands r3, r0, 3 НО, я уже давно заметил что си компилятор не использует (или использует очень редко): - битбандинг (достаточно посмотреть какая дичь обычно в настройке тактирования или включении периферии) - условное исполнение инструкций - использование суффикса S при проверке на ноль... такое ощущение что макросы си написаны для cortex-m0.... так что говорить об эффективности генерируемого кода си компилятором - очень, очень, очень самоуверенно и оверкода там дофига...причем часто тупого как в примере выше... и я не начинаю холивар против си... у него много своих достоинств, но не надо рассказывать сказки о том чего там нет... здесь не рекламная доска для лозунгов...
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
|
21.03.2023, 18:59 | 16 |
значит обленились.... только обёртки красивые пишут.... а IDE с каждым годом всё тяжелее становятся
![]()
0
|
3543 / 2214 / 401
Регистрация: 09.09.2017
Сообщений: 9,223
|
|
22.03.2023, 10:18 | 18 |
Там - где?
Не понял. Там же не ST-HAL, а чистая работа с регистрами, на ассемблере плюс-минус пару тактов выиграете, не больше. А проверял я от минимальной до максимальной скорости, от 72/256 до 72/2, все работает. Наверняка есть небольшая задержка между отдельными байтами в "ручном" режиме, но чтобы от нее избавиться, пришлось бы городить вторую задержку, именно по TXE, а это усложнение, которое никакого реального прироста не даст. На малых объемах выигрыш, очевидно, также мал. А на больших включаем DMA и не страдаем ногодрыгом. А, ну и почему нельзя всегда использовать TXE: для дисплея важно дергать линию DC между посылками, а не в середине передачи. Туда же изменение настроек SPI вроде размера слова, отключение, или там DMA. Но я спрашивал при каких условиях мой код сломается. Не будет работать на 3% хуже теоретического предела, а перестанет работать совсем. Да из-под Куба-то понятно что говнокод прилетит, это можно даже в дизасм не заглядывать. Бесполезное упражнение, поскольку мы не знаем что этот код должен делать по задумке. Абсолютно напрасная самоуверенность. Я, например, при написании части кода сверялся с тем, во что он разворачивается (а макросы у меня такие, что компилятор вправе их разворачивать по-разному, и это проблема). А при работе с периферией через регистры у компилятора напротив свободы оптимизации крайне мало. Чушь. Через DMA оно работает всяко быстрее, чем при ручной записи в DR хотя бы потому что ядро может еще что-то делать. А оптимизировать полторы микросекунды при инициализации или операции, которая возникает примерно раз в вечность, ценой потери читаемости никакого смысла нет. Ага, с моим st7789 похожая ерунда была. У него какой-то противоестественный режим SPI используется. У меня было еще веселее. На частоте 1:2 работает, а на 1:64 уже нет. А когда поигрался с CPOL / PHASE, заработало нормально. Ну и на 108/2, если я правильно помню, все-таки не справляется, пришлось 108/4 делать (это на GD'шке, у нее максималка повыше, чем у ST). Вы бы оценили на сколько процентов битбанд и прочие извращения в инициализации ускоряют программу, которая работает хотя бы пару часов. Впрочем, подскажу: примерно нинасколько, потому что выполняется единственный раз. Хм, даже интересно. Компиляторов Си ведь несколько. Они все себя так ведут? ...основные из которых - читаемость и переносимость исходного кода. При портировании с stm32f103 (ARM) на gd32vf103 (RISC-V) мне пришлось по сути только пробежаться по рафманам и переименовать регистры, благо по периферии они почти совместимы. На ассемблере бы так просто не было.
1
|
22.03.2023, 11:09 | 19 |
в вашем архиве...
там две процедуры bsy и wait в обоих используется bsy :-) использование txe дает прирост !!! как минимум на 1 такт при передаче потока каждый передаваемый байт (полуслово).. в принципе для дисплеев - согласен, не даст, так как обычно команды состоят из одного байта... а вот если на дисплей не буфер сбрасывают через dma, а например выполняется позиционирование, то есть идет последовательность: команда_дисплея: POS_X данные LO_X данные HI_X команда_дисплея: POS_Y данные LO_Y данные HI_Y то вы уже потеряли два такта SPI (1\4 байта).. возможно на risc-v этого нет, с ними не знаком (только планирую) если использовать bsy - то конечно будет работать :-) я разве сказал что не будет ?! ну да, ну да, под другими средами gcc другой :-) охотно верю :-) я еще и в зубных фей верю.. и в деда мороза :-) там более чем понятно что код делает... и более чем понятно как из 4 инструкций сделать одну... но конечно понятно тому кто знаком с асмом реально, а не пишет каждый раз что СИ генерит афигенно оптимальный код (ни разу не посмотрев что же на самом деле он генерит) скорость отправки данных от дма не зависит. подготовка да- с дма возможно параллельно... но никакого отношения это к скорости spi не имеет хз.. у меня 7789 нормально запустился... но на stm.. там да, частота меньше... а вы в итоге какие фазы выставили ?! не по даташиту ?! а на частоте 1:64 может просто слишком маленькая частота ? у меня был какой то дисплей который отказывался при частоте spi меньше 1 мгц работать... правда там вообще извращенный интерфейс spi был... а кто вам сказал что битбанд только при инициализации ? в этом и проблема компилятора.. он готов городить чтение\модификацию\запись одного бита вместо того чтобы просто использовать битбандинг :-) об этом я и говорю... вот и мне интересно.. теперь когда будут присылать вопросы буду требовать точного указания среды \ компилятора \ опций компиляции... компилятор си хорошо какой нить логически\математический байт процессинг в логике программы реализует.. действительно выжимает все и там практически нечего оптимизировать но как доходит очередь до работы с типами данных, записью бит\битовых полей в регистры\память, вызовы подпрограмм - то там ужас ужас ужас... Добавлено через 5 минут на ассемблере все тоже самое.. вы просто не пробовали :-) реально программа точно так же бьется на блоки... и только блоки periph и например core приходится править... вся остальная логика программы остается неизменной.. проблемы могут начаться только если вы с m4 например на m3 захотите мигрировать, и в коде под m4 какие нить dsp инструкции использовали (которых в m3 просто нет) - но как то такую миграцию (а главное ее цели) я плохо представляю а вот миграция вверх - вообще без проблем !
0
|
81 / 73 / 10
Регистрация: 31.08.2022
Сообщений: 915
|
|
22.03.2023, 11:22 | 20 |
вот только не каждая железка такое умеет...
и как бы вы там в асм не писали - взвести бит - получите чтение\модификацию\запись Добавлено через 2 минуты поэтому ногодрыги такие тормозные
0
|
22.03.2023, 11:22 | |
Помогаю со студенческими работами здесь
20
STM32 Blue Pill, не могу заставить таймер заткнуться, пока нажата кнопка
STM32L151+SPI1 помогите с SPI1 на STM32F103 stm32f4 из SPI1 в SPI2 GD32F207 проблемы с настройкой SPI1 [Решено] STM32F105, SPI1, VS1053 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |