Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407 - watchdog+ reset проблемы.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
DerKetzer
Подскажите, пожалуйста, кто знает. При подаче питания на плату не запускается микроконтроллер, пока не нажмешь Reset. Схема сброса стандартная-100k to vcc и 100nF to gnd параллельно кнопке. Если увеличить емкость до 10 мкФ, то начинает стартовать сам. Но не может сброситься по watchdog. Если убрать полностью цепь сброса то вообще ничего не работает. ни reset ни watchdog. Осциллографом вижу что на пине reset при срабатывании watchdog напряжение на некоторое время падает в 0 но программа не стартует.
1113
смотрите с какой скоростью нарастает само питание
DerKetzer
В течение 1 миллисекунды нарастает питание.
1113
какой конкретно чип?

и какое напр питания?
DerKetzer
3.3 V stm32f407vgt6
Сергей Борщ
Конденсатор выкиньте и разбирайтесь с программой. Не нужен там конденсатор - времена PIC16С54 давно прошли, сейчас импульс сброса нужной длительности формируется внутри процессора. И нога сброса является и входом и выходом - процессор сам тянет ее к земле на нужное время при поступлении внешнего или внутреннего сигнала. 100 кОм резистор тоже ни о чем - он меньше внутренней подтяжки. Если нога сброса не используется - оставьте ее в воздухе, на длину вывода вы не наведете достаточную для случайного сброса помеху. Если на ноге сброса длинная дорожка (или еще хуже - длинный провод и кнопка на корпусе) - резистор нужен порядка килоома.

Добавлено: даже в техописании на PIC16С54 рисовали диод параллельно резистору на схеме сброса, но современные "инженеры" его упорно игнорируют.
DerKetzer
Спасибо. Буду пробовать.

Оставил reset в воздухе. Программа не стартует. Сопротивление на пине относительно земли или питания примерно Мегаом. Напряжение 3.3 вольта
ШСА
Цитата(DerKetzer @ May 24 2016, 15:57) *
Если убрать полностью цепь сброса то вообще ничего не работает. ни reset ни watchdog. Осциллографом вижу что на пине reset при срабатывании watchdog напряжение на некоторое время падает в 0 но программа не стартует.

А чем тактируется МК - от внутреннего RC или от внешнего кварца? Если от кварца, то возможно, что МК "застревает" из-за некачественного резонатора, при этом от внутреннего RC генератора стартует без проблем.
RadiatoR
Создайте пустой проект. С нуля. Попробуйте зайти в отладку.
Как вы вообще определяете работоспособность программы? Подергайте ножкой туда-сюда.

Внешний кварц не включайте - тут точно будет понятно в чем дело.
scifi
Проверьте ещё BOOT.
Сергей Борщ
QUOTE (DerKetzer @ May 24 2016, 16:31) *
Оставил reset в воздухе. Программа не стартует.
Или стартует, но тут же куда-то улетает и циклится в обработчике исключения?
QUOTE (DerKetzer @ May 24 2016, 16:31) *
Сопротивление на пине относительно земли или питания примерно Мегаом. Напряжение 3.3 вольта
Все логично. Там есть внутренняя подтяжка порядка 30-50 кОм, которая и обеспечивает необходимый для нормальной работы уровень лог. единицы. Подтяжка выполнена в виде полевого транзистора, поэтому на прозвонке вы ее не видите.
DerKetzer
В отладке сразу левый адрес. Но шьется, и если пинцетом дернуть ресет то светодиод моргает и по watchdoгу рестартует
ШСА
Цитата(DerKetzer @ May 24 2016, 16:45) *
В отладке сразу левый адрес. Но шьется, и если пинцетом дернуть ресет то светодиод моргает и по watchdoгу рестартует

