Программирование STM8
Re: Программирование STM8
Это Вам скорость не нужна, а стандарту нужна. Но хорошо, забудем про скорость. Задам провокационный вопрос, раскрывающий всю прелесть альтернативных функций на выводах: Вы настраиваете порт как выход, причём неважно, пуш-пулл (интересно, есть ли у него русское наименование? надо поискать, что-то не задумывался раньше...) или ОК. Настроили и отправили туда 1. Одновременно на этом же порту включили аппаратный SPI и тот решил, что сейчас пора послать 0. Догадываетесь, что покажет мультиметр в этот момент на выводе мк?
Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.
И будет конфликт. Это обсуждалось на форуме поддержки ST, есть ведь и более весёлые ситуации, когда на одном выводе несколько GPIO и там нет механизма, блокирующего функции, при включении какой-то, со всеми вытекающими последствиями.
Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.
И будет конфликт. Это обсуждалось на форуме поддержки ST, есть ведь и более весёлые ситуации, когда на одном выводе несколько GPIO и там нет механизма, блокирующего функции, при включении какой-то, со всеми вытекающими последствиями.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
В RM написано, периферия может работать в как в режиме пушпул, так и опендрей. Даже сделан акцент на это.
Re: Программирование STM8
ща гляну, у меня в работе 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, значит, они остаются как входа.
Добавлено 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, значит, они остаются как входа.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Так в этом же тексте и написано, что периферия перехватывает DDR и ODR. Что их настраивать.Martian писал(а):то там нет настройки GPIO для работы SPI
При этом CR1 и CR2 остаются в распоряжении пользователя.
Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.
Добавлено after 6 minutes 17 seconds:
Z_h_e писал(а):Я вот думаю, что у меня STM8 тоже клон.
Re: Программирование STM8
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4519857#p4519857"]При этом CR1 и CR2 остаются в распоряжении пользователя.[/uquote] Да, совершенно верно. Я наткнулся на практике где-то на иное и сделал общий вывод для всего, что было неверно. Спасибо!
На выходные буду возиться как раз с SPI, и у меня контроллеры, купленные непосредственно у ST. Тогда убедимся. Если кто-нибудь не ответит раньше.
Пока ещё нет:) проглядел мельком форум ST и там тоже есть подобный вопрос и нет ответа.Z_h_e писал(а):Так что все может быть очень просто.
На выходные буду возиться как раз с SPI, и у меня контроллеры, купленные непосредственно у ST. Тогда убедимся. Если кто-нибудь не ответит раньше.
Re: Программирование STM8
[uquote="Martian",url="/forum/viewtopic.php?p=4519836#p4519836"]Проще говоря, когда Вы запускаете SPI, на выводе микроконтроллера параллельно с каким-то там GPIO_С_PIN2 появляется подсоединённый вывод MOSI, свойствами которого управлять невозможно, и если для SPI требуется пуш-пулл, то MOSI таким и будет, и если на GPIO_С_PIN2 открытый коллектор с подтягивающим резистором, то этот резистор будет просто параллелен верхнему ключу MOSI.[/uquote]Странное что-то рассказываете....
Откуда такие данные??
Вроде как схема IO-ног у STM8S вполне себе обычная - подобная другим МК. Схему можно найти в RM:

Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.
[uquote="Martian",url="/forum/viewtopic.php?p=4519836#p4519836"]когда на одном выводе несколько GPIO[/uquote]Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?
Добавлено after 4 minutes 22 seconds:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4519857#p4519857"]Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.[/uquote]А не пробовали - остановить CPU отладчиком в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull. И проверить содержимое всех регистров управления GPIO?
Вроде как схема IO-ног у STM8S вполне себе обычная - подобная другим МК. Схему можно найти в RM:
Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.
[uquote="Martian",url="/forum/viewtopic.php?p=4519836#p4519836"]когда на одном выводе несколько GPIO[/uquote]Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?
Добавлено after 4 minutes 22 seconds:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4519857#p4519857"]Но для MOSI настройки порта я по всякому попробовал, никакой разницы. Может скорость нарастания фронта работает, не проверял.[/uquote]А не пробовали - остановить CPU отладчиком в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull. И проверить содержимое всех регистров управления GPIO?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Я сейчас не вспомню точно что именно пробовал. Вот, сделал сейчас

