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

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

Сообщение VladislavS »

[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]Я пытаюсь понять что за командами CMSIS происходит.[/uquote]Для этого достаточно посмотреть как это сделано в CMSIS. Ваш же код неправильный!
Реклама
Потрогал лапой паяльник
Сообщения: 317
Зарегистрирован: Ср дек 09, 2020 18:38:07

Сообщение koeltrad »

Почему неправильный? Светодиод на пине 12, порте D зажигается.
Тактирование включил, скорость выставил, На выход пин настроил.
ODR высокий уровень на пине настроил.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

volatile
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]Я пытаюсь понять что за командами CMSIS происходит.[/uquote]
В CMSIS нет никаких "команд". Применительно к адресам регистров имеет место быть простое ОПРЕДЕЛЕНИЕ КОНСТАНТ, которое позволяет препроцессору компилятора тупо заменить магические адреса на именованные константы. То есть на имена регистров из даташита. Поскольку регистры периферии организованы в структуры с базовым адресом домена и смещением, то вполне разумно было определить доступ к регистрам как указатель на структуру. Это никак не влияет на размер кода.

Добавлено after 4 minutes 44 seconds:
[uquote="koeltrad",url="/forum/viewtopic.php?p=4229609#p4229609"]уже есть железо.[/uquote]
Дело не в том, что у вас есть, а чем вы реально пользуетесь в дебаге. Есть смутное подозрение, что вы не подключились к ST-link-у девборды в среде, а продолжаете использовать симулятор.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4229646#p4229646"]В CMSIS нет никаких "команд".[/uquote]Вообще говоря, есть. В CMSIS определено достаточно много команд процессора. Тот же NOP, например.
Реклама
Потрогал лапой паяльник
Сообщения: 317
Зарегистрирован: Ср дек 09, 2020 18:38:07

Сообщение koeltrad »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4229644#p4229644"]volatile[/uquote]
А нужен ли в моём коде volatile?
У меня нет циклов где компилятор может оптимизировать код.
КРАМ писал(а):Есть смутное подозрение, что вы не подключились к ST-link-у девборды в среде, а продолжаете использовать симулятор.
Я выключил в настройках Update Target before Debugging может из за этого.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение 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

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

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

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

[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. Это особенно актуально с учетом того, что часть регистров данных периферии имеют один и тот же адрес при чтении и записи, хотя физически это разные регистры работающие либо с приемником данных, либо с передатчиком.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

Сообщение koeltrad »

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

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

[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]
Как раз В ДАННОМ СЛУЧАЕ это очень по месту. Еще раз, автор вопроса имел ввиду совершенно другие "команды". Только поэтому я и прокомментировал таким образом.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

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

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

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

Сообщение COKPOWEHEU »

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

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

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

Сообщение Eddy_Em »

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

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

Сообщение VladislavS »

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

Сообщение COKPOWEHEU »

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

Сообщение tonyk »

Хе, вот как выглядит прочитать входные сигналы с MCP23008 и записать выходные на FBD. Тут всё как на ладони. И отладчик не нужен ;)
Вложения
Screenshot_393.jpg
(34.72 КБ) 83 скачивания
Ответить

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