Код: Выделить всё
void Jump2Boot(){
void (*SysMemBootJump)(void);
volatile uint32_t addr = 0x1FFFC800;
for(int i = 0; i < 7200000; ++i) nop();
USB->BCDR &= ~USB_BCDR_DPPU; // deactivate pullup
for(int i = 0; i < 7200000; ++i) nop();
//sysreset();
// reset systick
SysTick->CTRL = 0;
// disable all interrupts
__disable_irq();
NVIC->ICER[0] = 0xffffffff;
NVIC->ICPR[0] = 0xffffffff;
__DSB();__ISB();
// Enable the SYSCFG peripheral.
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
// 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();
}(уж ждать-то больше некуда). Бесполезно:
Код: Выделить всё
[2008912.252304] usb 1-7: USB disconnect, device number 17
[2008912.252551] pl2303 ttyUSB0: error sending break = -19
[2008912.252767] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0
[2008912.252789] pl2303 1-7:1.0: device disconnected
[2008913.702173] usb 1-7: new full-speed USB device number 18 using xhci_hcd
[2008913.816199] usb 1-7: device descriptor read/64, error -71
[2008914.033219] usb 1-7: device descriptor read/64, error -71
[2008914.249225] usb 1-7: new full-speed USB device number 19 using xhci_hcd
[2008914.363118] usb 1-7: device descriptor read/64, error -71
[2008914.585212] usb 1-7: device descriptor read/64, error -71
[2008914.687252] usb usb1-port7: attempt power cycle
[2008915.315111] usb 1-7: new full-speed USB device number 20 using xhci_hcd
[2008915.315270] usb 1-7: Device not responding to setup address.
[2008915.519278] usb 1-7: Device not responding to setup address.
Судя по разнице времени, оно таки не зависает, а пытается что-то сделать: активирует подтяжку USB и ничего не происходит.
ногу Boot0 установить в единицу нельзя: это не Boot1, на ней нет GPIO! Схемотехнически я положился на то, что в интернетах у народа "все работает", думал программно переходить в DFU, чтобы новый вариант прошивки записать, пока буду все это дело писать и отлаживать. Для stlink'а тоже выводы оставил, но что-то он глючит у меня: то ли провода плохие, то ли еще что (да и если вдруг повезет, и прошивка прошьется и проверится, то reset'а все равно не происходит и приходится вручную проводочком об землю).
Похоже, надо колхозить проводок между свободной ногой и boot0 + кондер на 0.1мкФ туда.