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

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

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

Сообщение VladislavS »

Причём тут циклы? Не, ну я же не могу запретить ходить по граблям и изобретать велосипед. Ваше право.
Спойлер

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

__BKPT(0);
GPIOA->BSRR = GPIO_BSRR_BS_0;
GPIOA->BSRR = GPIO_BSRR_BR_0;
__NOP();

bkpt 0x0000 
mov.w r3, #1207959552	; 0x48000000 
movs r2, #1 
str r2, [r3, #24] 
mov.w r2, #65536	; 0x10000 
str r2, [r3, #24] 
nop 

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

__BKPT(0);
*(uint32_t*)0x48000018 = GPIO_BSRR_BS_0;
*(uint32_t*)0x48000018 = GPIO_BSRR_BR_0;
__NOP();


bkpt 0x0000 
mov.w r3, #1207959552	; 0x48000000
mov.w r2, #65536	; 0x10000 
str r2, [r3, #24] 
nop 
Последний раз редактировалось VladislavS Вт май 10, 2022 18:46:07, всего редактировалось 3 раза.
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

*((uint32_t*)(0x40020C00))|=1<<24;
:))) не, ну в принципе, после раскручивания всех дефайнов в заголовочнике, так раз в конечном счете почти так и получается. Хотя слишком злоупотреблять такой записью не стоит. Пару-тройку раз попробовали - и хватит. Нужно запоминать текстовые обозначения регистров и битов.
А то был у меня один товарисчь, который упорно не желал учить язык Си, а пытался прогать СТМки на ассемблере. Когда 32F103 мучил, это еще бы ничего. А потом загорелся он 32H750 на асме ковырять - эт ваще атас. Постоянно донимал меня вопросами, какое смещение до регистра указывать. А я ж че, я на память цифер не помню, постоянно приходилось в мануалах адреса смотреть. Он пишет цифры, спрашивает, почему не работает. А это ведь надо залезть в мануал, посмотреть таблицу адресов, посмотреть номера битов, понять что не так и опять же перевести в цифры адресов и номеров битов... Пишешь на языке Си - не понимает, грит, рассказывай словами порядок действий. Вот и рассказываешь словами запись if(TIM15->SR & TIM_SR_UEV) ...
Так и здесь будет. На память цифры то мало кто запоминает.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4229664#p4229664"]В CMSIS определено достаточно много команд процессора.[/uquote] Определены инструкции ядра в CMSIS, но никакие не "команды" CMSIS. И автор вопроса не NOP() имел ввиду. Речь не шла о встроенных инлайн функциях реализующих АСМ.

Добавлено after 8 minutes 5 seconds:
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229677#p4229677"]А нужен ли в моём коде volatile?
У меня нет циклов где компилятор может оптимизировать код.[/uquote]
Вас это не должно волновать. Нужно просто писать код без разного рода граблей. И циклы тут вообще не причем. Если регистр не объявлен как volatile, то компилятор без всяких циклов вправе не читать его значение, а тупо брать последнее туда записанное в коде как неизмененную константу и без оптимизации. Компилятор ничего не знает про внешнюю модификацию регистров, если вы игнорируете volatile. Это особенно актуально с учетом того, что часть регистров данных периферии имеют один и тот же адрес при чтении и записи, хотя физически это разные регистры работающие либо с приемником данных, либо с передатчиком.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4229721#p4229721"]Определены инструкции ядра в CMSIS, но никакие не "команды" CMSIS.[/uquote]Не только. Есть полезные макросы, есть функции для работы с контроллером прерываний, системным таймером и т.д. Ту же функцию вызывающую ресет контроллера почему бы "командой" не назвать? Просто не надо буквоедствовать не по месту.
koeltrad
Потрогал лапой паяльник
Сообщения: 317
Зарегистрирован: Ср дек 09, 2020 18:38:07

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

Сообщение koeltrad »

[uquote="НовыйДень",url="/forum/viewtopic.php?p=4229707#p4229707"]Он пишет цифры, спрашивает, почему не работает.[/uquote]
В этом случае я пользуюсь программой STM32 ST-LINK Utility и смотрю состояние битов в регистрах.
Да, конечно, это только на начальном этапе делаю чтоб понять как всё работает.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="НовыйДень",url="/forum/viewtopic.php?p=4229707#p4229707"]ну в принципе, после раскручивания всех дефайнов в заголовочнике, так раз в конечном счете почти так и получается.[/uquote]
Почему "почти"? Точно так и получается.
Вот определение ЛЮБОГО порта.

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

