Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

stm32 свой bootloader

Непрочитано 02.05.2017, 11:48  
serb-radio
Гражданин KAZUS.RUN
 
Регистрация: 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,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

Если смещаете начальный адрес, не забывайте размер снижать на тот же объем данных. Иначе данные полезут туда, куда нельзя.
Easyrider83 вне форума  
Непрочитано 02.05.2017, 14:20  
serb-radio
Гражданин KAZUS.RUN
 
Регистрация: 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,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

С 103им проблем нет. Там все логично. А вот с 003/005 придется выпить не одну бутылку, чтобы заставить его работать. Там надо вектора прерываний копировать в память, а потом их ремапить. Ой больно это было...
Easyrider83 вне форума  
Непрочитано 02.05.2017, 17:48  
serb-radio
Гражданин KAZUS.RUN
 
Регистрация: 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.RUN
 
Регистрация: 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.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
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,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: stm32 свой bootloader

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

подскажите, в настройке линкера и в проге что я делаю не так? в такой настройке нач адреса проги, она не стартует. Где мне прописать начало бутлоадера а где начало рабочей программы? не пойму тогда или, если не жалко, пример скиньте, буду сам разбираться, спасибо
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 02.05.2017, 20:02  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
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, время: 23:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.