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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

afz писал(а):Можно "мигать" и другими способами, например прямой записью в GPIOC->ODR, или записью в старшие 16 битов GPIOC->BSRR. Опять же, "магические числа", но без них не прочувствуешь, как себя ведут эти самые GPIO.
Это я уже читал где-то. Либо наложением масок как в обычной АВР использовать регистр ODR либо через бит-бандинг, использовать регистр BSRR, который разделен пополам, либо его младшие для установки бита, а второй регистр BRR, его младшие для сброса (работает эта байда в два раза быстрее примерно).

ПО Рефренс Мануалу, он вроде как и у АВРок написан, но только страниц не 200, а 1070. И в нем описан каждый регистр. Его вроде как рекомендовали читать выборочно, занимаешься АЦП, открыл раздел, почитал и т.д. Весь читать бессмысленно, все равно не запомнишь.

И да, даже с магическими цифрами, но Ваш код выглядит намного проще. :beer:

Добавлено after 6 minutes 46 seconds:
И программатор заработал из Кеейла! Спасибо огромное!

Добавлено after 4 minutes 48 seconds:
И отладка пошаговая работает! Как необычно тыкать F11 и наблюдать за самой платой. ))

З.Ы. Все равно информация в голове уляжется и я пойму, как все это просто.
Станислав
Реклама
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

СКАЗОЧНИК писал(а):Его вроде как рекомендовали читать выборочно, занимаешься АЦП, открыл раздел, почитал и т.д. Весь читать бессмысленно, все равно не запомнишь.
Угу, но бегло просмотреть, что там есть, все-таки, полезно. А так - да, занялся чем-то конкретным - теми же GPIO - открыл нужный раздел, и читай до полного просветления.
СКАЗОЧНИК писал(а):И отладка пошаговая работает! Как необычно тыкать F11 и наблюдать за самой платой. ))
Это в АВР дико не иметь возможности пройтись по своей железке с отладчиком, а в STM32 все ОК!

Да, а начинать проект в Кейле ты научился? В смысле, накидал в Manage Run-Time Enviroment всё, что нужно, а далее просто включил в начало своей программы

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

#include "RTE_Components.h"
#include "stm32f10x.h"
и вперед! Так?

Добавлено after 23 minutes 55 seconds:
СКАЗОЧНИК писал(а):ПО Рефренс Мануалу, он вроде как и у АВРок написан, но только страниц не 200, а 1070.
Э-э-э, а RM-то у тебя старый! Новый RM0008 - ревизия 20, декабрь 2018, 1134 страницы. Welcome to st.com
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="afz",url="/forum/viewtopic.php?p=3554346#p3554346"]Это в АВР дико не иметь возможности пройтись по своей железке с отладчиком, а в STM32 все ОК![/uquote]
https://www.tme.eu/ru/details/atatmel-i ... _SEALw_wcB
http://easyelectronics.ru/vnutrisxemnay ... g-ice.html
В чем проблема то? :tea:
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3554401#p3554401"]В чем проблема то? :tea:[/uquote]

В внушительной разнице между дебагом арм и псевдо в 8ми битных пЫк/авр ...
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

afz писал(а):SPL уже всё.
У нее статус Active. https://www.st.com/content/st_com/en/pr ... 32054.html
Думаю понимаете что это значит?

Ярослав555, не все AVR поддерживают JTAG, а те что поддерживают требуют его включения через фьюзы. Это не очень удобно.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18791
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Мурик писал(а):а те что поддерживают требуют его включения через фьюзы
требуют выключения. по умолчанию он всегда включен.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4473
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Можно не трогать JTAGEN-FUSE, а просто взвести в 1 JTD-бит в MCUCSR. Извините за влезание в эту тему. Просто почитываю её.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

отлаживал Хмеги (они тоже 8 битные) через PDI. Разница с стлинком - нельзя онлайн поставить точку остановки и нет лив-вотча. А так особой разницы не увидел. Зато в иаре у ст-линка бывают приколы что он неверно отображает значение переменной. Лечится перезалитием прошивки. может и ресет помогает, не пробовал.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

