STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18560
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

[uquote="Adrift",url="/forum/viewtopic.php?p=4702733#p4702733"][uquote="ARV",url="/forum/viewtopic.php?p=4702720#p4702720"]вот только что убедился, что при питании 3.2-3.3 вольта контроллер работает, а при 3.4 - уже нет. Хотя по даташиту вроде же +0,5В от нормы может быть... или не может?[/uquote]
По даташиту норма - до 3.6V и, естественно, там все с запасом.[/uquote]где-то явно соврали... 3,4 в не работает, 3,3в работает... Факт. День убил на выяснение.

Добавлено after 2 minutes 31 second:
[uquote="tonyk",url="/forum/viewtopic.php?p=4702727#p4702727"]
ARV писал(а): в итоге от источника питания за 50 рублей пришлось отказаться в пользу источника питания за 300.
Наверно, вам лучше вернуться к AVR из-за неспособности читать, изучать новое и думать:
https://www.promelec.ru/product/206989/
Зато очень быстро умеете тыкать кнопки в Кубе.[/uquote]
Вам надо научиться принимать, как данность, что есть люди, не глупее вас, и их слова стоит принимать к сведению. Прежде чем советовать дурацкие микросхемы, стоило бы поинтересоваться условиями, в которых было принято решение о выборе ИП. Но признаю, вы много читали... Видимо, слишком много.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3483
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: STM32 новичку в ARM что к чему

Сообщение smacorp »

Как-то странно взрослому и опытному человеку "обвинять и жаловаться" на что-то, что такое, какое оно есть и другим быть не может. Никто ведь не будет жаловаться на ребёнка за то, что он такой нежный, хрупкий и не может жрать чипсы и водку взрослую еду. Вы или "терпите" детей, или объявляете себя чайлдфри. Не нравятся STM32, не используете их, а если вынуждены использовать по работе, тогда просто приноравливайтесь.

Лично у меня STM32 выходили из строя только при скачках питания выше 4.1V, что полностью соответствует даташиту, а до этого напряжения работали нормально.

Мало того, имею бракованный F103C8T6, потребляющий под 300 мА и греющийся больше 70 градусов, но, опять же, отлично выполняющий свои функции, если не ужасаться температуре корпуса.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Реклама
Уош
Опытный кот
Сообщения: 700
Зарегистрирован: Вс мар 23, 2025 14:56:55

Re: STM32 новичку в ARM что к чему

Сообщение Уош »

И всё же, у меня тоже такое ощущение, что прошлый период был как-то более пофигистичный к ошибочным телодвижениям. Причём, во всём. А сейчас без ESD-диодов - фу, пайка свинцом - фу, всё как-то не так, всё фу, если не поставил то, сё, не измерил еср и не вымыл руки, прежде чем вообще трогать. Ну, особых проблем действительно не создаёт, но ощущение, схожее с высказанным ARV, у меня давно есть.

Что касается питания, то, наверное, этот экземпляр отбраковка какая-нить или подделка. Их же ща полно.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18560
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Может и подделка, кто ж их различит?! И они не выходят из строя, они просто не стартуют или зависают при 3,4в питания... И выяснить невозможно, что с ними происходит... Но если привести питание к 3,3 - все стартует и работает. Этакий BOD наоборот

Добавлено after 2 minutes 35 seconds:
Может, из моей нелюбви копаться в даташитах я пропустил важное, и нынче в stm32 есть "оконный" BOR?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: STM32 новичку в ARM что к чему

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=4702720#p4702720"]Чем больше я погружаюсь в пучину stm32, тем сильнее я утверждаюсь в мнении, что это контроллеры для тепличных условий. Пины не перегрузи, питание не превысь, от помех защити...
...
помню AVR: налаживаешь что-нибудь, и вдруг чуешь - воняет что-то... трогаешь МК - он кипяток, аж канифоль дымится (утрирую) - батюшки! да я на него 7 вольт подал! выключил, остудил, подал 5 вольт и пошел дальше работать... как ни в чем ни бывало.[/uquote]Те кто строил ещё ламповые схемы, то же самое говорили про ваши AVR: "Налаживаю что-нить; вдруг чую - палёными тараканами воняет, и припой с платы капает... батюшки! - на сетку подал 300V вместо положенных 100V!! выключил, остудил, припой затвердел, включил - работает. А ваш AVR уже давно бы растёкся тонким слоем по плате." :)))

Добавлено after 2 minutes 58 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=4702748#p4702748"]3,4 в не работает, 3,3в работает... Факт. День убил на выяснение.[/uquote]Может стоит поменять свой мультиметр? Или хотя-бы отдать его на проверку? 8)
Реклама
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Re: STM32 новичку в ARM что к чему

Сообщение tonyk »

ARV писал(а):стоило бы поинтересоваться условиями, в которых было принято решение о выборе ИП
Условий озвучено не было, но после бреда про 3.4В оставалось только дать ссылку на LDO.
Реклама
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

В пятничный вечер -- самое время заняться чем-нибудь сомнительным. :-) Первый подход -- компактный макрос задержки на систике:

Код: Выделить всё

#define GET_TICK()    (SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos)
#define DELAY_MS(MS)  for (unsigned _ = (SysTick->CTRL, (MS)); _; _ -= GET_TICK()) (void)0
Код для проверки (считаем, что SysTick проинициализирован на 1 мс внутри init()):

Код: Выделить всё

int main(void) {

  init();

  for(;;) {
    GPIOC->BSRR = GPIO_BSRR_BR13;
    DELAY_MS(500);
    GPIOC->BSRR = GPIO_BSRR_BS13;
    DELAY_MS(500);
  }
 
} /* main() */
смотрим, во что это превращает компилятор (GCC 14.2):

Код: Выделить всё

 080001DE   MOV.W          R1, #0x20000000
