Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Вс фев 18, 2018 20:13:26
а в каких случаях нужен бутлодер и что он загружает?
Загружает он прошивку в свободную часть МК, нужен, например для прошивки отличным от Spi интерфейсом (есть бутлоадеры для прошивки через виртуальный USB, Uart и тд). Сам бутлоадер это под программа которая принимает информацию по даному интерфейсу, и записывает её во флеш.
Пн фев 19, 2018 20:47:14
понятно. это можно назвать "нестандартные" способы прошивки.
Пн фев 19, 2018 21:31:26
Ну почему же не стандартные, вполне стандартные, о чём написано в даташите. Плюс ботлоадера в том что пользователь сам решает через какой интерфейс он хочет обновляться, и помимо этого позволяет переписывать прошивку контроллера постранично, т.е. захотели и переписали например только 3 страницу а не стирая весь кристалл как это обычно происходит при использовании SPI.
Вт фев 20, 2018 08:27:18
Jack-Sidr писал(а):Сам бутлоадер это под программа
Я бы сказал, что это не подпрограмма, а маленькая полноценная отдельная программа со своими прерываниями и полностью независимая от основной программы.
Вт фев 20, 2018 08:32:01
я когда спросил про возможность писать свою программу в область бутлодера, я предполагал, что там уже записаны стандартные загрузчики и их нельзя стирать.
но если пользователь пишет собственный загрузчик для конкретного интерфейса, то стандартным способом это называть нельзя, я так думаю.
Вт фев 20, 2018 09:09:33
я когда спросил про возможность писать свою программу в область бутлодера, я предполагал, что там уже записаны стандартные загрузчики и их нельзя стирать.
Действительно есть и такие, в которых уже заложен загрузчик, например СТМ32 или Мега с аппаратным USB, но стереть его вам никто не помешает.
но если пользователь пишет собственный загрузчик для конкретного интерфейса, то стандартным способом это называть нельзя, я так думаю.
И да и нет: то что в контроллере специально для этого предусмотрено место и возможность стартовать с него то это как стандартное решение(так разработчиком заложено), а то что пользователь туда положит это не стандартное(индивидуальное).
Вт фев 20, 2018 09:25:53
все теперь понятно.
но я спрашивал на всякий случай. у меня пока нет таких больших проектов, чтобы занимать область загрузчика.
два самых больших моих проекта занимают примерно 4 кБ - половину программной памяти. до области загрузчика еще далеко...
Вт фев 20, 2018 16:07:12
спасибо. почитал, интересно.
Вт фев 20, 2018 16:59:15
По этим ссылкам не рассмотрен вопрос таблицы адресов прерываний (для STM32). Если и бутлоадер и основная прошивка используют, например, прерывания одного и того же таймера (или любой другой периферии), то возникает коллизия обработчиков этого прерывания. У бутлоадера он один, у основной прошивки другой. А адрес обработчика прерывания указан в таблице адресов прерываний, находящейся по фиксированному адресу (0x08000004). А значит возникает необходимость ремапить таблицу прерываний в конце работы бутлоадера или в начале основной прошивки.
Ср фев 21, 2018 11:30:51
Вопрос по 32F0308Discovery (которая с F030). Погонял на ней пример с таймерами из сниппетсов "в лоб", без переделки. Теперь вопрос - если в нём имеется всё таки TIM2, что же тогда камень из себя представляет по железу?
Ср фев 21, 2018 14:05:19
По этим ссылкам не рассмотрен вопрос таблицы адресов прерываний (для STM32). Если и бутлоадер и основная прошивка используют, например, прерывания одного и того же таймера (или любой другой периферии), то возникает коллизия обработчиков этого прерывания. У бутлоадера он один, у основной прошивки другой. А адрес обработчика прерывания указан в таблице адресов прерываний, находящейся по фиксированному адресу (0x08000004). А значит возникает необходимость ремапить таблицу прерываний в конце работы бутлоадера или в начале основной прошивки.
В точку, как-то и забыл про это. Делается это так, сначала программы добавляется след учаток кода
- Код:
__set_PRIMASK(1);
SCB->VTOR = Application_address;
__set_PRIMASK(0);
Ср фев 21, 2018 14:38:01
Угу, это когда есть возможность ремапить саму таблицу
В Cortex M0, например, этого нельзя сделать. Более универсальный способ - скопировать таблицу прерываний в оперативку и ремапнуть оперативку на адрес 0x00000000
В конце бутлоадера:
- Код:
__disable_interrupt();
NVIC->ICER[0] = 0xFFFFFFFF;
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
/* Jump to application */
Jump_To_Application();
В начале основной программы:
- Код:
const Int32U *flash = (Int32U*)APPLICATION_ADDRESS;
Int32U *svt = (Int32U*)0x20000000;
// copying vector table from ROM to RAM
NVIC->ICER[0] = 0xFFFFFFFF;
for (int i = 0; i < 48; i++)
{
svt[i] = flash[i];
}
// remap SRAM to 0x00000000
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG->CFGR1 |= 0x00000003;
Ср фев 21, 2018 15:07:02
Круто. Спасибо!!!
Пт мар 09, 2018 10:29:21
Здравствуйте!
Мне необходимо подключить микроконтроллер STM32F103C8T6 к пору RS-232 компьютера.
Для этого использую микросхему MAX3232. При этом у нее остаются висеть в воздухе 2 входные ножки (в моем случае это 11 и 13).
Обычно в цифровых микросхемах неиспользуемые входа подсоединяют через резистор на плюс питания. По документации на микросхему MAX3232 вывод 13 внутри корпуса подключен через резистор к GND (мультиметром прозвонил действительно так - сопротивление резистора 5 кОм). А вывод 11 висит в воздухе.
По документации на микросхемы MAX232 (это у которых питание 5В) вывод 11 внутри корпуса подключен к +5В через резистор 400 кОм.
И у меня соответственно вопрос: подскажите, пожалуйста, куда и как подсоединять неиспользуемые входа микросхемы MAX3232? (к земле через резистор какого номинала, или может через резистор на +3,3В, а может оставить висеть в воздухе?).
Пт мар 09, 2018 10:54:23
Dentorol писал(а):И у меня соответственно вопрос: подскажите, пожалуйста, куда и как подсоединять неиспользуемые входа микросхемы MAX3232?
Выв.13 оставить в воздухе (он уже внутри подтянут), а выв.11 на любую шину питания, или соединить с выв.12.
Последний раз редактировалось
korob Пт мар 09, 2018 11:46:49, всего редактировалось 2 раз(а).
Пт мар 09, 2018 11:16:53
Спасибо за ответ!
а выв.11 на любую шину питания
Подсоединить напрямую? Или через резистор? Резистор какого номинала?
Пт мар 09, 2018 11:23:24
Напрямую.
Про "соединить с выв.12" это я поспешил.
Последний раз редактировалось
korob Пт мар 09, 2018 11:46:24, всего редактировалось 1 раз.
Пт мар 09, 2018 11:34:51
Но что-то я не решусь подключить 11 вывод напрямую к +3,3 В.
Наверное подключу к +3,3 В через резистор. Осталось только узнать номинал этого резистора?
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.