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

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


 
Опции темы

Не стартует прошивка.

Непрочитано 05.06.2019, 14:02  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Не стартует прошивка.

Здравствуйте.
Есть чип stm32f103c8t6.
Сделал бутлодер с эмуляцией жесткого диска. В этом режиме он работает отлично. Прошивку заливаю через Win32DiskImager.

Бинарник из прошивки получаю по команде
Код:
arm-none-eabi-objcopy -O binary xxx.elf xxx.bin
Вот код перехода к основной программе.
Код:
//FLASH_DISK_START_ADDRESS =   0x08007000     /* Flash start address */
// 0x7000 bytes for bootloader

void GoToUserApp(void) {
	uint32_t appJumpAddress;
	void (*GoToApp)(void);

	appJumpAddress = *((volatile uint32_t*) (FLASH_DISK_START_ADDRESS + 4));
	GoToApp = (void (*)(void)) appJumpAddress;
	SCB-›VTOR = FLASH_DISK_START_ADDRESS;
	__set_MSP(*((volatile uint32_t*) FLASH_DISK_START_ADDRESS)); //stack pointer (to RAM) for USER app in this address
	GoToApp();
}

В основной программе изменил:
Код:
#define VECT_TAB_OFFSET  0x00007000U
Запись проходит успешно. CubeProgrammer подтверждает присутствие данных с адреса 0х08007000
но программа ни в какую не стартует. Ни лампочками не мигает ни в системе не определяется.
Использую HAL и SW4STM32.

Подскажите пожалуйста может я забыл где то адрес еще прописать??
Реклама:
worldmasters вне форума  
Непрочитано 05.06.2019, 14:30  
pambaru
Почётный гражданин KAZUS.RUN
 
Регистрация: 24.03.2007
Сообщений: 1,395
Сказал спасибо: 85
Сказали Спасибо 674 раз(а) в 393 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Для F103 использую вот это в загрузчике, нареканий не было:

PHP код:
#define MainStartArea 0x80004000

//jump to new vector table

