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

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

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563242#p3563242"]о... А нахрена он так стоит? Блин, че теперь на каждом файле править его вручную?[/uquote]Чтобы такие руко$опы не направили там лишнего.

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563242#p3563242"]Но у меня же уже где-то в этих подключенных файлах есть целые функции, которые частоту задают сами?! Они же все сделают по своему?[/uquote]Во-первых, подключенe файлa это не вызов функции. Ну лежат они там и лежат. Не вызовешь, линкер их в прошивку не добавит. Во-вторых, подключай только то что тебе нужно.

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563242#p3563242"]Ведь та же stm32f10x.h ссылается на кучу других файлов, которые в свою очередь подключают еще кучу своих файлов. и уже концов не найдешь. Запутался я в них.[/uquote]Может стоит подумать о другом роде деятельности, если в простом stm32f10x.h теряешься?
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563242#p3563242"]о... А нахрена он так стоит? Блин, че теперь на каждом файле править его вручную?[/uquote]
Зависит от IDE, но это могут быть просто read-only линки на файлы, естественно их менять не рекомендуется, потому что эти хедеры разделяются между разными проектами и можно легко что-то поломать. Лично я сразу после создания проекта конверчу его в stand-alone, т.е. все эти стандартные хедеры переносятся непосредственно в проект и можно делать с ними что угодно.
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

VladislavS писал(а):Чтобы такие руко$опы не направили там лишнего.
Для каких тогда рукожопов там есть такие строки?

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

[b]/* Uncomment the line below according to the target STM32 device used in your
   application 
  */[/b]

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) 
  /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */
  /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  
  /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */
  /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  
  /* #define STM32F10X_HD */     /*!< STM32F10X_HD: STM32 High density devices */
  /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  
  /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */
  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif

VladislavS писал(а):Не вызовешь, линкер их в прошивку не добавит.
Т.е. если я использую имена регистров, которые есть в stm32f10x.h, то только эти его строки будут включены в мой скомпилированный файл?
VladislavS писал(а):Может стоит подумать о другом роде деятельности,
Если не хотите помочь, зачем тогда вообще писать?
Разобраться в нашей жизни можно во всем. Даже в квантовой механике. Были бы толковые учебники и учителя. А то у нас последнее время учителя пошли уровня ютуба и пиндосовских систем образования, уже кучу быдла научили.

Добавлено after 4 minutes 33 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3563253#p3563253"], т.е. все эти стандартные хедеры переносятся непосредственно в проект и можно делать с ними что угодно.[/uquote]

Так я их скопировал в папку проекта. Они только к этому моему проекту и относятся. Вот же ж заморочили все... :facepalm:

Добавлено after 1 hour 48 minutes 34 seconds:
Хотелось бы также хоть чуток въехать в понимание типов команд THUMB и THUMB2. я скачал типа шпаргалки на них, но там же ассемблер!? Надо ли вообще в них понимать и для чего они нужны, если я не собираюсь на ассемблере писать. Также, как и конкретно разбираться в отладке на ассемблере. Общие представления об ассемблере после 8 битных МК у меня остались, не хотелось бы на нем очень жестко сосредотачиваться. :dont_know:
Станислав
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563300#p3563300"]Для каких тогда рукожопов там есть такие строки?[/uquote]макросы можно определить и при сборке в строке параметров компилятора, будет выглядеть чем-то вроде -DSTM32F10X_LD для gcc.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563300#p3563300"]Т.е. если я использую имена регистров, которые есть в stm32f10x.h, то только эти его строки будут включены в мой скомпилированный файл?[/uquote]они тоже не будут "включены". Имена регистров там - просто макросы, препроцессор их сразу раскроет непосредственно в адреса, нафига ему имена нужны?
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3563300#p3563300"]Хотелось бы также хоть чуток въехать в понимание типов команд THUMB и THUMB2. я скачал типа шпаргалки на них, но там же ассемблер!? Надо ли вообще в них понимать и для чего они нужны, если я не собираюсь на ассемблере писать.[/uquote]для общего развития и отладки можно посмотреть, чего это там такое.
Реклама
Эиком - электронные компоненты и радиодетали
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Блин. Точно.
Так если у меня ИНКЛУДЕ какая-то библиотека, то это еще не значит, что она свой код добавит в прошивку. Это значит, если я никаких функций из них не вызвал, то и не включил в прошивку.
В итоге, можно не заморачиваться, если не полагаться на "заводские" предложенные настройки тактирования, то можно идклудить (подключить) только один файл, где мнемоники регистров описаны для удобства же написания кода. И дальше все настраивать самому.