Добавлено after 5 minutes 46 seconds:
Добавлено after 5 minutes 29 seconds:
Если SPI закончил передачу на 1, он порт останется в pullup, если 0, то pulldown.
Добавлено after 5 minutes 46 seconds:
Этот момент становится от начала передачи и возвращается к настройкам порта только при выключении SPI.jcxz писал(а): в тот момент, когда вывод (работающий в режиме SPI) вдруг самопроизвольно стал push-pull
Добавлено after 5 minutes 29 seconds:
Если SPI закончил передачу на 1, он порт останется в pullup, если 0, то pulldown.
- Вложения
-
- Снимок.PNG
- (2.67 КБ) 612 скачиваний
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1905
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Программирование STM8
В какой среде пишете код и как огранзирован SPI - со стандартной библиотекой, другим способом? Дайте хотя бы фрагмент кода того, что сделали. Делаете это ради потребления или по другим причинам? Какова скорость передачи данных по шине?
Бы использовал стандартный SPI (push-pull) , после отправки данных бы освободл шину и бы установл GPIO так, как хотим (в pull up/down ?). По новой отправке: новую инициализацию, отправка и новое отключение. Или бы создал свой собственный программный SPI, который работает по своему усмотрению.
Бы использовал стандартный SPI (push-pull) , после отправки данных бы освободл шину и бы установл GPIO так, как хотим (в pull up/down ?). По новой отправке: новую инициализацию, отправка и новое отключение. Или бы создал свой собственный программный SPI, который работает по своему усмотрению.
Последний раз редактировалось veso74 Чт дек 21, 2023 22:44:26, всего редактировалось 2 раза.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
veso74, у меня пока вопрос не как реализовать, а почему не работает как написано в RM. Или может как правильно прочитать RM.
Как только что-то положить в SPI_DR, сразу порт MOSI работает в пушпул.
Добавлено after 10 minutes 42 seconds:
Сейчас на UART попробовал. Как-только включаешь бит разрешения передачи, еще ничего не передавая, порт Tx сразу в pull_up. Настройки порта не трогал.
Я думаю надо дождаться камрада Martian, с его точно оригинальными STM8.
Ну какой там код, один регистр настроек. Держите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; //включить Добавлено after 10 minutes 42 seconds:
Сейчас на UART попробовал. Как-только включаешь бит разрешения передачи, еще ничего не передавая, порт Tx сразу в pull_up. Настройки порта не трогал.
Я думаю надо дождаться камрада Martian, с его точно оригинальными STM8.
Re: Программирование STM8
[uquote="jcxz",url="/forum/viewtopic.php?p=4520223#p4520223"]Откуда такие данные??...
Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.[/uquote] Согласен. И картинку эту видел. Но как-то раз на практике это отработало странно, и я сделал иные выводы, неверные.
[uquote="jcxz",url="/forum/viewtopic.php?p=4520223#p4520223"]Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?[/uquote]