afz писал(а):Да, а начинать проект в Кейле ты научился? В смысле, накидал в Manage Run-Time Enviroment всё, что нужно, а далее просто включил в начало своей программы
Код:
#include "RTE_Components.h"
#include "stm32f10x.h"
и вперед! Так?
Нет. Я первые пару раз в Кейле начинал проект из кучи разных источников. Более или менее разобрался как вообще его запустить. И сделать так, чтобы он мне компилировать начал без ошибок и предупреждений.
Один раз через КубМХ запустил. Но что-то пока не очень понравилось.
А теперь вот дали ссылку на форум, где расписано, как запускать проект новый (создавать), чтобы к нему CMSYS и тому подобное.
Manage Run-Time Enviroment это штука пока неизвестна мне. :) Видел такую штучку, но что-то там очень много галочек. Один раз понаставил и завалился всяким хламом...

Что говорить, я Си то по новой недавно начал изучать, т.к. лет 10 его не вспоминал даже. И еще путаюсь в понятиях, указателях, смене типов, объединяниях и т.д.
Станислав
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Мурик писал(а):У нее статус Active.
Да. Для F103. А для новых камешков она есть?
Мурик писал(а):требуют его включения через фьюзы. Это не очень удобно.
Это очень неудобно. Кроме того, JTAG есть только на "больших" МК с 40+ ногами, начиная с 16-й Меги. Основная и наиболее часто используемая Мега8 в пролёте. К тому же JTAG отъедает 4 ноги, которые выпадают из числа доступных. В общем, ерунда этот JTAG на АВР-ках...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Чет нету у меня в Pack Inctaller кроме выбора микроконтроллера или готовой платы ничего. А откуда тогда CMSYS выбрать?
После установки вылезет окно Pack Installer , если устанавливается с нуля необходимо установить паки CMSIS , ARM compiler и паки на линейки что будем использовать, наша STM2F4 series.
Это отсюда:
http://mcu.goodboard.ru/viewtopic.php?id=15

Добавлено after 2 minutes 45 seconds:
А.. справа вообще то что-то есть. И вроде установлено. что это я тогда их в папках не могу найти...

Добавлено after 2 minutes 48 seconds:
Все. Вроде нашел. Простите, разобрался. )) :oops: :oops: :oops:
Станислав
Мучитель микросхем
Аватара пользователя
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Сообщение Грендайзер »

Добрый день. Тут вот понадобилось запрограммировать AVR ку... Если честно опыта в контроллерах не очень... Но когда то вроде разбирался, вот и начал вспоминать... Сначала стал читать про ассемблер.. вроде что то вспомнил, ну и быстренько перешёл на си... И тут вот возник вопрос: в ассемблере мы в явном виде указываем на размер стека, а при программировании на си нет. Ну где то слышал, что мол там компилятор сам всё разрулит и поймёт. Но вот в Cube для stm32 есть настройка minimum heap size и minimum steck size. Зачем они нужны? Т.е. компилятор в случае чего сам увеличит это значение или как? Какие там числа то ставить и на что они влияют?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Грендайзер",url="/forum/viewtopic.php?p=3554688#p3554688"]Тут вот понадобилось запрограммировать AVR ку...[/uquote][uquote="Грендайзер",url="/forum/viewtopic.php?p=3554688#p3554688"]Но вот в Cube для stm32 есть настройка minimum heap size и minimum steck size.[/uquote]Что-то у меня когнитивный диссонанс от этих двух утверждений.

[uquote="Грендайзер",url="/forum/viewtopic.php?p=3554688#p3554688"]Зачем они нужны?[/uquote]Чтобы точно задать размер стэка и кучи.

[uquote="Грендайзер",url="/forum/viewtopic.php?p=3554688#p3554688"]Какие там числа то ставить и на что они влияют?[/uquote]Какие нужны для твоего приложения. Это только тебе знать.
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