for(;;) {
GPIOC->BSRR = GPIO_BSRR_BR13;
 080001E2   STR            R1, [R5, #16]
DELAY_MS(500);
 080001E4   LDR            R3, [R4, #16]
 080001E6   MOV.W          R3, #0x01F4
 080001EA   LDR            R2, [R4, #16]
 080001EC   SUBS.W         R3, R3, R2, LSR #16
 080001F0   BNE            0x080001EA                    ; <main>+0x52
GPIOC->BSRR = GPIO_BSRR_BS13;
 080001F2   STR            R6, [R5, #16]
DELAY_MS(500);
 080001F4   LDR            R3, [R4, #16]
 080001F6   MOV.W          R3, #0x01F4
 080001FA   LDR            R2, [R4, #16]
 080001FC   SUBS.W         R3, R3, R2, LSR #16
 08000200   BEQ            0x080001E2                    ; <main>+0x4A
 08000202   B              0x080001FA                    ; <main>+0x62
На мой взгляд и придраться не к чему. А на ваш?
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=4704154#p4704154"]А на ваш?[/uquote]Будьте проще.

Код: Выделить всё

static void Delay(uint32_t ms)
{
  SysTick->CTRL;
  while(ms) ms -= SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos;
}
Только без инициализации счётчика таймера точность этого плюс-минус трамвайная остановка.
Последний раз редактировалось VladislavS Сб апр 12, 2025 11:12:19, всего редактировалось 1 раз.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4704252#p4704252"]Будьте проще.[/uquote]
интриги нет.
VladislavS писал(а):Только без инициализации счётчика таймера точность этого плюс-минус трамвайная остановка.
органолептически отличить одну миллисекунду от двух проблематично. стало быть, точность приемлема :-)
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

А одну от нуля?

Вот так хоть корректно будет. А разница одна ассемблерная команда.

Код: Выделить всё

static void Delay(uint32_t ms)
{
  if(ms>0)
  {  
    SysTick->VAL = SysTick->LOAD;
    while(ms -= SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos);
  }
}
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

надо еще SysTick на NULL проверять. а то мало ли..
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Проверку ms на ноль компилятор уберёт в случае задания задержки константной. А вот если задержка в рантайме меняется, то эта проверка уже абсолютно необходима. А если ещё и прерывания поверху работают...
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

если 0 прилетел в дилей, то это само по себе проблема похлеще, чем отсутствие проверки.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Почему вы исключаете нулевую задержку?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

потому, что это тяжкий просчет где-то в области реализации, а то и архитектуры. ноль, он должен откуда-то взяться и там, очевидно, происходят отвратительные вещи.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

Тяжкий просчёт это написать функцию и не реализовать правильную работу при всех возможных значениях её параметра. Не надо думать будет или нет ноль использоваться, просто напишите и протестируйте. Это единственно правильный подход к программированию.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18560
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение ARV »

Всё-таки двойные стандарты... HAL ругают за избыточность, а ведь там всего лишь все "функции", не задумываясь, проверяют все-все-все на допустимость...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 431
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: STM32 новичку в ARM что к чему

Сообщение HardWareMan »

[uquote="ARV",url="/forum/viewtopic.php?p=4704614#p4704614"]Всё-таки двойные стандарты... HAL ругают за избыточность, а ведь там всего лишь все "функции", не задумываясь, проверяют все-все-все на допустимость...[/uquote]
Ну ассерты там не просто так сделаны. В некоторых местах плохие входные данные действительно могут порушить всё. Учитывая, что HAL рассчитан на всех, даже на начинающих глупцов - лучше перестраховаться.
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: STM32 новичку в ARM что к чему

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4704614#p4704614"]Всё-таки двойные стандарты... HAL ругают за избыточность, а ведь там всего лишь все "функции", не задумываясь, проверяют все-все-все на допустимость...[/uquote]Причём тут проверка на допустимость? Функция должна правильно работать при всех значениях, которые можно подать ей на вход. Правильная работа функции это главное. Оптимизация это последний шаг. Вон a5021 дооптимизировался - наплевал на инициализацию счётчика и получил, что задержка может скакать до 1 мс в минус.

Что вы собрались оптимизировать в функции, которая в блокирующем режиме ничего не делает? Одну ассемблерную команду зажали пожертвовав функционалом? Это проблема!

Можно, например, ограничить этой функции параметр на этапе компиляции, но так его нельзя будет менять в рантайме.

Код: Выделить всё

template <uint32_t ms>
void Delay()
{
  static_assert(ms>0, "Wrong ms");
  SysTick->VAL = SysTick->LOAD;
  auto ms_ = ms;
  while(ms_ -= SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos);
}
Мы сильно ограничили функционал и не приобрели ничего взамен, так как в константном применении компилятор сам бы выкинул проверку.

"Преждевременная оптимизация — корень всех зол " - Д.Кнут.

Добавлено after 37 minutes 1 second:
Кстати, в первоначальном варианте от a5021 эта проверка тоже есть, просто она не бросается в глаза. А когда я написал так чтобы она стала очевидна и при нуле работала быстрее это вызвало протест. Почему?

Код: Выделить всё

// Можно её скрыть так
static void Delay(uint32_t ms)
{
  SysTick->VAL = SysTick->LOAD;
  while(ms)
    ms -= SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos;
}

// Или так
static void Delay(uint32_t ms)
{
  SysTick->VAL = SysTick->LOAD;
  for(uint32_t i=ms; i; i -= SysTick->CTRL >> SysTick_CTRL_COUNTFLAG_Pos);
}
Для оптимизирующего компилятора это всё будет одно и то же.

Добавлено after 42 minutes 26 seconds:
[uquote="a5021",url="/forum/viewtopic.php?p=4704154#p4704154"]

Код: Выделить всё

DELAY_MS(500);
 080001E4   LDR            R3, [R4, #16]
 080001E6   MOV.W          R3, #0x01F4
 080001EA   LDR            R2, [R4, #16]
 080001EC   SUBS.W         R3, R3, R2, LSR #16
 080001F0   BNE            0x080001EA
На мой взгляд и придраться не к чему. А на ваш?[/uquote]А на мой есть. Сложная 32-битная команда вычитания. Можно от неё избавиться.

Код: Выделить всё

static void Delay(uint32_t ms)
{
  if(ms>0)
  {  
    SysTick->VAL = SysTick->LOAD;
    while(ms -= *((volatile uint16_t *)&SysTick->CTRL+1) );
  }
}
Изображение
изображение_2025-04-13_101757796.png
(13.53 КБ) 338 скачиваний
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4704635#p4704635"]Вон a5021 дооптимизировался - наплевал на инициализацию счётчика и получил, что задержка может скакать до 1 мс в минус.[/uquote]
отставить буйные фантазии. определяется дизайном:

Разрешение: 1 мс
Средняя погрешность: ±0.5 мс
Максимальная погрешность: до +1 мс
Точность: достаточная для большинства прикладных задач, кроме чувствительных к микросекундам.
VladislavS писал(а): Кстати, в первоначальном варианте от a5021 эта проверка тоже есть, просто она не бросается в глаза.
вы поэтому добавили бессмысленного коду, чтобы гарантированно бросалась?
VladislavS писал(а):Сложная 32-битная команда вычитания. Можно от неё избавиться.
не выравненный доступ и загромождает.
VladislavS писал(а):SysTick->VAL = SysTick->LOAD;
систик может использоваться шире и отдавать его только под задержки как-то не очень.
Ответить

Вернуться в «ARM»