typedef struct
{
  __IO uint32_t MODER;        /*!< GPIO port mode register,                     Address offset: 0x00      */
  __IO uint32_t OTYPER;       /*!< GPIO port output type register,              Address offset: 0x04      */
  __IO uint32_t OSPEEDR;      /*!< GPIO port output speed register,             Address offset: 0x08      */
  __IO uint32_t PUPDR;        /*!< GPIO port pull-up/pull-down register,        Address offset: 0x0C      */
  __IO uint32_t IDR;          /*!< GPIO port input data register,               Address offset: 0x10      */
  __IO uint32_t ODR;          /*!< GPIO port output data register,              Address offset: 0x14      */
  __IO uint32_t BSRR;         /*!< GPIO port bit set/reset register,      Address offset: 0x1A */
  __IO uint32_t LCKR;         /*!< GPIO port configuration lock register,       Address offset: 0x1C      */
  __IO uint32_t AFR[2];       /*!< GPIO alternate function low register,  Address offset: 0x20-0x24 */
  __IO uint32_t BRR;          /*!< GPIO bit reset register,                     Address offset: 0x28      */
} GPIO_TypeDef;

#define     __IO    volatile

#define PERIPH_BASE           0x40000000UL
#define AHB2PERIPH_BASE   (PERIPH_BASE + 0x08000000UL)
#define GPIOA_BASE            (AHB2PERIPH_BASE + 0x00000000UL)

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

Добавлено after 6 minutes 24 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4229728#p4229728"]Просто не надо буквоедствовать не по месту.[/uquote]
Как раз В ДАННОМ СЛУЧАЕ это очень по месту. Еще раз, автор вопроса имел ввиду совершенно другие "команды". Только поэтому я и прокомментировал таким образом.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4229737#p4229737"]Почему "почти"?[/uquote]volatile
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25122
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4229742#p4229742"]volatile[/uquote]
Не, я имел ввиду, что абсолютный адрес и обращение через указатель на структуру дадут идентичный результат. Про volatile я уже все сказал. Его обязательность в любом случае не обсуждается.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

А то был у меня один товарисчь, который упорно не желал учить язык Си, а пытался прогать СТМки на ассемблере. Когда 32F103 мучил, это еще бы ничего. А потом загорелся он 32H750 на асме ковырять - эт ваще атас.
Это часом не Ассемблер с ЛОРа или pcmax с Киберфорума или stm64 с Изиэлектроникса?
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

Скорее всего, он. Я не знаю, почему этот товарисчь нивкакую не желает изучить Си и использовать отладчик, а пишет на асме в слепую. Ну вот представляете, насколько сложно объяснять последовательность действий и разбирать его косяки на уровне словесного описания и чисел с адресами регистров и номерами битов. И совсем не понятно было, почему знакомство с H750 он начал с того, как записать "число во флеш через DMA". Причем, одно! одно число. Через DMA. Во флеш! на H750. Блин, если он начнет ковыряться с каким-нить USB на асме, я сойду с ума :)
Вероятно, это какой-то особый изощренный способ самоистязания - H750 на ассемблере вслепую.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

НовыйДень, про С - да, согласен: на асме портянки будут уж больно длинными, лучше на С или С++ код писать.
А вот про отладчик я категорически не согласен. Любой желающий может посмотреть, сколько всего у меня на гитхабе валяется. И все 100% моего кода отлаживались старыми добрыми способами, без этих ваших новомодных gdb или valgrind (ни тем, ни другим никогда не пользовался и не собираюсь).

Кстати, про CMSIS: там много чего полезного есть, но почему-то забыли про TRUE, FALSE и NULL! Так что приходится их в своих заголовочных файлах определять…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4230135#p4230135"]но почему-то забыли про TRUE, FALSE и NULL! Так что приходится их в своих заголовочных файлах определять…[/uquote]Что, всё так запущено? Compiler Exploer.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

почему этот товарисчь нивкакую не желает изучить Си и использовать отладчик, а пишет на асме в слепую.
Это-то еще нормально. Просто начинать надо с начала - простой контроллер, простые задачи. Если уж хочется ARM, то f103. И программы соответственно мигалка диодом, UART (чтобы хоть какая-то вменяемая отладка была), таймеры, прерывания. Примерно на этом этапе портянки станут достаточно длинными чтобы появилось желание уйти на Си.
Но тот Ассемблер с ЛОРа сначала полез в bitband, потом еще куда-то, потом нашел где-то H7 и пытался его прошить (зачем, если и возможностей f103 ему пока за глаза?!), какие-то экзотические режимы АЦП. Чтение документации? Не, это слишком сложно, проще по форумам побираться!
tonyk
Это не хвост, это антенна
Сообщения: 1309
Зарегистрирован: Вт ноя 19, 2019 06:10:18

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

Сообщение tonyk »

Хе, вот как выглядит прочитать входные сигналы с MCP23008 и записать выходные на FBD. Тут всё как на ладони. И отладчик не нужен ;)
Вложения
Screenshot_393.jpg
(34.72 КБ) 74 скачивания
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

Ну, тот товарисчь меня мучает через личные контакты :)) Да, вначале он F103 изучал. Потом на Алишке купил подешевке плату с H750VB и понеслась :) А там же ведь три тактовых домена, три разнотипных ДМА с мультиплексором, АЦПшки с дифференциальными входами, три. У меня аж голова закипела всё это словесно и цифрами адресов объяснять :)

Про любовь к нетрадиционным анальным способам Эдди уж всем известна :))) Это конечно его право, вытворять через заднее место, но... Чтобы хоть что-то узреть, что вовнутрях творится, нужно вначале запилить терминалку на уарте. А если начинающий до уарта еще не дошел, то это будет вообще мрак и тыкание слепого котенка. Всё, что щас начнет говорить Эдди, уже все тыщщу раз слышали, но! Но намного быстрее освоение пойдет, если заглянуть в регистры и биты через отладчик. Поскольку базовый SWD - это почти тот же УАРТ, только его настраивать не надо, всё работает искаропки. Понятно, что Эдди дальше F072 и не двигался, но тут то разговор идет за H750, в котором, даже после прочтения мануала, не всегда прям всё понятно, приходится пробовать на деле, а не тыкаться вот так вот, как описывал выше.

Да, для начинающего - отладчик, это самая полезная вещь! И Эдди может что угодно там твердить, но когда начинающий (а мы все полюбасу были начинающими) видит глазами всю внутрянку как на ладони, процесс понимания идет гораздо быстрее и толковее.

Про true анекдот был, не помню дословно, что-то типа
Как пишет начинающий: if (flag == TRUE) { ... }
Как пишет продвинутый: if (flag) { ... }

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

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

Сообщение VladislavS »

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

bool isKeyPressed() { return key_pressed?key_pressed=false,true:false; }
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

НовыйДень, чувак, ты лжешь, и даже не краснеешь!
Мне, у которого за горами более 15 лет кодинга на С, gdb и valgrind, мягко говоря, неприятны. А уж бедняга начинающий… Да он же от gdb просто в осадок выпадет!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Аватара пользователя
НовыйДень
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

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

Сообщение НовыйДень »

Ой, блин, Эдди, ты уже притомил своим однотипным "анально-огороженным" (твоё любимое слово) поведением. Да уже каждый в инете знает твоё нетрадиционное мышление. Хватит уже, заманало одно и тоже за десяток лет каждый раз видеть. Ты как-нить иначе вообще умеешь общаться, без вот этого тупого вечно недовольного брюзжащего настроя?
Вообще-то, "искаропки" всё там работает, даже настраивать ничего не надо, а если лично ты не умеешь и лично у тебя всё опять через жопу, то это не значит, что другие тоже должны не уметь и делать нетрадиционно. А то получается как тот чувак, который на ассемблере упорно порет H750 и так же кричит, зачем, дескать, ему Си изучать, вот дескать ничего больше не умею, это дескать сложно.
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

Ну, тот товарисчь меня мучает через личные контакты
Я так понимаю, послать его в man'ы, как сделали на форумах, вы по каким-то причинам не можете.
Про любовь к нетрадиционным анальным способам Эдди уж всем известна :))) Это конечно его право, вытворять через заднее место, но... Чтобы хоть что-то узреть, что вовнутрях творится, нужно вначале запилить терминалку на уарте.
Вполне стандартный способ. Во-первых, это отладка средствами самого МК, без костылей, которую в любом случае знать надо. Во-вторых, не всегда можно отладчик воткнуть.
Разбирался тут с gd32vf103, так вот, самодельный st-link его вообще не видел, а на ft232 видел, но скорость была что-то около байта в секунду. Зато прошивку через UART никто не отменял, а со временем я и специальную каракатицу собрал, которая и программатор, и отладчик, и ресет с бутом дергает.
Да, для начинающего - отладчик, это самая полезная вещь!
Его не так-то просто настроить в нормальном окружении. Нет, в каких-то специфичных IDE он может и сам запускаться, но начинать изучение с монструозных IDE, которые непонятно как работают и непонятно какую магию добавляют - не слишком хороший способ.
Точнее, если с грамотным учителем, который покажет как через IDE работу начать, а потом быстро его отбирает и показывает как это работает внутри - текстовый редактор, компилятор, makefile, openocd etc. Уже потом, когда флаги компилятора перестанут внушать ужас, можно разрешить IDE обратно, но теперь это должен быть осознанный выбор обучающегося.
Ну а NULL определено в stddef.h, ничего вручную дописывать не нужно.
Если оттуда ничего кроме NULL не нужно, проще все-таки описать руками.
А то получается как тот чувак, который на ассемблере упорно порет H750 и так же кричит, зачем, дескать, ему Си изучать, вот дескать ничего больше не умею, это дескать сложно.
У того чувака проблема не с нежеланием изучать Си или IDE, а с нежеланием изучать хоть что-то. Ни ассемблер он не изучал, ни адреса контроллера - ничего. Не говоря о том, что он бросается сразу решать проблемы вселенского масштаба, не умея складывать 2+2.
Эдди в этом обвинить нельзя. Не изучает "современные" средства? Так при его опыте и задачах этого уже и не требуется. Зато есть понимание как контроллер и его модули работают, и проблем освоить что-то новое не возникнет. Не то, что всякие ардуинщики и куберы, для которых если нет digitalWrite, сразу начинается паника и ступор. Если программатор не видит контроллера - паника и ступор. Если в программе из пяти строк возникает ошибка "на 350 строке не хватает запятой" - паника и ступор.
Аватара пользователя
Eddy_Em
Собутыльник Кота
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01
Контактная информация:

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

Сообщение Eddy_Em »

Пусть пишет на асме, если у него получается. Главное - чтобы хобби было в удовольствие.
И "из коробки" gdb даже в qt-creator надо еще настроить (но иногда бывает нужно просто чуть-чуть подправить код - зачем для этого жирную IDE запускать? Просто открыл в vim/mcedit/nano/etc, да сделал, иксы для этих целей даже запускать не нужно). В любом случае, для отладки МК ни gdb, ни тем более valgrind не пригодны. Я уже неоднократно об этом говорил: в сложных вещах ты просто не сможешь, поставив брейкпоинт, найти проблему (тот же USB уже отвалится, да и с I2C или SPI так не проканает — нужен осциллограф или логанализатор). А элементарщину типа ШИМ'а или еще чего такого же простого и отлаживать-то не надо!
Вот, кстати, жаль, что ST не выпустили коллекцию сниппетов для более крутых МК. И если сниппеты под F0 можно еще на F1/F3 почти безболезненно портировать, то с H все намного сложней. С другой стороны, кому нафиг эти H нужны? Если мне нужен мощный камень, я беру одноплатник или мини-компьютер, а рилтайм делаю на простом МК (F0/F1/F3 - смотря какие ресурсы нужны), а не вожусь с этими убогими ртосями и lwIP.

P.S. Вот лично у меня 99.99% отладочных нужд возникает по собственной рукожопости: там пропустил символ, здесь попутал endianness, тут еще чего… В общем, просто внимательное чтение кода на следующий день позволяет решить большинство проблем. А если уж так сильно затупил с endianness, можно осциллографом или логанализатором посмотреть, что ты выплевываешь. Да, бывают всякие убогие протоколы, которые вручную при помощи DMA с таймером или ногодрыгом приходится реализовывать, но если строго подойти к чтению документации, особых проблем это не вызовет.

Вот, начал понемногу по вечерам мучить ИК-датчик MLX90632. Производитель выложил какой-то адский ад (типа "библиотека"): с флоатами и даже даблами! Естественно, все это нужно оптимизировать под целочисленные вычисления (работаю с STM32F103). А уж если будет сильно тормозить, таки перейду на одноплатник (в конечном продукте одноплатник и будет использоваться, т.к. там будет с десяток таких датчиков - никакой МК не потянет: там минимум ~7кБ ОЗУ нужно на каждый датчик для хранения калибровок и считанных данных).
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Ответить

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