Блокировка Cortex-M4
Я пытаюсь использовать DAPLink для поддержки микроконтроллера STM32L486, но обнаружил, что Cortex-M4 блокируется после сбоя алгоритма флеш-памяти и вызывает функцию инициализации флеш-памяти. Функция init очень проста, просто очистите флаги ошибок.
/*clear SR*/
FLASH_SR_REG = FLASH_SR_OPTVERR | FLASH_SR_RDERR | FLASH_SR_FASTERR
| FLASH_SR_MISEERR | FLASH_SR_PGSERR | FLASH_SR_SIZEERR
| FLASH_SR_PGAERR | FLASH_SR_WRPRTERR | FLASH_SR_PROGERR
| FLASH_SR_WRPRTERR | FLASH_SR_EOP;
Я также обнаружил, что это произошло при остановке сброса. swd_read_word(DBG_HCSR, &tmp)
получает 0x01090001
, Он запирает и не останавливается.
// need halt MCU for read right data from Peripher address space when power on
// Enable debug and halt the core (DHCSR <- 0xA05F0003)
if (!swd_write_word(DBG_HCSR, DBGKEY | C_DEBUGEN | C_HALT)) {
return 0;
}
// Enable halt on reset
//if (!swd_write_word(DBG_EMCR, VC_CORERESET)) {
// return 0;
//}
// Wait until core is halted
do {
if (!swd_read_word(DBG_HCSR, &tmp)) {
return 0;
}
} while ((tmp & S_HALT) == 0);
// Disable halt on reset
//if (!swd_write_word(DBG_EMCR, 0)) {
// return 0;
//}
Моя плата - это плата STM32 Nucleo-64 (NUCLEO-L476RG). MCU - это STM32L476. Вспышка пуста.
Тот же код работает на STM32F405. Это также микроконтроллер Cortex-M4. Чем отличается STM32L4xx?