__ASM void boot_jump(dword address){
   LDR SP, [R0]     ;Load new stack pointer address
   LDR PC, [R0, #4] ;Load new program counter address
}

void ExitToMain(void){
SCB-›VTOR=MainStartArea;
boot_jump(MainStartArea);
} 
Кстати, перед выходом, все прерывания запретили, которые разрешали?
А то может куда в прерывание улетает, которого более не существует?
pambaru вне форума  
Непрочитано 05.06.2019, 15:01  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от pambaru Посмотреть сообщение
Для F103 использую вот это в загрузчике, нареканий не было:

PHP код:
#define MainStartArea 0x80004000

//jump to new vector table

__ASM void boot_jump(dword address){
   LDR SP, [R0]     ;Load new stack pointer address
   LDR PC, [R0, #4] ;Load new program counter address
}

void ExitToMain(void){
SCB-›VTOR=MainStartArea;
boot_jump(MainStartArea);
} 
Кстати, перед выходом, все прерывания запретили, которые разрешали?
А то может куда в прерывание улетает, которого более не существует?
Ваш код аналогичен вроде бы тому что и у меня. Тут то все просто и понятно. Вопрос какие адреса и как вы меняли в основной программе?
Про прерывания думаю фигня потому что при запуске ничего не инициализируется если не нажата кнопка.

Код:
int main(void) {
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	if (HAL_GPIO_ReadPin(BOOT_MODE_GPIO_Port, BOOT_MODE_Pin) == GPIO_PIN_RESET) {
		GoToUserApp();
	} else {
		MX_I2C1_Init();
		MX_SPI1_Init();
		MX_USB_DEVICE_Init();
		MX_TIM4_Init();
		MX_TIM3_Init();

		HAL_TIM_Base_Start_IT(&htim3);
		MX_I2C1_Init();
		MX_SPI1_Init();
		MX_USB_DEVICE_Init();
		while (1) {
			asm("");
		}
	}
}
Единственное у меня в обоих случаях прерывание есть на таймер и обработка. Но я думаю VECT_TAB_OFFSET должен правильно определить новое прерывание основной программы.
Поставил перед переходом HAL_DeInit(); но на результат это не повлияло. (((
worldmasters вне форума  
Непрочитано 05.06.2019, 15:13  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 20
Сказали Спасибо 40 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Вот так у меня переход.
PHP код:
void jumpToUser(uint32_t usrAddr)
{
    NVIC-›ICER[0] = 0xFFFFFFFF;
    NVIC-›ICER[1] = 0xFFFFFFFF;
    NVIC-›ICER[2] = 0xFFFFFFFF;
    NVIC-›ICPR[0] = 0xFFFFFFFF;
    NVIC-›ICPR[1] = 0xFFFFFFFF;
    NVIC-›ICPR[3] = 0xFFFFFFFF;
    SysTick-›CTRL = 0x0;

    RCC-›CR=0x00000083;
    RCC-›CFGR=0;
    RCC-›CIR=0;

        uint32_t appJumpAddress;
        void (*GoToApp)(void);

        appJumpAddress = *((volatile uint32_t*)(usrAddr + 4));
        GoToApp = (void (*)(void))appJumpAddress;
        SCB-›VTOR = usrAddr;
        __set_MSP(*((volatile uint32_t*) usrAddr));
        GoToApp();
} 
sat_art вне форума  
Непрочитано 05.06.2019, 15:17  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Я так понимаю что в основной программе ничего менять с адресами не нужно?
worldmasters вне форума  
Непрочитано 05.06.2019, 15:23  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 20
Сказали Спасибо 40 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от worldmasters Посмотреть сообщение
основной программе ничего менять с адресами не нужно
Ну собирать для старта с нужного адреса нужно.
И еще момент - SCB-›VTOR в основной программе не должен инициализироваться.
обычно в SystemInit
PHP код:
SCB-›VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ 
sat_art вне форума  
Непрочитано 05.06.2019, 15:25  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 20
Сказали Спасибо 40 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Хотя Вы же
Сообщение от worldmasters Посмотреть сообщение
В основной программе изменил:
Код:
#define VECT_TAB_OFFSET 0x00007000U
sat_art вне форума  
Непрочитано 05.06.2019, 15:27  
sat_art
Вид на жительство
 
Регистрация: 27.11.2007
Сообщений: 434
Сказал спасибо: 20
Сказали Спасибо 40 раз(а) в 30 сообщении(ях)
sat_art на пути к лучшему
По умолчанию Re: Не стартует прошивка.

stm32f103xx_flash.ld или какой там у Вас используется

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
на
FLASH (rx) : ORIGIN = 0x08007000, LENGTH = 64K

Я вместо изменения этого файла использую
Цитата:
-Wl,-section-start=.isr_vector=0x08002000

Последний раз редактировалось sat_art; 05.06.2019 в 15:32.
sat_art вне форума  
Непрочитано 05.06.2019, 15:51  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не стартует прошивка.

Сообщение от sat_art Посмотреть сообщение
stm32f103xx_flash.ld или какой там у Вас используется

FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
на
FLASH (rx) : ORIGIN = 0x08007000, LENGTH = 64K

Я вместо изменения этого файла использую
Я файлик подправил ниче страшного. Все заработало. Спасибо за оперативную помощь...
worldmasters вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МК не стартует при подаче питания AVRtron AVR 58 02.05.2019 22:09
Прошивка STM32F105RBT6 не стартует без отладчика. Donker ARM 19 20.12.2018 01:44
Прошивка для Элект СГУ-120МП(200МП) нужна срочно xacho730 Аудиотехника 2 09.03.2018 18:23
Wireless Repeater WS-WN518W2 нужна прошивка Vizitka Автоматика и аппаратура связи 41 28.11.2015 17:16
nm8036 нужна прошивка russo_turisto Микроконтроллеры, АЦП, память и т.д 1 13.07.2010 13:52


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


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