Перейти к содержанию
    

1 minute ago, aaarrr said:

Потому что вы предоставили неверную информацию об идентичном поведении F746 и H743. Что же остается думать?

Погодите... Симптомы были идентичны. Под вскрывшейся неидентичностью вы что понимаете? То что F746 отреагировал на пропаивание, а H743 нет? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, MementoMori said:

Симптомы были идентичны.

И выводы о вине "перегрева".

 

1 minute ago, MementoMori said:

Под вскрывшейся неидентичностью вы что понимаете? То что F746 отреагировал на пропаивание, а H743 нет?

Да.

 

F746 и H743 настолько разные, что предположить одинаковое поведение после неспецифичного воздействия в виде перегрева просто невозможно. Остается плата и память, отсюда и первоначальные выводы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, aaarrr said:

F746 и H743 настолько разные, что предположить одинаковое поведение после неспецифичного воздействия в виде перегрева просто невозможно. Остается плата и память, отсюда и первоначальные выводы.

Всё же я перемонтирую H743 на оставшийся экземпляр платы, предварительно помыв ему ноги. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, MementoMori сказал:

P.S. Как думаете, тот факт, что контроллер испытывает емкостное влияние от прикосновения пальца к пластику чипа, означает, что непропай где-то в области питания, блокировочных конденсаторов? Линии sdram пропаяны, это точно - принудительно поданный на них меандр снимается осциллографом с пинов SDRAM/

Я бы проконтролировал осциллографом напряжения питания на выводах контроллера, в моменты сбоев или при касания чипа пальцем, на предмет увеличения звона или снижения напряжения. Если это плата куда упало +12, то по-хорошему стоит заменить конденсаторы, и танталы и керамику.

Так-то некорректная работа чипа при касании пальцем допустима, многие чипы например начинают сбоить при засветке мощным светодиодом - просвечиваются ик-излучением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, HardEgor said:

 

Так-то некорректная работа чипа при касании пальцем допустима, многие чипы например начинают сбоить при засветке мощным светодиодом - просвечиваются ик-излучением.

Шапочку из фольги надо смастерить)))

А вот вам еще загадка. Не хочу отдельную тему создавать.

 

Вот код

__STATIC_INLINE void DWT_Delay_us(volatile uint32_t microseconds)
{
  uint32_t clk_cycle_start = DWT->CYCCNT;

  /* Go to number of cycles for system */
  microseconds *= (HAL_RCC_GetHCLKFreq() / 1000000);

  /* Delay till end */
  while ((DWT->CYCCNT - clk_cycle_start) < microseconds);
}

Если залить отладчиком прошивку и запустить - все работает.

Если передернуть питание (то есть отправить в самостоятельное, не контролируемое отладчиком, плавание) - виснет. Опытным путем установлено, что виснет на цикле while.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, MementoMori сказал:

Если залить отладчиком прошивку и запустить - все работает.

Если передернуть питание (то есть отправить в самостоятельное, не контролируемое отладчиком, плавание) - виснет. Опытным путем установлено, что виснет на цикле while.

Отладчик наверное настраивает и запускает счетчик, чтобы отлаживать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, HardEgor said:

Отладчик наверное настраивает и запускает счетчик, чтобы отлаживать.

Там ещё была функция инициализации счётчика, её я тоже вызываю. Хм... Ч о интересно, при запуске через отладчик эта функция сразу же работает, даже если предварительно не инициализиоовать счётчик... Значит проблема в коде инициализации. Спасибо, теперь ясно, где ковыряться. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, MementoMori сказал:

Там ещё была функция инициализации счётчика, её я тоже вызываю. Хм... Ч о интересно, при запуске через отладчик эта функция сразу же работает, даже если предварительно не инициализиоовать счётчик... Значит проблема в коде инициализации. Спасибо, теперь ясно, где ковыряться. 

Так а чего ковырятся - сравнить регистры под отладчиком и с холодного старта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, HardEgor said:

Так а чего ковырятся - сравнить регистры под отладчиком и с холодного старта.

И понять, почему DWT_Init() не пишет в них нужные значения при холодном старте? Я это и имел в виду

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11.12.2020 в 21:42, MementoMori сказал:

Хм... Ч о интересно, при запуске через отладчик эта функция сразу же работает, даже если предварительно не инициализиоовать счётчик...

Само собой - отладчик включает. Буквально на днях создавал тему про этот счётчик: 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, jcxz said:

Само собой - отладчик включает. Буквально на днях создавал тему про этот счётчик: 

 

Почитал. Вроде как поднятая вами проблема у меня не стоит. Вот функция

uint32_t DWT_Delay_Init(void) {
  /* Disable TRC */
  CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; // ~0x01000000;
  /* Enable TRC */
  CoreDebug->DEMCR |=  CoreDebug_DEMCR_TRCENA_Msk; // 0x01000000;

  /* Disable clock cycle counter */
  DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; //~0x00000001;
  /* Enable  clock cycle counter */
  DWT->CTRL |=  DWT_CTRL_CYCCNTENA_Msk; //0x00000001;

  /* Reset the clock cycle counter value */
  DWT->CYCCNT = 0;

     /* 3 NO OPERATION instructions */
     __ASM volatile ("NOP");
     __ASM volatile ("NOP");
  __ASM volatile ("NOP");

  /* Check if clock cycle counter has started */
     if(DWT->CYCCNT)
     {
       return 0; /*clock cycle counter started*/
     }
     else
  {
    return 1; /*clock cycle counter not started*/
  }
}

В ней упомянутый вами бит перезапускается....

Что не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, MementoMori сказал:

Почитал. Вроде как поднятая вами проблема у меня не стоит. Вот функция

В ней упомянутый вами бит перезапускается....

У вас при отключении отладчика бит TRCENA не сбрасывается в 0?

Какой у вас отладчик/среда_отладки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, jcxz said:

У вас при отключении отладчика бит TRCENA не сбрасывается в 0?

Какой у вас отладчик/среда_отладки?

С отладчиком:

Регистр CoreDebug->DEMCR = 0x01000000,  регистр DWT->CTRL = 0x40000001

Без отладчика 

CoreDebug->DEMCR до функции  DWT_Delay_Init равен  0x00000000, после  0x01000000

DWT->CTRL до функции  DWT_Delay_Init равен  0x00000000, после  0x40000001

 

У меня китайский ST-Link, среда - Keil.


 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В F746 все немного по-другому.

Вот как оказывается надо было:

DWT->LAR = 0xC5ACCE55; // ВОТ ЭТОГО НЕ ХВАТАЛО

  /* Disable clock cycle counter */
  DWT->CTRL &= ~DWT_CTRL_CYCCNTENA_Msk; //~0x00000001;
  /* Enable  clock cycle counter */
  DWT->CTRL |=  DWT_CTRL_CYCCNTENA_Msk; //0x00000001;

  /* Reset the clock cycle counter value */
  DWT->CYCCNT = 0;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...