Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
moxpymm
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 56
1

STM32F030 bootloader и основное приложение

06.09.2016, 17:22. Просмотров 3568. Ответов 4
Метки нет (Все метки)

Написал boottooder для STM32F030. Boottooder умеет шить флешь микропроцессора через RS-485. После зашивания, boottooder делает прыжок по адресу основного приложения. Вопрос и проблема в следующем: как разместить таблицу векторов прерываний по адресу отличному от 0x00000000 в основном приложении?. До этого написал boottooder и основное приложение для STM32F2xx, так там для этого есть регистр SCB_VTOR.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2016, 17:22
Ответы с готовыми решениями:

Bootloader STM32F030
<Изображение удалено> Есть бутлоадер, но он не работает и меня попросили найти ошибку. Я первый...

Программирование STM32F030 с помощью встроенного bootloader
Выбрал, но еще не купил STM32F030! Остался один вопрос - смогу ли я на этом МК пользуватся...

stm32f030 UID
Добрый день! подскажите, есть ль ли в stm32f030 UID (Уникальный номер). в документации за него...

STM32F030 + АЦП
Господа, не сочтите за нубство, но может кто поделится рабочими примерами АЦП в STM32F030...

STM32F030 CRC
Добрый день! У меня не сходится аппаратный расчет CRC. Полином фиксированный 0x4C11DB7 Начальное...

4
moxpymm
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 56
06.09.2016, 18:43 2
Сам отвечу. На ядре M0 нет специального регистра для указания смещения таблицы векторов прерывания. Но есть возможность сделать так:
Код
void Remap_Table(void)
{
// Copy interrupt vector table to the ROM.
volatile uint32_t *VectorTable = (volatile uint32_t *)0x20000000;
uint32_t ui32_VectorIndex = 0;

for(ui32_VectorIndex = 0; ui32_VectorIndex < 48; ui32_VectorIndex++)
{
VectorTable[ui32_VectorIndex] = *(__IO uint32_t*)((uint32_t)FIRMWARE_START_ADDR + (ui32_VectorIndex << 2));
}

__HAL_RCC_AHB_FORCE_RESIT();

//  Enable SYSCFG peripheral clock
__HAL_RCC_SYSCFG_CLK_ENABLE();

__HAL_RCC_AHB_RELEASE_RESIT();

// Remap ROM into 0x0000 0000
__HAL_SYSCFG_REMAPMEMORY_SROM();
}
Нарыл на стишном форуме:https://my.st.com/public/STe2esommun...urrentviews=59
0
judshym
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
06.09.2016, 20:17 3
moxpymm, Ты попробовал так сделать? получилось?
Мы тоже делали свой загрузчик, только мы таблицу вектором переносили в начало ОЗУ и меняли настройки линкера.
Фрагмент пояснительной записки к проекту
в ядре Sortix M0 разработчики предусмотрели механизм, благодаря которому, на адрес 0x00000000 могут «отражаться» другие участки памяти, такие как начало flash-памяти, расположенное по адресу 0x08000000, и начало ОЗУ, расположенное по адресу 0x20000000.

Для того, чтобы изменить место расположение таблицы векторов прерываний, необходимо записать в регистр SYSCFG в биты MEM_MODE соответствующее значение, 0x00 для flash-памяти и 0x03 для ОЗУ

Так как в начале ОЗУ у нас будет располагаться таблица прерываний, то мы будем использовать оперативную память не с начала ОЗУ, а с адреса 0x20000100.
Код
// функция ремапа таблицы векторов прерываний
void SYSCFG_MemoryRemapConfig(uint32_t SYSCFG_MemoryRemap)
{
uint32_t tmpctrl = 0;
ossirt_param(IS_SYSCFG_MEMORY_REMAP(SYSCFG_MemoryRemap));
tmpctrl = SYSCFG->CFGR1;
tmpctrl &= (uint32_t) (~SYSCFG_CFGR1_MEM_MODE);
tmpctrl |= (uint32_t) SYSCFG_MemoryRemap;
SYSCFG->CFGR1 = tmpctrl;
}
Код
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SROM);

for (i=0; i<COUNT_VECTORS; i++) {
if (i == 3) {
*(__IO uint32_t*)(NVIC_VectTab_ROM+i*4) = *(__IO uint32_t*)(BOOTLOADER_START_ADDRESS+i*4);
}
else
{
*(__IO uint32_t*)(NVIC_VectTab_ROM+i*4) = *(__IO uint32_t*)(MAIN_PROGROM_START_ADDRESS+i*4);
}
}
0
moxpymm
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 56
07.09.2016, 10:45 4
Все работает без проблем)
0
tijoy
0 / 0 / 0
Регистрация: 02.10.2016
Сообщений: 1
05.10.2016, 18:18 5
Цитата Сообщение от moxpymm
Все работает без проблем)
Не сочтите за наглость, но можно посмотреть код вашего бутлоадера. Сейчас решил тоже запилить бутлоадер с возможностью прошивки по 485му. Никак не могу решить с чего начать. Встает вопрос какую софтину на стороне компа использовать. Писат ьчто-то самому или подстраиваться под готовый flash tooder от STM например.
0
05.10.2016, 18:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2016, 18:18

Перезагрузка tim17 на stm32f030
Доброго времени суток всем. Столкнулся с проблемой (вроде даже детской) которую не могу уже целый...

STM32F030 измерение частоты
Всем привет! Разрабатываю девайс один. Контроллер STM32F030R8(в данный момент в виде отладки STM...

STM32F030 Установка option byte
STM32F030 Установка option byte Собственно суть проблемы: надо установить биты, чтобы WDT и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru