Это Вам скорость не нужна, а стандарту нужна. Но хорошо, забудем про скорость. Задам провокационный вопрос, раскрывающий всю прелесть альтернативных функций на выводах: Вы настраиваете порт как выход, причём неважно, пуш-пулл (интересно, есть ли у него русское наименование? надо поискать, что-то не задумывался раньше...) или ОК. Настроили и отправили туда 1. Одновременно на этом же порту включили аппаратный SPI и тот решил, что сейчас пора послать 0. Догадываетесь, что покажет мультиметр в этот момент на выводе мк?
Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.
И будет конфликт. Это обсуждалось на форуме поддержки ST, есть ведь и более весёлые ситуации, когда на одном выводе несколько GPIO и там нет механизма, блокирующего функции, при включении какой-то, со всеми вытекающими последствиями.
ща гляну, у меня в работе 001, может, в 103 что-то иначе...
Добавлено after 22 minutes 27 seconds: нда... я думал, что уже знаю об альтернативной конфигурации всё, однако, там действительно написано:
An alternate function output can be push-pull or pseudo-open drain depending on the peripheral and Control register 1 (Px_CR1) and slope can be controlled depending on the Control register 2 (Px_CR2)
И, получается, непонятно. С I2C подобное точно не прокатывает, там выводы конфигурируются в варианте "pseudo-open drain depending on the peripheral" и иное нужно только для ручного посыла сигнала сброса. Но "and Control register 1 (Px_CR1) and slope can be controlled depending on the Control register 2 (Px_CR2)" как бэ намекает, что нужно комбинировать. И никакого раскрытия информации, как они себя действительно ведут, кроме NSS
Теперь мне тоже интересно, как они устроены...
Добавлено after 9 minutes 38 seconds: Но если глянуть примеры в библиотеке (STM8S_StdPeriph_Examples\SPI), то там нет настройки GPIO для работы SPI, значит, они остаются как входа.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:4 Медали: 1
Martian писал(а):
то там нет настройки GPIO для работы SPI
Так в этом же тексте и написано, что периферия перехватывает DDR и ODR. Что их настраивать. При этом CR1 и CR2 остаются в распоряжении пользователя. Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.
Добавлено after 6 minutes 17 seconds:
Z_h_e писал(а):
Я вот думаю, что у меня STM8 тоже клон.
Так что все может быть очень просто.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
При этом CR1 и CR2 остаются в распоряжении пользователя.
Да, совершенно верно. Я наткнулся на практике где-то на иное и сделал общий вывод для всего, что было неверно. Спасибо!
Z_h_e писал(а):
Так что все может быть очень просто.
Пока ещё нет:) проглядел мельком форум ST и там тоже есть подобный вопрос и нет ответа. На выходные буду возиться как раз с SPI, и у меня контроллеры, купленные непосредственно у ST. Тогда убедимся. Если кто-нибудь не ответит раньше.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.
Странное что-то рассказываете.... Откуда такие данные?? Вроде как схема IO-ног у STM8S вполне себе обычная - подобная другим МК. Схему можно найти в RM: Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.
Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.
А не пробовали - остановить CPU отладчиком в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull. И проверить содержимое всех регистров управления GPIO?
В какой среде пишете код и как огранзирован SPI - со стандартной библиотекой, другим способом? Дайте хотя бы фрагмент кода того, что сделали. Делаете это ради потребления или по другим причинам? Какова скорость передачи данных по шине?
Бы использовал стандартный SPI (push-pull) , после отправки данных бы освободл шину и бы установл GPIO так, как хотим (в pull up/down ?). По новой отправке: новую инициализацию, отправка и новое отключение. Или бы создал свой собственный программный SPI, который работает по своему усмотрению.
Последний раз редактировалось veso74 Чт дек 21, 2023 22:44:26, всего редактировалось 2 раз(а).
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
veso74, у меня пока вопрос не как реализовать, а почему не работает как написано в RM. Или может как правильно прочитать RM.
veso74 писал(а):
Дайте хотя бы фрагмент кода того, что сделали.
Ну какой там код, один регистр настроек. Держите
Код:
CLK_PCKENR1|=1<<1; //тактирование SPI
SPI_CR1= (0x6<<3) | //предделитель на 128 MASK_SPI_CR1_MSTR | //режим мастера //MASK_SPI_CR1_CPOL | //исходное состояние SCK высокий уровень //MASK_SPI_CR1_CPHA | 0;
SPI_CR1|=MASK_SPI_CR1_SPE; //включить
Как только что-то положить в SPI_DR, сразу порт MOSI работает в пушпул.
Добавлено after 10 minutes 42 seconds: Сейчас на UART попробовал. Как-только включаешь бит разрешения передачи, еще ничего не передавая, порт Tx сразу в pull_up. Настройки порта не трогал. Я думаю надо дождаться камрада Martian, с его точно оригинальными STM8.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Откуда такие данные??... Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.
Согласен. И картинку эту видел. Но как-то раз на практике это отработало странно, и я сделал иные выводы, неверные.
Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?
Вот именно он вынес мне мозг и сформировал неверное понимание. У него на одной ноге именно несколько портов. Я получил половину напряжения питания, подав 0 на один порт и 1 на другой
Кроме того, у меня была ситуация, уже не помню на каком из STM8, когда конфигурирование ног для PWM как выходов прекращало их работу как PWM. И вот что мне оставалось думать? Что схемы схемами, а альтернативные функции и GPIO имеют конфликт...
Добавлено after 1 hour 4 minutes 24 seconds: Z_h_e, сейчас был под рукой STM8L101F3P6 - запустил SPI c открытым коллектором. всё хорошо...
Резисторы 1 кОм, режим открытого коллектора (на другом конце шины никого нет):
Тоже, но со включенным пуш-пулл:
Никакие манипуляции с SPI не привели к изменениям CR1/2 GPIO, я уже всяко наугад пробовал, он просто глох в итоге... ну а фронты сигналов сами за себя говорят.
Так что я там выше о работе портов с альтернативными функциями был неправ, спасибо всем за возвращение на путь истинный.
Чтож, то был честный STM8L101, чуть позже я проверю на честном STM8S103
А если его притянуть к нулю? Это должно "обнулить" первую осциллограмму и никак не повлиять на вторую.
притянул, сигнал исчез, впрочем, его нет, даже если не притягивать, а убрать резистор (внутренний тоже выключен). А вот с пуш-пулл мне жалко притягивать к нулю
а я не думал особо, доверился ) безопасно же, отсутствие сигнала без резистора уже говорит об "исчезнувшем" верхнем ключе. надо было ещё и от плюса измерять, да?
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Спойлер Пушпуш будет работать на обоих схемах. Открытый сток только на левой, если заработает на обеих, то это пушпул. Именно для этой проверки я предлагал притянуть резистор к нулю.
Martian писал(а):
впрочем, его нет, даже если не притягивать, а убрать резистор
Но и этого уже думаю достаточно. И по осциллу видно что сигналы разные.
И так, я достал STM8S103K3T6. Включение SPI выдало на пустой, в воздухе ноге, осциллограмму с чёткими фронтами... пуш-пулл. В регистрах CR1 и СR2 остались нули, по крайней мере так показывает отладчик IAR.
Итог: STM8S103K3T6 в режиме SPI игнорирует регистры GPIO CR1 и СR2, автоматически работает в пушш-пулл, и, вероятно, фаст. STM8L101F3P6 не игнорирует в режиме SPI регистры GPIO CR1 и СR2.
Добавлено after 9 minutes 42 seconds: То же самое, автоматически становится пуш-пулл, по крайней мере SCK (MOSI делит одну ногу со SWIM)
Больше вариантов с ядром STM8S у меня нет. Ну, что, надо бы всё-таки как-то найти этому подтверждение в официальных текстах...
Добавлено after 1 hour 8 minutes 29 seconds: я нашел лишь небольшую разницу:
RM for STMS:
Цитата:
11.8 Output mode details 11.8.1 Alternate function output ... Examples: SPI output pins must be set-up as push-pull, fast slope for optimal operation.
и RM для STM8L:
Цитата:
10.8 Output mode details 10.8.1 Alternate function output ... Examples: SPI outputs must be set-up as push-pull. The slope of SPI outputs is controlled by hardware and configured in fast mode to enable an optimal operation. The user must then keep the CR2 slope control bit cleared to avoid spurious interrupts.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения