Цитата(pan_oleg @ Mar 14 2008, 12:48)

Люди добрые, помогите с STM32 розобратся.
не могу ни одного примера запустить.
Я для начала отключил весь IAR стартап, благо что Cortex-M3 сам стек инитит.
И сразу отказался от ST библиотеки.
Для первого раза можно вообще не инитить сегменты ( не использовать начальные значения и не полагать что все глобальные переменные будут = 0 ) тогда код сильно упрощается и вы можете все проконтролировать
Код
uint32_t const __vector_table[]@".intvec" =
{
0x20002800, // стек в конец RAM
(uint32_t)main
};
__noreturn
void main(void)
{
RCC_APB2ENR_bit.IOPBEN = 1;
RCC_APB2ENR_bit.IOPAEN = 1;
// дальше надо проинитить нужные GPIO ноги и попробовать дернуть ногой
// это можно сделать и через окно регистров в IAR для пробы там удобно все сделано
в настройках линкера надо указать
entry symbol __vector_table
а icf файл для отладки в RAM у меня такой
Код
define memory mem with size = 4G;
define region RAM = mem:[from 0x20000000 to 0x200027FF];
do not initialize { section .bss };
place at start of RAM { section .intvec };
place in RAM { readonly, readwrite };
для флеша
Код
define memory mem with size = 4G;
define region ROM = mem:[from 0 to 0x7FFF];
define region RAM = mem:[from 0x20000000 to 0x200027FF];
do not initialize { section .bss };
place at start of ROM { section .intvec};
place in ROM { readonly };
place in RAM { readwrite };
для отладки в RAM еще mac файл для дебагера, но я использую GDB сервер и openocd, с J link должно быть проще, надо посомтреть как будет инитится стек и PC при старте и может не надо будет PC устанавливать.
Код
execUserReset( )
{
__message "RAM START";
__writeMemory32(0x20000000,0xE000ED08,"Memory"); // VTOR
__writeMemory32(0x05FA0001,0xE000ED0C,"Memory"); // Reset request
__writeMemory32(0x20000000,0xE000ED08,"Memory"); // VTOR
__writeMemory32(__readMemory32(0x20000004,"Memory") & (~1),0xB4,"Register"); //Set PC to entry point
//__writeMemory32(0x20002800,0x8C,"Register"); // main stack
}