Вот именно он вынес мне мозг и сформировал неверное понимание. У него на одной ноге именно несколько портов. Я получил половину напряжения питания, подав 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
Как видно - и GPIO-out и вывод "alternate function" - идут по одному и тому же пути, через единый мультиплексор. И управлять ногой должны одинаково.[/uquote] Согласен. И картинку эту видел. Но как-то раз на практике это отработало странно, и я сделал иные выводы, неверные.
[uquote="jcxz",url="/forum/viewtopic.php?p=4520223#p4520223"]Это как это - "несколько GPIO на одном выводе"??? Можно ссылку?[/uquote]
Вот именно он вынес мне мозг и сформировал неверное понимание. У него на одной ноге именно несколько портов. Я получил половину напряжения питания, подав 0 на один порт и 1 на другой
Кроме того, у меня была ситуация, уже не помню на каком из STM8, когда конфигурирование ног для PWM как выходов прекращало их работу как PWM. И вот что мне оставалось думать? Что схемы схемами, а альтернативные функции и GPIO имеют конфликт...
Добавлено after 1 hour 4 minutes 24 seconds:
Z_h_e, сейчас был под рукой STM8L101F3P6 - запустил SPI c открытым коллектором. всё хорошо...
Код: Выделить всё
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; Тоже, но со включенным пуш-пулл:
Никакие манипуляции с SPI не привели к изменениям CR1/2 GPIO, я уже всяко наугад пробовал, он просто глох в итоге... ну а фронты сигналов сами за себя говорят.
Так что я там выше о работе портов с альтернативными функциями был неправ, спасибо всем за возвращение на путь истинный.
Чтож, то был честный STM8L101, чуть позже я проверю на честном STM8S103
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Я так понимаю, в осциллограммах надо обращать внимание на крутизну фронтов.
А если его притянуть к нулю? Это должно "обнулить" первую осциллограмму и никак не повлиять на вторую.Martian писал(а):Резисторы 1 кОм
Даже не знаю какому результату потом радоваться )).Martian писал(а):позже я проверю на честном STM8S103
Re: Программирование STM8
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4520348#p4520348"]А если его притянуть к нулю? Это должно "обнулить" первую осциллограмму и никак не повлиять на вторую.[/uquote] притянул, сигнал исчез, впрочем, его нет, даже если не притягивать, а убрать резистор (внутренний тоже выключен). А вот с пуш-пулл мне жалко притягивать к нулю 
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
А что ему будет через 1кОм то? Но смысла нет вроде как нет.Martian писал(а):А вот с пуш-пулл мне жалко притягивать к нулю
На STM8L можно внутренний резистор включить в режиме выхода?Martian писал(а):(внутренний тоже выключен)
Re: Программирование STM8
[uquote="Z_h_e",url="/forum/viewtopic.php?p=4520351#p4520351"]А что ему будет через 1кОм то? Но смысла нет вроде как нет.[/uquote] А, через резистор... я под вечер уже несообразил, даже удивился 
нет, по крайней мере здесь... это я брякнул, потому что опять блин, тот 8-ногий 050 лезет в голову. Там - можно, но это будет резистор другого порта.Z_h_e писал(а):На STM8L можно внутренний резистор включить в режиме выхода?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Так и в первом случае через резистор надо, иначе какой смыслMartian писал(а):А, через резистор
Re: Программирование STM8
а я не думал особо, доверился ) безопасно же, отсутствие сигнала без резистора уже говорит об "исчезнувшем" верхнем ключе.
надо было ещё и от плюса измерять, да?
надо было ещё и от плюса измерять, да?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Спойлер
Открытый сток только на левой, если заработает на обеих, то это пушпул.
Именно для этой проверки я предлагал притянуть резистор к нулю.
Но и этого уже думаю достаточно. И по осциллу видно что сигналы разные.Martian писал(а):впрочем, его нет, даже если не притягивать, а убрать резистор
- Вложения
-
- пушпуш.png
- (12.64 КБ) 310 скачиваний
Re: Программирование STM8
И так, я достал STM8S103K3T6.
Включение SPI выдало на пустой, в воздухе ноге, осциллограмму с чёткими фронтами... пуш-пулл. В регистрах CR1 и СR2 остались нули, по крайней мере так показывает отладчик IAR.

Итог:
STM8S103K3T6 в режиме SPI игнорирует регистры GPIO CR1 и СR2, автоматически работает в пушш-пулл, и, вероятно, фаст.
STM8L101F3P6 не игнорирует в режиме SPI регистры GPIO CR1 и СR2.
Включение SPI выдало на пустой, в воздухе ноге, осциллограмму с чёткими фронтами... пуш-пулл. В регистрах CR1 и СR2 остались нули, по крайней мере так показывает отладчик IAR.
Итог:
STM8S103K3T6 в режиме SPI игнорирует регистры GPIO CR1 и СR2, автоматически работает в пушш-пулл, и, вероятно, фаст.
STM8L101F3P6 не игнорирует в режиме SPI регистры GPIO CR1 и СR2.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Я спать. )))
Re: Программирование STM8
Рано ещё )) у меня ещё есть STM8S001J3M3, ща...
Добавлено after 9 minutes 42 seconds:
То же самое, автоматически становится пуш-пулл, по крайней мере SCK (MOSI делит одну ногу со SWIM)
Больше вариантов с ядром STM8S у меня нет. Ну, что, надо бы всё-таки как-то найти этому подтверждение в официальных текстах...
Добавлено after 1 hour 8 minutes 29 seconds:
я нашел лишь небольшую разницу:
RM for STMS:
Добавлено after 9 minutes 42 seconds:
То же самое, автоматически становится пуш-пулл, по крайней мере SCK (MOSI делит одну ногу со SWIM)
Больше вариантов с ядром STM8S у меня нет. Ну, что, надо бы всё-таки как-то найти этому подтверждение в официальных текстах...
Добавлено after 1 hour 8 minutes 29 seconds:
я нашел лишь небольшую разницу:
RM for STMS:
и RM для STM8L: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.
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.