Выбросьте (закомментируйте) Watchdog, он Вам только спутает все карты при отладке. Сделайте, как советовал ЯadiatoR. По результатам будет ясно, куда копать дальше.
DerKetzer
Выбросил WDT. Работаю от внутреннего генератора. В отладке все работает. Выходишь из отладки-все работает. Дергаешь питание-ничего не работает. Дернешь reset-работает. Микроконтроллер новый. тока сегодня впаял. Работу определяю по мигающему светодиоду.
ШСА
Цитата(DerKetzer @ May 24 2016, 17:01) *
Дергаешь питание-ничего не работает. Дернешь reset-работает.

Сигналы Boot0 и Pdr_On (94 и 99 ноги) на земле? (я имею ввиду не по схеме, а по факту, чтобы исключить непропай). Подключите Nrst (14) на + питания через небольшой резистор, напр. 1 - 10 кОм.
RadiatoR
Само питание как идет и откуда?
Скиньте скрин платы

Я тоже как-то вылавливал такие косяки, что прям в окно выбрасывай - оказалось по своей дури ногу fb провел длинную по плате и при включении цепей внешнего кварца проседала напруга, dcdc добавлял и мк то улетал куда-то, то отходил в мир иной.
DerKetzer
Выводы boot0 и 99 на земле. Питание идет от импульсного DC/DC. От него же питаются и другие устройства. Попробовал от другого источника питания. Все равно не заводится. Только после ресета. Поднял ногу Reset от площадки. Даже касание щупом тестера вывода reset запускает контроллер. КОрпус 100pin. Поэтому нету выводов PDR_ON
DerKetzer
Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.
SasaVitebsk
Цитата(DerKetzer @ May 25 2016, 11:55) *
Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.

Глупости какие. Вообще без понятия. Почитайте хоть что-нибудь общее ...
При чём здесь подтяжка к watchdog-у и к сбросу?
DerKetzer
Сам не понимаю как регистры портов ввода вывода могут влиять на watchdog. Но факт. Еще наличие строчки GPIOC->BSRRL|=1<<4; почему то не позволяет контроллеру начать работать после сброса watchdog ом. Магия. Коментирую строчку, заливаю. Запущенный в коде watchdog перезапускает плату в установленное время. Восстанавливаю строчку-watchdog сбрасывает в нужное время, но программа не выполняется. Сам понимаю что звучит глупо.
RadiatoR
И это происходит в вашем проекте или в пустом?
Aaron
сверяйте листинги асм кода - комментируемая строчка в каком месте вставляется, что до неё в коде, что сразу после неё - может, просто проблема со стеками или что-то в таком духе. Отключите полностью оптимизацию при компиляции, создайте наконец пустой проект, как вам уже советовали.
DerKetzer
Код
#include "stm32f4xx.h"
volatile int i=0;
int main()
{

RCC->AHB1ENR|=8; //тактирование порта d на котором светодиод
GPIOD->MODER|=1<<26; //D13-output
RCC->AHB1ENR|=1<<4; //тактирование порта E из за которого сыр бор

i=1000000;
while(i--); //пауза перед зажигание светодиода. 1-2 сек
GPIOD->BSRRL|=1<<13; //Зажигаю светодиод

GPIOE->PUPDR|=5;  //строчка не позволяющая перезапуститься после срабатывания watchdog

    IWDG->KR=0x5555;
    IWDG->PR = 0x3; // 4 секунды
    IWDG->KR = 0xCCCC; //start wdg на 4 секунды

while(1){ //пустой цикл
};

}
RadiatoR
Цитата(DerKetzer @ May 26 2016, 08:22) *
GPIOD->BSRRL|=1<<13; //Зажигаю светодиод


Можно использовать без "|".

То есть если в этом коде без строки GPIOE->PUPDR|=5; работает нормально, а с ней нет?
DerKetzer
Цитата(ЯadiatoR @ May 26 2016, 10:00) *
Можно использовать без "|".

То есть если в этом коде без строки GPIOE->PUPDR|=5; работает нормально, а с ней нет?

Да. Еще губит строчка GPIOC->BSRRL|=1<<4; это из рабочего проекта
RadiatoR
поставьте GPIOE->PUPDR|=5 после инициализации вд

