Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 02.05.2017, 11:48  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию stm32 свой bootloader

Доброго всем дня! Пытаюсь сделать свой bootloader для STM32f103 через CAN. Но запнулся на конфиге линкера в Keil. Прога попросту не стартует. Перечитал кучу инфы, особо не помогло, в основном рассматривают IAR, а я в keil пишу.
Код:
int main (void)
{

	  __set_PRIMASK(1);
//	NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8002000);
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0002000);
	
	//NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
	jumpToApplication(0x8002000);	

	

	
	pll_init ();		
	pio_config ();																			
	// ðàçáëîêèðîâàíèå ôëýøà
	FLASH_Unlock();
	// èíèò ôëýøà
	EE_Init(); 
	//__disable_irq();
	
	for(i_tmp=0;i_tmp‹12;i_tmp++){set_sns_lines(i_tmp);}

	USART1_Init(2);	//9600
	RTC_conf ();
	
	while(1)
	{
		
	}



void jumpToApplication(uint32_t addr)
{
	typedef  void (*pFunction)(void);
	pFunction Jump_To_Application;
	uint32_t JumpAddress;
 
	JumpAddress = *(uint32_t*) (addr + 4);
	Jump_To_Application = (pFunction) JumpAddress;
	
	//	Initialize user application's Stack Pointer
	__set_MSP (*(vu32*) addr);
	Jump_To_Application();
}
Может чего подскажите, куда копать. Просто с бутлоадерами ковыряюсь впервые.
Миниатюры:
Нажмите на изображение для увеличения
Название: linker.jpg
Просмотров: 0
Размер:	103.3 Кб
ID:	113775   Нажмите на изображение для увеличения
Название: linker1.jpg
Просмотров: 0
Размер:	82.4 Кб
ID:	113776  
Реклама:
__________________
То, что нас не убивает - делает нас сильнее

Последний раз редактировалось serb-radio; 02.05.2017 в 11:52.
serb-radio вне форума  
Непрочитано 02.05.2017, 14:11  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Если смещаете начальный адрес, не забывайте размер снижать на тот же объем данных. Иначе данные полезут туда, куда нельзя.
Easyrider83 вне форума  
Непрочитано 02.05.2017, 14:20  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Попробую, в примерах такого не узрел, думал, линкер автоматически это делает
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 02.05.2017, 14:53  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

С 103им проблем нет. Там все логично. А вот с 003/005 придется выпить не одну бутылку, чтобы заставить его работать. Там надо вектора прерываний копировать в память, а потом их ремапить. Ой больно это было...
Easyrider83 вне форума  
Непрочитано 02.05.2017, 17:48  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: stm32 свой bootloader

а адреса векторов прерываний нужно помещать на величину памяти занимаемой бутлоадером от 0x00 или старта флэша? Т.е. по адресу 0x8002000
или 0x0002000?
Цитата:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8002000);
// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0002000);
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 02.05.2017, 17:54  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Сейчас так сделал:
Цитата:
pll_init ();
pio_config ();
// ðàçáëîêèðîâàíèå ôëýøà
FLASH_Unlock();
// èíèò ôëýøà
EE_Init();
//__disable_irq();

USART1_Init(2); //9600
RTC_conf ();
T8_config ();
set_led (50);




__set_PRIMASK(1);//îòêëþ÷èòü âñå ïðåðûâàíèÿ
// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8002000);
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0002000);
__set_PRIMASK(0);//âêëþ÷èòü âñå ïðåðûâàíèÿ

// NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x00);
jumpToApplication(0x8002000);


while(1)
{

}
Хочу помигать таймером светодиодиком в бутлоадере, но проц молчит. Что не так делаю. Размер в линкере скорректировал на величину бутлоадера
Миниатюры:
Нажмите на изображение для увеличения
Название: linker__.jpg
Просмотров: 0
Размер:	96.5 Кб
ID:	113785  
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 02.05.2017, 18:40  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Вы должны разместить свой будлоадер в том секторе, который не будет перезаписан загружаемой прогой. Лучше всего в последнем секторе. Документ PM0075 обязателен для прочтения!
Чтобы компилятор понимал, куда впихнуть каждую функцию, нужно в скрипте линкера создать секцию с адресом и размером последнего сектора, а все функции писать с атрибутом этой секции: __attribute__((section (".имя_секции"))) void Funct(void).
Теперь компилятор все функции бутлоадера разместит в последнем секторе флеша, причем, бутлоадер предварительно сам должен быть записан во флеш. А сама записываемая прога не должна превышать оставшегося размера.

Последний раз редактировалось NewWriter; 02.05.2017 в 18:50.
NewWriter вне форума  
Непрочитано 02.05.2017, 18:44  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Я кладу бутлодер всегда в начало флеши. Вектора копировать не надо.
Easyrider83 вне форума  
Непрочитано 02.05.2017, 18:54  
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: stm32 свой bootloader

подскажите, в настройке линкера и в проге что я делаю не так? в такой настройке нач адреса проги, она не стартует. Где мне прописать начало бутлоадера а где начало рабочей программы? не пойму тогда или, если не жалко, пример скиньте, буду сам разбираться, спасибо
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 02.05.2017, 20:02  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,509
Сказал спасибо: 401
Сказали Спасибо 2,218 раз(а) в 1,316 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Так все верно - вы смещаете код проги во флеше, и у вас весь код пишется не от начала флеша, а дальше. А МК стартует от начала флеша и не находит там ничего. Потому и не запускается. Если бутлоадер размещаете в начале, то пишите его как обычную прогу. То есть, начало флеша установите на его физическое начало (0ч8000000), и уменьшите размер секции до нескольких килобайт, которые и будут размером будлоадера
NewWriter вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение DS18b20 к STM32 aftaev ARM 85 22.11.2016 10:58
STM32 и 9 бит SPI... всё так плохо? st__1 Микроконтроллеры, АЦП, память и т.д 94 07.08.2012 21:05
Проблема с ST-LINK +KEIL + STM32 LionRJ Микроконтроллеры, АЦП, память и т.д 5 06.03.2012 17:21
Bootloader Atmega LSergM Микроконтроллеры, АЦП, память и т.д 0 23.12.2007 02:32


Часовой пояс GMT +4, время: 01:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot