Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Программирование STM8

Ср дек 20, 2023 22:37:12

Это Вам скорость не нужна, а стандарту нужна. Но хорошо, забудем про скорость. Задам провокационный вопрос, раскрывающий всю прелесть альтернативных функций на выводах: Вы настраиваете порт как выход, причём неважно, пуш-пулл (интересно, есть ли у него русское наименование? надо поискать, что-то не задумывался раньше...) или ОК. Настроили и отправили туда 1. Одновременно на этом же порту включили аппаратный SPI и тот решил, что сейчас пора послать 0. Догадываетесь, что покажет мультиметр в этот момент на выводе мк?

Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.

И будет конфликт. Это обсуждалось на форуме поддержки ST, есть ведь и более весёлые ситуации, когда на одном выводе несколько GPIO и там нет механизма, блокирующего функции, при включении какой-то, со всеми вытекающими последствиями.

Re: Программирование STM8

Ср дек 20, 2023 22:51:27

В RM написано, периферия может работать в как в режиме пушпул, так и опендрей. Даже сделан акцент на это.

Re: Программирование STM8

Ср дек 20, 2023 23:33:40

ща гляну, у меня в работе 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, значит, они остаются как входа.

Re: Программирование STM8

Ср дек 20, 2023 23:44:00

Martian писал(а):то там нет настройки GPIO для работы SPI

Так в этом же тексте и написано, что периферия перехватывает DDR и ODR. Что их настраивать.
При этом CR1 и CR2 остаются в распоряжении пользователя.
Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.

Добавлено after 6 minutes 17 seconds:
Z_h_e писал(а):Я вот думаю, что у меня STM8 тоже клон.
:dont_know: Так что все может быть очень просто.

Re: Программирование STM8

Ср дек 20, 2023 23:52:55

При этом CR1 и CR2 остаются в распоряжении пользователя.
Да, совершенно верно. Я наткнулся на практике где-то на иное и сделал общий вывод для всего, что было неверно. Спасибо!

Z_h_e писал(а):Так что все может быть очень просто.
Пока ещё нет:) проглядел мельком форум ST и там тоже есть подобный вопрос и нет ответа.
На выходные буду возиться как раз с SPI, и у меня контроллеры, купленные непосредственно у ST. Тогда убедимся. Если кто-нибудь не ответит раньше.

Re: Программирование STM8

Чт дек 21, 2023 19:56:38

Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.
Странное что-то рассказываете.... :shock: Откуда такие данные??
Вроде как схема IO-ног у STM8S вполне себе обычная - подобная другим МК. Схему можно найти в RM:
Изображение
Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.

когда на одном выводе несколько GPIO
Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?

Добавлено after 4 minutes 22 seconds:
Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.
А не пробовали - остановить CPU отладчиком в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull. И проверить содержимое всех регистров управления GPIO?

Re: Программирование STM8

Чт дек 21, 2023 21:06:08

Я сейчас не вспомню точно что именно пробовал. Вот, сделал сейчас
Изображение

Добавлено after 5 minutes 46 seconds:
jcxz писал(а): в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull
Этот момент становится от начала передачи и возвращается к настройкам порта только при выключении SPI.

Добавлено after 5 minutes 29 seconds:
Если SPI закончил передачу на 1, он порт останется в pullup, если 0, то pulldown.
Вложения
Снимок.PNG
(2.67 KiB) Скачиваний: 319

Re: Программирование STM8

Чт дек 21, 2023 21:20:05

В какой среде пишете код и как огранзирован SPI - со стандартной библиотекой, другим способом? Дайте хотя бы фрагмент кода того, что сделали. Делаете это ради потребления или по другим причинам? Какова скорость передачи данных по шине?

Бы использовал стандартный SPI (push-pull) , после отправки данных бы освободл шину и бы установл GPIO так, как хотим (в pull up/down ?). По новой отправке: новую инициализацию, отправка и новое отключение. Или бы создал свой собственный программный SPI, который работает по своему усмотрению.
Последний раз редактировалось veso74 Чт дек 21, 2023 22:44:26, всего редактировалось 2 раз(а).

Re: Программирование STM8

Чт дек 21, 2023 21:56:27

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.

Re: Программирование STM8

Пт дек 22, 2023 01:16:39

Откуда такие данные??...
Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.
Согласен. И картинку эту видел. Но как-то раз на практике это отработало странно, и я сделал иные выводы, неверные.

Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?


Изображение

Вот именно он вынес мне мозг и сформировал неверное понимание. У него на одной ноге именно несколько портов. Я получил половину напряжения питания, подав 0 на один порт и 1 на другой :)

Кроме того, у меня была ситуация, уже не помню на каком из STM8, когда конфигурирование ног для PWM как выходов прекращало их работу как PWM. И вот что мне оставалось думать? Что схемы схемами, а альтернативные функции и GPIO имеют конфликт...

Добавлено after 1 hour 4 minutes 24 seconds:
Z_h_e, сейчас был под рукой STM8L101F3P6 - запустил SPI c открытым коллектором. всё хорошо... :dont_know:

Код:
CLK_PERIPHERAL_ENABLE(CLK_SPI); //тактирование SPI
PB_INIT(Pin6 | Pin5, 0x00, 0x00);
SPI_CR1=(0x6<<3) | SPI_CR1_CPOL | SPI_CR1_CPHA;
SPI_CR2 |= SPI_CR2_SSM;
SPI_CR2 |= SPI_CR2_SSI;
SPI_CR1 |= SPI_CR1_MSTR;
SPI_CR1|=SPI_CR1_SPE;   


Резисторы 1 кОм, режим открытого коллектора (на другом конце шины никого нет):

Изображение

Тоже, но со включенным пуш-пулл:

Изображение

Никакие манипуляции с SPI не привели к изменениям CR1/2 GPIO, я уже всяко наугад пробовал, он просто глох в итоге... ну а фронты сигналов сами за себя говорят.

Так что я там выше о работе портов с альтернативными функциями был неправ, спасибо всем за возвращение на путь истинный.

Чтож, то был честный STM8L101, чуть позже я проверю на честном STM8S103

Re: Программирование STM8

Пт дек 22, 2023 01:29:05

Я так понимаю, в осциллограммах надо обращать внимание на крутизну фронтов.
Martian писал(а):Резисторы 1 кОм
А если его притянуть к нулю? Это должно "обнулить" первую осциллограмму и никак не повлиять на вторую.
Martian писал(а):позже я проверю на честном STM8S103
Даже не знаю какому результату потом радоваться )).

Re: Программирование STM8

Пт дек 22, 2023 01:38:37

А если его притянуть к нулю? Это должно "обнулить" первую осциллограмму и никак не повлиять на вторую.
притянул, сигнал исчез, впрочем, его нет, даже если не притягивать, а убрать резистор (внутренний тоже выключен). А вот с пуш-пулл мне жалко притягивать к нулю :)

Re: Программирование STM8

Пт дек 22, 2023 01:45:33

Martian писал(а):А вот с пуш-пулл мне жалко притягивать к нулю :)
А что ему будет через 1кОм то? Но смысла нет вроде как нет.
Martian писал(а):(внутренний тоже выключен)
На STM8L можно внутренний резистор включить в режиме выхода?

Re: Программирование STM8

Пт дек 22, 2023 01:57:31

А что ему будет через 1кОм то? Но смысла нет вроде как нет.
А, через резистор... я под вечер уже несообразил, даже удивился :))

Z_h_e писал(а):На STM8L можно внутренний резистор включить в режиме выхода?
нет, по крайней мере здесь... это я брякнул, потому что опять блин, тот 8-ногий 050 лезет в голову. Там - можно, но это будет резистор другого порта.

Re: Программирование STM8

Пт дек 22, 2023 02:00:47

Martian писал(а):А, через резистор
Так и в первом случае через резистор надо, иначе какой смысл :)

Re: Программирование STM8

Пт дек 22, 2023 02:19:57

а я не думал особо, доверился ) безопасно же, отсутствие сигнала без резистора уже говорит об "исчезнувшем" верхнем ключе.
надо было ещё и от плюса измерять, да? ;)

Re: Программирование STM8

Пт дек 22, 2023 02:40:15

СпойлерИзображение

Пушпуш будет работать на обоих схемах.
Открытый сток только на левой, если заработает на обеих, то это пушпул.
Именно для этой проверки я предлагал притянуть резистор к нулю.
Martian писал(а):впрочем, его нет, даже если не притягивать, а убрать резистор
Но и этого уже думаю достаточно. И по осциллу видно что сигналы разные.
Вложения
пушпуш.png
(12.64 KiB) Скачиваний: 27

Re: Программирование STM8

Пт дек 22, 2023 02:59:41

И так, я достал STM8S103K3T6.
Включение SPI выдало на пустой, в воздухе ноге, осциллограмму с чёткими фронтами... пуш-пулл. В регистрах CR1 и СR2 остались нули, по крайней мере так показывает отладчик IAR.

:dont_know:

Изображение


Итог:
STM8S103K3T6 в режиме SPI игнорирует регистры GPIO CR1 и СR2, автоматически работает в пушш-пулл, и, вероятно, фаст.
STM8L101F3P6 не игнорирует в режиме SPI регистры GPIO CR1 и СR2.

Re: Программирование STM8

Пт дек 22, 2023 03:01:48

Я спать. )))

Re: Программирование STM8

Пт дек 22, 2023 04:25:27

Рано ещё )) у меня ещё есть STM8S001J3M3, ща...

Добавлено 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.
Ответить