Не помню, как там вд устроен, но у меня эта функция прекрасно работает.
Замените свой вд на ее вызов
Код
void WD_init(void)
{
//    DBGMCU->APB1FZ|=DBGMCU_APB1_FZ_DBG_IWDG_STOP;// Debug WD stop
    IWDG->KR=0x5555;// Enter protection
    IWDG->PR=0x03;// Precaler = 32
    IWDG->RLR=0xFFF;// Reload value
    IWDG->KR=0xAAAA;// Refresh to RLR val
    IWDG->KR=0xCCCC;// Start timer
}
DerKetzer
на descovery то все работает. а во на готовом устройстве нет. ничто нигде не замыкает. Watchdog то сбрасывает контроллер, осциллографом вижу что дергается ножка reset. Но программа не запускается.
RadiatoR
Одинаковые программы на дискавери и на вашем девайсе ведут себя по разному? Если да, то проблема либо в плате, либо в пайке. Других вариантов собственно и нет. Я вам предложил показать топологию несколько сообщений назад. Может что и разглядели бы форумчане
DerKetzer
Часть печатки. Целиком только в альтиумовском файле могу

Целиком мне нельзя.TOPSECRET
RadiatoR
Ну вы хоть обозначения поставьте, а то мало понятно, а вообще вам стоит почитать правила разводки (легко гуглятся).
Хотя бы про 90 градусные проводники.
1113
сколько в плате слоёв. синий и красный - это ж не все?
Aaron
дело не в 90 градусах.
Отладка контролем светодиода - маловато будет... Что значит "программа не запускается" после сброса? Откуда вы знаете, что не запускается? может, из-за разной разводки разное поведение...
Посмотрите errata на мк, особенно в части сброса, тактирования, поведения при старте/рестарте.
Питание на своей плате мониторили, проблем нет? ёмкости по входам питания? очевидные вещи, но всё же, мало ли... символ проверенный, пины точно не попутаны? мало ли, питание не заведено куда-то или земля...

Пропишите default handler для всех прерываний - пускай там тоже диод зажигается и моргает.
ноги boot в воздухе не болтаются? уровни boot при ресетах проконтролировать - что запускается в редиме старта из флэша.
Доступ к отладчику есть? после "зависания" остановить мк, вытянуть показания регистров, посмотреть, в какой точке сидите...
DerKetzer
Состояние ядра , когда сработал watchdog. PC всегда разный но только в младших разрядах
RadiatoR
Вы прогу загружаете просто во Flash? У вас PC стоит на адресе, который находится в нейкой "System memory + OTP" согласно дш на 407. Я вот не знаю что находится в этой области, но PC явно в ней не должен находиться.
Попробуйте залить прошивку, а потом считать ее и сравнить. Может flash битая?
DerKetzer
The Flash memory is organized as follows:
• A main memory block divided into sectors.
System memory from which the device boots in System memory boot mode
• 512 OTP (one-time programmable) bytes for user data.
• Option bytes to configure read and write protection, BOR level, watchdog
software/hardware and reset when the device is in Standby or Stop mode.

boot mode selection pins
Boot mode Aliasing
BOOT1 BOOT0
x 0 Main Flash memory Main Flash memory is selected as the boot space
0 1 System memory System memory is selected as the boot space
1 1 Embedded SRAM Embedded SRAM is selected as the boot space


Тоесть после срабатывания watchdog проц пробует запустить бутлоадер.

P.S Перепаял микросхему. Заработало. Всем спасибо. Освоил отладку sm.gif.
Aleksandr Baranov
Цитата(DerKetzer @ May 26 2016, 06:30) *
Перепаял микросхему.

А почему надо было перепаивать проц? У меня совсем недавно была аналогичная ситуация, но я просто перепрограммировал OPTION BYTE
golf2109
вот кстати как его перепрограммировать
https://arm-stm.blogspot.com/2016/04/stm32f...oblem-user.html
DerKetzer
У меня большинство битов не активны. Как их сделать активными? Повыбирал из BOR и ROP всякое.
Судя по даташиту у stm32f407 их и нету.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.