ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
12 ноября
1611547 Топик полностью
IBAH (Вчера, 22:04, просмотров: 223)
Катастрофия!!! Код записи во FLASH, Который прекрасно работал и на STM32F103 и на GD32F103, ушел в продакшен тысячей экземпляров. Перестал работать на свежекупленном GD32F103C8T6. Все в норме, схема стандартная... 
//
void WriteIntEEPROM(unsigned char* b, unsigned char* adr, unsigned short N)
  {
#if UseOTLADKA!=0
  putstrfifo0("\n\rвключить внутрений генератор\n\r");
  Delay(10);
#endif    
  {//включить внутрений генератор
  LL_RCC_HSI_Enable();
  //Wait till HSI is ready 
  while(LL_RCC_HSI_IsReady() == 0) {;}
  }
#if UseOTLADKA!=0
  putstrfifo0("\n\rзапретить прерывания\n\r");
  Delay(10);
#endif   
  __disable_irq(); // запретить прерывания
  //__disable_interrupt(); // запретить прерывания
  
  {//Разблокировка 
  FLASH->KEYR = FLASH_KEY1;
  FLASH->KEYR = FLASH_KEY2;
  }  
  
  {//Стирание страницы flash
  while (FLASH->SR & FLASH_SR_BSY);
  if(FLASH->SR & FLASH_SR_EOP) { FLASH->SR = FLASH_SR_EOP;}
  FLASH->CR |= FLASH_CR_PER;
  FLASH->AR = (unsigned long)adr;
  FLASH->CR |= FLASH_CR_STRT;
  while (!(FLASH->SR & FLASH_SR_EOP));
  FLASH->SR = FLASH_SR_EOP;
  FLASH->CR &= ~FLASH_CR_PER;
  }
    
  {//Запись
  while (FLASH->SR & FLASH_SR_BSY);
  if(FLASH->SR & FLASH_SR_EOP) {FLASH->SR = FLASH_SR_EOP;}
  FLASH->CR |= FLASH_CR_PG;
  
  for(int i=0; i<((N+1)&0x3FE); i=i+2) 
    {
    *(volatile unsigned short*)(adr + i) = *((unsigned short*)(&(b[i])));
    while(!(FLASH->SR & FLASH_SR_EOP));
    FLASH->SR = FLASH_SR_EOP;
    }
  FLASH->CR &= ~(FLASH_CR_PG);
  
  }
  {//Блокировка
  FLASH->CR |= FLASH_CR_LOCK;
  }
  
  __enable_irq();
  //__enable_interrupt();
  return;
  }


//

Доходит до __disable_interrupt();, дальше проверить не могу.


Кейловским дебагером вижу останов на адресе 0x08000580. Как искать проблему?