Mar. 11th, 2020

eddy_em: (Default)
Получил намедни платки очередной управлялки ШД. Сдуру не завел BOOT0 на какую-нибудь ногу (+кондер) — понадеялся на возможность программного вызова USB-DFU. А вот фигвам! Вот такой код:
void Jump2Boot(){
    void (*SysMemBootJump)(void);
    volatile uint32_t addr = 0x1FFFC800;
//    sysreset();
    // Enable the SYSCFG peripheral.
    RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
    // reset systick
    SysTick->CTRL = 0;
    // disable all interrupts
//    __disable_irq();
//    __DSB();__ISB();
    // remap memory to 0 (only for STM32F0)
    SYSCFG->CFGR1 = 0x01;
    __DSB();__ISB();
    SysMemBootJump = (void (*)(void)) (*((uint32_t *)(addr + 4)));
    // set main stack pointer
    __set_MSP(*((uint32_t *)addr));
    SysMemBootJump();
}

при разных модификациях не работает! Несмотря на уйму ссылок в интернетах, где люди пишут, что у них все ОК.
Эх, так надеялся отладкой заниматься без всяких лишних приблуд. А придется, похоже, подпаивать разъемчик и втыкать st-link (который, кстати, почему-то несмотря на опцию --reset, после прошивки МК не сбрасывает).
Кстати, с утра бесполезно время убивал по другой причине: казалось бы один и тот же Makefile (но с немного разным порядком опций) давал совершенно иной результат, и прошивка не работала! А стоило опции поменять местами, как все пошло-поехало. Ну я просто вообще не понимаю…
UPD )

October 2025

S M T W T F S
   1234
567 89 1011
121314 15161718
19202122232425
2627 28293031 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 11th, 2026 05:07 pm
Powered by Dreamwidth Studios