З.Ы. В АВРовских микроконтроллерах было довольно удобно пользоваться сразу включенной в исходник (на ассемблере) таблицей прерываний, но те, которые не использовались были просто закомментированы. Итого, был шаблон любого кода, где все включено. И если что-то понадобилось, то просто было. Здесь тоже так можно сделать или смысла нету?
Станислав
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

оно как бы так и есть обычно - все обработчики прерывантй объявлены с атрибутом weak. Т.е. если линкер не найдет таких символов в объектных файлах, будут использоваться эьи пустые заглушки.
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

/простите, исправил пост... Понаписал всякой ерунды и лучше спать пойти в 3 утра. /

После довольно дотошного ковыряния файла stm32f10x.h дошла до меня одна суть... :shock:

Вот так надо писать:

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

RCC -> CR |= RCC_CR_HSEON;
и все это есть в этой библиотеке. Поэтому надо разобраться только с этой либой, языком Си и рефренсмануалом. Все!
Станислав
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Сообщение Sergi »

Еще надо не забыть даташит на камень, там есть таблица альтернативных функций пинов. Ее нет в рефмануале. Понадобится для регистров AFIO[].
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Все равно туплю.
:cry: :facepalm:

Написал простенькую программку и залил ее в МК. Не работает. Ладно, давай ее дебажить с помощью тогоже SWD. Не получается. Оказывается, что моя прогармма не хочет ничего менять в регистрах, которые я прописал.
Выключил SWD и поставил дебажить виртуально, используя симулятор.
Так если в первом случае, он начинал с MAIN выполнять, то во втором случае, он начинает выполнять с функции SystemInit из файла system_STM32f10x.c!
Но почему?! Я же ее не вызывал.

Короче эта функция начинает свою работу и зависает крутиться в цикле на 998 строке. Ждет, когда запуститься HSE! И при этом в регистрах ничего не меняется!

Я хочу, чтобы он не лез туда, куда я не хочу. Что я делаю не так, чтобы запустить свою маленькую программку?
Спойлер

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

# include "stm32f10x.h"

void InitAll (void)
{
	//RCC->CR = RCC_CR_HSION;                                // Это я пробовал уже сам включить то, что мне надо
	//while (~(RCC->CR & RCC_CR_HSIRDY))
	//{
	//}
	
	RCC->CFGR = 0x00;
	GPIOA->CRL &= ~(GPIO_CRL_CNF0|GPIO_CRL_CNF1|GPIO_CRL_CNF2|GPIO_CRL_CNF3|GPIO_CRL_CNF4|GPIO_CRL_CNF5|GPIO_CRL_CNF6|GPIO_CRL_CNF7); // 7 pins GPIO Out
	GPIOA->CRL |= (GPIO_CRL_MODE0_1|GPIO_CRL_MODE1_1|GPIO_CRL_MODE2_1|GPIO_CRL_MODE3_1|GPIO_CRL_MODE4_1|GPIO_CRL_MODE5_1|GPIO_CRL_MODE6_1|GPIO_CRL_MODE7_1); // 7 pins out 2 MHz max
	RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // GPIOA clock enable
	
	return;
}





int main (void)
{
	
	InitAll ();
	
	GPIOA -> BSRR = (GPIO_BSRR_BS0|GPIO_BSRR_BS2|GPIO_BSRR_BS4|GPIO_BSRR_BS6);
	
	
	while (1)
	{
	}
}	
		

Станислав
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564014#p3564014"]Ладно, давай ее дебажить с помощью тогоже SWD. Не получается. Оказывается, что моя прогармма не хочет ничего менять в регистрах, которые я прописал.
Выключил SWD и поставил дебажить виртуально, используя симулятор.[/uquote]
Если программа не хочет ничего менять в регистрах, нужно искать причину, а не переключаться на симуляторы. А причина очевидна, тактирование порта нужно включать до того, как пишешь в его регистры, а не наоборот.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

:shock:

Я почему-то был уверен, что именно наоборот! Блин, где я это мимо пропустил?
Ведь же логично, что пока тактирование не включишь, то порт не заработает, но и зачем включать тактирование, если я еще не настроил порт?! А что если он у меня там на выход чего-нибудь замкнет?

Странно. странно... :dont_know:

Добавлено after 58 seconds:
З.Ы. Блин, сразу все заработало в железе... Я в шоке.
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564014#p3564014"]Так если в первом случае, он начинал с MAIN выполнять, то во втором случае, он начинает выполнять с функции SystemInit из файла system_STM32f10x.c![/uquote]И в первом, и во втором случае сначала вызывается SystemInit, потом инициализация глобальных переменных, а уже потом main. Просто в железе оно не виснет как в симуляторе.

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564014#p3564014"]Но почему?! Я же ее не вызывал.[/uquote]Посмотри внутрь стартапа!!!
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Стартап это который startup_stm32f10x_md.s?

Там ассемблер. Сперва то, что он предлагает обозначить на второй вкладке (с визардом) про стек и кучу.
Потом идут вектора прерываний.
И вектор для РЕЗЕТ вызывает СистемИнит. ?
Станислав
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Вызывает SystemInit, затем main
Вложения
st.png
(6.6 КБ) 444 скачивания
Иван Сусанин - первый полупроводник :solder:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Ладно. Где толково описана библиотека CMSYS и все ее файлы в отдельности? Если можно на русском. ) И вообще информацию по начальной инициализации МК, в т.ч. и таблица прерываний и как ею потом тоже пользоваться.

Я вроде разобрался, как и что можно записывать в регистры МК. И где брать даже символьные обозначения тоже определился. И расписанные режимы, которые можно выставить в регистрах нашел в рефренсмануале. Как включить светодиодики на порту до меня тоже дошло. Пока не до альтернативных функций и не до обмена по разным интерфейсам.

Хочу понимать, что происходит при включении. и почему в итоге получаются включенными оба тактовых генератора и HSE и HSI? Или второй никогда не выключается, кроме режимов глубокого сна?

Добавлено after 2 minutes 22 seconds:
да, и где вы нашли, что сначала надо тактирование порта включать? )))
Станислав
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Если не включен HSI,то кто будет тактировать ядро для настройки HSE ?

Если не включить тактирование блока, то как он будет принимать данные с шины и выставлять свои регистры ?
Иван Сусанин - первый полупроводник :solder:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]Хочу понимать, что происходит при включении.[/uquote]Отладчиком прямо с вектора RESET пару раз до main пройтись - многое прояснится.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="Myp3ik",url="/forum/viewtopic.php?p=3564078#p3564078"]Если не включить тактирование блока, то как он будет принимать данные с шины и выставлять свои регистры ?[/uquote]Кажется он думает, что включение тактирования портов - это как подача на них питания, т.е. можно включить тактирование и на пинах появится мусор из не инициализированных регистров :) Реальная картина ближе к триггеру у которого отключают вход CLK по которому он защелкивает данные, т.е. если он уже что-то запомнил, то при отключении CLK текущий уровень на выходе никуда не денется.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Myp3ik писал(а):кто будет тактировать ядро для настройки HSE ?
Ну понятно, что изначально оно надо, но когда уже завели все от внешнего генератора, то можно же было и выключить внутренний? :dont_know:
VladislavS писал(а):с вектора RESET пару раз до main пройтись
Отладчиком в железе или в симуляторе? (тем более, в симуляторе он виснет в цикле). И еще не дает вручную бит поставить в порту.
Станислав
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]Где толково описана библиотека CMSYS и все ее файлы в отдельности?[/uquote]там файлов-то. Вообще CMSYS практически полностью состоит из описаний регистров и их возможных значений.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]И вообще информацию по начальной инициализации МК[/uquote]посмотреть на startup файл, там полтора килобайта всего
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]таблица прерываний и как ею потом тоже пользоваться[/uquote]изначально инициализируется в том же startup-е, потом нужные обработчики просто назвать так же, как и там, линкер их подхватит. А вот "как пользховаться" - читать RM по контроллеру прерываний и конкретной периферии.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]почему в итоге получаются включенными оба тактовых генератора и HSE и HSI?[/uquote]кто-то включил HSE и не выключил HSI :dont_know:
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]Или второй никогда не выключается, кроме режимов глубокого сна?[/uquote]если от него ничего не тактируется - можно выключить.

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564062#p3564062"]да, и где вы нашли, что сначала надо тактирование порта включать? )))[/uquote]уже не помню, где это описано. Если кратко - до подачи тактирования на конкретную периферию можно смело считать, что ее для ядра вообще не существует, как и принадлежащих ей регистров. При этом подача тактирования не означает, что периферия начала работать - она просто "появилась", а включать (после настройки) ее надо отдельно, для чего есть соответствующие биты в регистрах.

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3564087#p3564087"]когда уже завели все от внешнего генератора, то можно же было и выключить внутренний?[/uquote]так выключи :dont_know: или контроллер вдруг сам должен догадаться, что программисту HSI больше не нужен?
Ответить

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