ARV писал(а):требуют выключения. по умолчанию он всегда включен.
Я имел в виду что требует включения на время отладки.
Ярослав555 писал(а):Зато в иаре у ст-линка бывают приколы что он неверно отображает значение переменной.
Это проблема IAR, а не ST-Link.
В других средах такого нет.
Грендайзер писал(а):а при программировании на си нет.
Размер стека и кучи задается в конфигурации проекта в IDE.
СпойлерИзображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="Грендайзер",url="/forum/viewtopic.php?p=3554688#p3554688"]Т.е. компилятор в случае чего сам увеличит это значение или как? Какие там числа то ставить и на что они влияют?[/uquote]
нет, не увеличит. Насколько мне известно, в памяти обьекты размещает линковщик, а не компилятор. И потом линковщик знает размер только статических объектов в области глобальной видимости. У меня (в иаре) идет сверху куча, ниже стек, а все остальное область глобальной видимости (ну я так называю, по сути тоже куча). И вот если все глобальные переменные не влезут в эту область, то получим ошибку на этапе сборки. А если переменные вывалятся из стека то можно получить все что угодно - от хардфолта до непонятного изменения каких-то других переменных. Кубовская куча у меня отвечает за динамическое выделение. Если попытаться выделить больше чем указано - хард фолт.
Мучитель микросхем
Аватара пользователя
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Сообщение Грендайзер »

Если попытаться выделить больше чем указано - хард фолт
А что значит указано? В атмел студио или в эклипс я ведь вершину стека то не задавал. Там выходит компилятор сам догадывался, а у arm, выходит не умеет? И что будит если я в качестве размера стека задам значение размера оперативной памяти (ну и про кучу то же не забуду)?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

[uquote="Грендайзер",url="/forum/viewtopic.php?p=3554843#p3554843"]
Если попытаться выделить больше чем указано - хард фолт
А что значит указано? В атмел студио или в эклипс я ведь вершину стека то не задавал. Там выходит компилятор сам догадывался, а у arm, выходит не умеет? И что будит если я в качестве размера стека задам значение размера оперативной памяти (ну и про кучу то же не забуду)?[/uquote]
Я в ИАРе в АВР версии все указываю - и стек, и кучу. Как он может догадаться о размере стека, если он не анализирует никак очередность вызовов функций? если сделать рекурсию вызовов то можно любой стек положить. Вам просто всегда хватало стека по умолчанию.
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

Грендайзер писал(а):А что значит указано? В атмел студио или в эклипс я ведь вершину стека то не задавал.
Угу. Студия отдает под стек и кучу всю свободную оперативку.
Грендайзер писал(а):Там выходит компилятор сам догадывался, а у arm, выходит не умеет?
Догадываться не надо, линкер знает, сколько оперативки есть у камешка, под который идет сборка, компилятор занял сколько-то этой памяти под статическую область, остальное - стек и куча.

А вот для АРМов сделали по-другому, а именно - потребовали, чтобы программист сам указывал размеры стека и кучи. Зачем это сделали - непонятно, вероятно, так исторически сложилось. Впрочем, не везде. Какая-то из систем программирования - не помню, не то Coocox, не то EmBitz таки отдает под стек и кучу всю свободную оперативку.

А может так и правильно. Ведь у АРМ-ов могут быть разные виды оперативки, в разных областях. Даже и к STM32, которые посолидней, можно прицепить дополнительную SRAM, а к особо продвинутым STM-кам и SDRAM. Так, что, может быть, и не зря нас заставляют контролировать всю оперативку, включая стек и кучу...

Ну, и (для простых камешков, естественно, без всяких дополнительных оперативок) никто не мешает поправить скрипт линкера и уговорить его таки отдать всю имеющуюся оперативку под стек с кучей. Я в эти дела, правда, не вникал, но, теоретически, там ничего военного...
Грендайзер писал(а):И что будит если я в качестве размера стека задам значение размера оперативной памяти (ну и про кучу то же не забуду)?
Да без вопросов. Просто не забудь впоследствии исправить эти цифры, когда заведешь несколько новых статических переменных или массивов, иначе получишь ошибку.

Добавлено after 4 hours 39 minutes 55 seconds:
СКАЗОЧНИК писал(а):Manage Run-Time Enviroment это штука пока неизвестна мне. :) Видел такую штучку, но что-то там очень много галочек. Один раз понаставил и завалился всяким хламом...
Да там, собственно, ничего сложного. Запускаешь Кейл, давишь "проект", выбираешь New uVision project, в появившемся окошке Select Device for Target заходишь в STMicroelectronics (давишь на нем плюсик), находишь свой STM32F103C8, давишь ОК и кейл открывает окно Manage Run-Time Enviroment. В нем раскрываешь CMSIS, ставишь галочку на CORE, далее раскрываешь Device, ставишь галочку на Startup, раскрываешь StdPeriph Drivers и ставишь обязательные галочки Framework и RCC, а также галочки на то оборудование, с которым собираешься работать. Например, на GPIO. И все, дави ОК.

Далее, в дереве проекта раскрываешь Target1, давишь правой кнопкой на Source Group 1 и выбираешь Add New Item to Group..., далее давишь кнопу C file (c), пишешь свежепридуманное название для первого .с-файла твоего проекта, и вперед!

Откроется пустой файл. В нем пишешь

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

#include "RTE_Components.h"
#include "stm32f10x.h"
int main(void)
{
    while(1)
    {
    }
}
и пробуешь собрать проект. Должно быть чисто, если ты не забудешь Enter после последней фигурной скобки. :)

Теперь расрываешь в дереве проекта Device, находишь и дважды щелкаешь startup_stm32f10x_md.s и RTE_Device.h, внутри им смотреть необязательно, выберешь под текстом закладку Configuration Wizard и конфигурируй. На первой прдкрути, если надо, размер стека и кучи, на второй обязательно подкрути клоки - дефолтно там стоит High-speed External Clock 25 МГц, а у тебя кварц 8 МГц. Ну, может еще что подкрутить надо, по используемому оборудованию. Затем сохрани все это, пересобери еще раз, убедись, что все ОК и все, можешь творить!

Да, Target 1 и Source Group 1 можешь переименовать, как тебе нравится. Если не лень, конечно. Мне, например, лень...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

afz писал(а):Должно быть чисто, если ты не забудешь Enter после последней фигурной скобки.
Ага. С этим уже разобрался. Если после последней строки не поставить еще одну, то он Ворнинг выдает. Это было не сложно. Только там для F40xxx

А вот в том форуме, который выше мне сказали почитать, там описано создание проекта с нуля, практически тоже самое только без Run-Time Enviroment, но там все эти библиотеки добавлялись вручную. И по папкам раскладывались. Я их все нашел у себя и добавил.
Все работает и собирается.
И со своим МК разобрался STM32F103C8T6, что он медиум (или как там его, ну короче, не самый первый) и воткнул startup_stm32f10x_md.s
Когда открыл этот файл то внизу окна увидел эту вкладку с настройками, но пока ничего не стал там трогать. (где-то про это было уже описано тоже, там в файле какие-то специальные теги есть, по которым IDE типа Кейла может создать такого помощника для настройки.
Частоты его правил в свойствах проекта.
Таргет и СурсГруп переименовал. Мне не было лень. :)

Про стек еще более или менее понятно, а вот что такое Куча? Где почитать доступно?

Вообще, проекты у меня собираются хорошо (начальные пустые) без ошибок и предупреждений.

З.Ы. afz, даже не знаю, как Вас благодарить. :beer: Помощь, которая идет с Вашей стороны одна из самых своевременных и актуальных на данный момент. dosikus тоже помогает. :beer:
Да, вообще, всем спасибо, что наводите на путь истинный.
Станислав
Мучитель микросхем
Аватара пользователя
Сообщения: 479
Зарегистрирован: Вт июн 02, 2009 22:38:40
Откуда: Город-герой Москва

Сообщение Грендайзер »

Теперь всё понял. Всем большое спасибо за помощь. afz, отдельное спасибо за обстоятельный и развёрнутый ответ :beer:
Ответить

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