Например TDA7294

Форум РадиоКот • Просмотр темы - stm32l051 не реагирует на ресет.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн окт 20, 2025 14:20:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 28 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 09:35:43 
Прорезались зубы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 30
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 230
Откуда: Россия, Омск
Рейтинг сообщения: 0
Добавлено after 2 minutes 22 seconds:
AlanDrakes, напряжение при передаче падает до 3,5 вольт всего. Даже без батарейки одних кондёров хватает на 2 передачи

Тогда BOD отпадает. Жаль. Это был хороший вариант. На батарейном питании при низком напряжении (около 2В) (вместо батарей был ЛБП) поведение становилось довольно занятным.

jcxz правильно предложил - уменьшить паузы засыпания и сделать эдакий стресс-тест.
Желательно так же выводить данные в какой-нибудь логгер перед переходом в сон и после пробуждения.

Собирать... ну... пусть будет текущий адрес стэка (ну мало ли!) - он должен совпадать от запуска к запуску; Напряжение батареи прямо перед выключением (мало ли, вдруг просадка всё же случается?), флаги периферии. Что бы ещё?.. Флаги состояния FLASH->SR ?

Подключить к отладчику вряд ли получится - он будет терять соединение при каждом уходе в StandBy, ибо ядро обесточивается. Сам пробовал - довольно неудобно. Отладка превращается в "покури мануал, подумай, что мог сделать неправильно. Исправь, прошей, запусти, читай лог".
К сожалению отладка глубже чем в глубоком сне уже невозможна.


А... Развивая идею логгирования. Есть у меня одна мысль. После очередного включения, когда звёзды сошлись очень неудачно, у чипа может быть недоступна память. Попробуйте в этом случае всё же подключить отладчик БЕЗ броса питания. Если чип появится - смотрите регистры ядра и SCB. В частности - PC, SP, SCB->VTOR и переопределите "Фатальные" ошибки (хотя вылавливать их будет то ещё удовольствие)

Спойлер
Код:
char char_to_hex(char value) {
   if (value > 9)
      return '7' + value;
   return '0' + value;
}
void DumpText(char *text) {
   while(*text) {
      USART3->TDR = *text;
      text++;
      while (!(USART3->ISR & USART_ISR_TC)) {};
   }
}
void DumpHexDWord(uint32_t Data) {
   char txt[9];
   txt[0] = char_to_hex((Data >> 28) & 0x0F);
   txt[1] = char_to_hex((Data >> 24) & 0x0F);
   txt[2] = char_to_hex((Data >> 20) & 0x0F);
   txt[3] = char_to_hex((Data >> 16) & 0x0F);
   txt[4] = char_to_hex((Data >> 12) & 0x0F);
   txt[5] = char_to_hex((Data >> 8) & 0x0F);
   txt[6] = char_to_hex((Data >> 4) & 0x0F);
   txt[7] = char_to_hex((Data) & 0x0F);
   txt[8] = 0;
   DumpText(txt);
}
void BusFault_Handler_c(unsigned int * hardfault_args) {
   unsigned int stacked_r0;
   unsigned int stacked_r1;
   unsigned int stacked_r2;
   unsigned int stacked_r3;
   unsigned int stacked_r12;
   unsigned int stacked_lr;
   unsigned int stacked_pc;
   unsigned int stacked_psr;

   stacked_r0 = ((unsigned long) hardfault_args[0]);
   stacked_r1 = ((unsigned long) hardfault_args[1]);
   stacked_r2 = ((unsigned long) hardfault_args[2]);
   stacked_r3 = ((unsigned long) hardfault_args[3]);

   stacked_r12 = ((unsigned long) hardfault_args[4]);
   stacked_lr = ((unsigned long) hardfault_args[5]);
   stacked_pc = ((unsigned long) hardfault_args[6]);
   stacked_psr = ((unsigned long) hardfault_args[7]);

   DumpText ("\r\n[Bus fault handler - all numbers in hex]\r\n");
   DumpText ("R0 = ");
   DumpHexDWord(stacked_r0);
   DumpText ("\r\nR1 = ");
   DumpHexDWord(stacked_r1);
   DumpText ("\r\nR2 = ");
   DumpHexDWord(stacked_r2);
   DumpText ("\r\nR3 = ");
   DumpHexDWord(stacked_r3);
   DumpText ("\r\nR12 = ");
   DumpHexDWord(stacked_r12);
   DumpText ("\r\nLR [R14] (subroutine call return address) = ");
   DumpHexDWord(stacked_lr);
   DumpText ("\r\nPC [R15] (program counter) = ");
   DumpHexDWord(stacked_pc);
   DumpText ("\r\nPSR = ");
   DumpHexDWord(stacked_psr);
//   DumpText ("\r\nBFAR = ");
//   DumpHexDWord((*((volatile unsigned long *)(0xE000ED38))));
//   DumpText ("\r\nCFSR = ");
//   DumpHexDWord((*((volatile unsigned long *)(0xE000ED28))));
//   DumpText ("\r\nHFSR = ");
//   DumpHexDWord((*((volatile unsigned long *)(0xE000ED2C))));
//   DumpText ("\r\nDFSR = ");
//   DumpHexDWord((*((volatile unsigned long *)(0xE000ED30))));
//   DumpText ("\r\nAFSR = ");
//   DumpHexDWord((*((volatile unsigned long *)(0xE000ED3C))));
   DumpText ("\r\nSCB_SHCSR = ");
   DumpHexDWord(SCB->SHCSR);
   DumpText("\r\n");
   while (1) { };
}

void HardFault_Handler(void) {
   console_put("SHIT! - HardFault\r\n");
   while(1) {}
}
void MemManage_Handler(void) {
   console_put("SHIT! - MemManageFault\r\n");
   while(1) {}
}
void UsageFault_Handler(void) {
   console_put("SHIT! - UsageFault\r\n");
   while(1) {}
}



Последний раз редактировалось AlanDrakes Ср авг 27, 2025 09:43:55, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 09:44:42 
Родился

Зарегистрирован: Пт окт 23, 2015 18:25:40
Сообщений: 10
Рейтинг сообщения: 0
Nranddek, ну сбрасывается же в майне, я же писал.

Добавлено after 2 minutes 49 seconds:
AlanDrakes, Кстати, да. Kost286, а какой диапазон напряжения у прибора?

Если подключать батарейку с разряженными конденсаторами, то передачи сразу нет, из-за относительно медленной зарядки конденсаторов и в этот момент контроллер даёт прерывание PVR. Оттуда он засыпает снова, на большее время. И при этом РЕСЕТ как положено работает. Вообще есть мнение что возможно тактовый генератор LSI останавливается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 09:55:36 
Потрогал лапой паяльник

Карма: 2
Рейтинг сообщений: -9
Зарегистрирован: Сб авг 09, 2025 22:08:28
Сообщений: 373
Рейтинг сообщения: 0
да, верно. Это я ступил.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 09:59:09 
Прорезались зубы
Аватар пользователя

Карма: 5
Рейтинг сообщений: 30
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 230
Откуда: Россия, Омск
Рейтинг сообщения: 0
Добавлено after 2 minutes 49 seconds:
AlanDrakes, Кстати, да. Kost286, а какой диапазон напряжения у прибора?

В моём случае запросили сделать "мигалку", имитирующую наличие записывающей камеры - банально вспыхивать каждые N секунд на M секунд (от 0.05с до 8с сделал... кажется).
Питается это от пары элементов размера C ( https://upload.wikimedia.org/wikipedia/ ... riaR14.jpg ) на 1.5В и разряжает их до почти 0.8В на элемент (сохраняет работоспособность до 1.6~1.7В).

И, предвосхищая вопрос, нет. На низковольтной NE555 сделать было раза в два дороже. И сложнее. А тут и индикация разряда (по нажатию кнопки "проверка") и изменение настроек (при нажатии кнопки "Применить!"). До этого контрллер включается, измеряет положение движков потенциометров, запоминает его, настраивает таймеры и уходит в глубокий сон, время от времени моргая... за счёт аппаратного таймера.
Если батарея садится - включает "бустер" на ICL7660, поднимая напряжение для светодиода.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 10:29:06 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 185
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1607
Рейтинг сообщения: 0
jcxz, приёчем здесь доублы и прочее? Вопрос же не в том как лучше в коде сделать, а почему из сна не выходит и можно ли узнать почему и можно ли исправить.
К тому что весь код написан очень грязно. И нет того, что делается при корректном входе/выходе в сон: запрета всех ненужных прерываний, отключение неиспользуемой во сне периферии, установки пинов в состояние "для сна", контроля и установки регистров тактирования и питания для состояния сна и т.п. От вашего кода можно ожидать чего угодно. Что и происходит.

Добавлено after 1 minute 41 second:
Вообще есть мнение что возможно тактовый генератор LSI останавливается.
Вы всё время ищете проблему не у себя, а где-то на стороне. Так результата не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 10:42:05 
Родился

Зарегистрирован: Пт окт 23, 2015 18:25:40
Сообщений: 10
Рейтинг сообщения: 0
jcxz, понятно, везде попадаются такие советчики лишь бы написать что-то негативное, но не по делу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 10:50:23 
Потрогал лапой паяльник

Карма: 2
Рейтинг сообщений: -9
Зарегистрирован: Сб авг 09, 2025 22:08:28
Сообщений: 373
Рейтинг сообщения: 4
Странная реакция... То есть, критика, если она отрицательная, нахер ненужна, даже если может оказаться решением проблемы? :)
А если так: Ваш код идеален, проблема в микроконтроллере, аппаратная, нужно все их поменять.
Так лучше стало?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32l051 не реагирует на ресет.
СообщениеДобавлено: Ср авг 27, 2025 14:11:51 
Родился

Зарегистрирован: Пт окт 23, 2015 18:25:40
Сообщений: 10
Рейтинг сообщения: 0
спасибо AlanDrakes за конструктивную помощь, и Nranddek попытками вникнуть.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 28 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y