DerKetzer
May 24 2016, 12:57
Подскажите, пожалуйста, кто знает. При подаче питания на плату не запускается микроконтроллер, пока не нажмешь Reset. Схема сброса стандартная-100k to vcc и 100nF to gnd параллельно кнопке. Если увеличить емкость до 10 мкФ, то начинает стартовать сам. Но не может сброситься по watchdog. Если убрать полностью цепь сброса то вообще ничего не работает. ни reset ни watchdog. Осциллографом вижу что на пине reset при срабатывании watchdog напряжение на некоторое время падает в 0 но программа не стартует.
смотрите с какой скоростью нарастает само питание
DerKetzer
May 24 2016, 13:03
В течение 1 миллисекунды нарастает питание.
какой конкретно чип?
и какое напр питания?
DerKetzer
May 24 2016, 13:15
3.3 V stm32f407vgt6
Сергей Борщ
May 24 2016, 13:16
Конденсатор выкиньте и разбирайтесь с программой. Не нужен там конденсатор - времена PIC16С54 давно прошли, сейчас импульс сброса нужной длительности формируется внутри процессора. И нога сброса является и входом и выходом - процессор сам тянет ее к земле на нужное время при поступлении внешнего или внутреннего сигнала. 100 кОм резистор тоже ни о чем - он меньше внутренней подтяжки. Если нога сброса не используется - оставьте ее в воздухе, на длину вывода вы не наведете достаточную для случайного сброса помеху. Если на ноге сброса длинная дорожка (или еще хуже - длинный провод и кнопка на корпусе) - резистор нужен порядка килоома.
Добавлено: даже в техописании на PIC16С54 рисовали диод параллельно резистору на схеме сброса, но современные "инженеры" его упорно игнорируют.
DerKetzer
May 24 2016, 13:31
Спасибо. Буду пробовать.
Оставил reset в воздухе. Программа не стартует. Сопротивление на пине относительно земли или питания примерно Мегаом. Напряжение 3.3 вольта
Цитата(DerKetzer @ May 24 2016, 15:57)

Если убрать полностью цепь сброса то вообще ничего не работает. ни reset ни watchdog. Осциллографом вижу что на пине reset при срабатывании watchdog напряжение на некоторое время падает в 0 но программа не стартует.
А чем тактируется МК - от внутреннего RC или от внешнего кварца? Если от кварца, то возможно, что МК "застревает" из-за некачественного резонатора, при этом от внутреннего RC генератора стартует без проблем.
RadiatoR
May 24 2016, 13:37
Создайте пустой проект. С нуля. Попробуйте зайти в отладку.
Как вы вообще определяете работоспособность программы? Подергайте ножкой туда-сюда.
Внешний кварц не включайте - тут точно будет понятно в чем дело.
Сергей Борщ
May 24 2016, 13:37
QUOTE (DerKetzer @ May 24 2016, 16:31)

Оставил reset в воздухе. Программа не стартует.
Или стартует, но тут же куда-то улетает и циклится в обработчике исключения?
QUOTE (DerKetzer @ May 24 2016, 16:31)

Сопротивление на пине относительно земли или питания примерно Мегаом. Напряжение 3.3 вольта
Все логично. Там есть внутренняя подтяжка порядка 30-50 кОм, которая и обеспечивает необходимый для нормальной работы уровень лог. единицы. Подтяжка выполнена в виде полевого транзистора, поэтому на прозвонке вы ее не видите.
DerKetzer
May 24 2016, 13:45
В отладке сразу левый адрес. Но шьется, и если пинцетом дернуть ресет то светодиод моргает и по watchdoгу рестартует
Цитата(DerKetzer @ May 24 2016, 16:45)

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

Дергаешь питание-ничего не работает. Дернешь reset-работает.
Сигналы Boot0 и Pdr_On (94 и 99 ноги) на земле? (я имею ввиду не по схеме, а по факту, чтобы исключить непропай). Подключите Nrst (14) на + питания через небольшой резистор, напр. 1 - 10 кОм.
RadiatoR
May 24 2016, 16:16
Само питание как идет и откуда?
Скиньте скрин платы
Я тоже как-то вылавливал такие косяки, что прям в окно выбрасывай - оказалось по своей дури ногу fb провел длинную по плате и при включении цепей внешнего кварца проседала напруга, dcdc добавлял и мк то улетал куда-то, то отходил в мир иной.
DerKetzer
May 25 2016, 05:27
Выводы boot0 и 99 на земле. Питание идет от импульсного DC/DC. От него же питаются и другие устройства. Попробовал от другого источника питания. Все равно не заводится. Только после ресета. Поднял ногу Reset от площадки. Даже касание щупом тестера вывода reset запускает контроллер. КОрпус 100pin. Поэтому нету выводов PDR_ON
DerKetzer
May 25 2016, 08:55
Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.
SasaVitebsk
May 25 2016, 13:23
Цитата(DerKetzer @ May 25 2016, 11:55)

Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.
Глупости какие. Вообще без понятия. Почитайте хоть что-нибудь общее ...
При чём здесь подтяжка к watchdog-у и к сбросу?
DerKetzer
May 25 2016, 13:39
Сам не понимаю как регистры портов ввода вывода могут влиять на watchdog. Но факт. Еще наличие строчки GPIOC->BSRRL|=1<<4; почему то не позволяет контроллеру начать работать после сброса watchdog ом. Магия. Коментирую строчку, заливаю. Запущенный в коде watchdog перезапускает плату в установленное время. Восстанавливаю строчку-watchdog сбрасывает в нужное время, но программа не выполняется. Сам понимаю что звучит глупо.
RadiatoR
May 25 2016, 14:10
И это происходит в вашем проекте или в пустом?
сверяйте листинги асм кода - комментируемая строчка в каком месте вставляется, что до неё в коде, что сразу после неё - может, просто проблема со стеками или что-то в таком духе. Отключите полностью оптимизацию при компиляции, создайте наконец пустой проект, как вам уже советовали.
DerKetzer
May 26 2016, 05:22
Код
#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
May 26 2016, 06:00
Цитата(DerKetzer @ May 26 2016, 08:22)

GPIOD->BSRRL|=1<<13; //Зажигаю светодиод
Можно использовать без "|".
То есть если в этом коде без строки GPIOE->PUPDR|=5; работает нормально, а с ней нет?
DerKetzer
May 26 2016, 06:05
Цитата(ЯadiatoR @ May 26 2016, 10:00)

Можно использовать без "|".
То есть если в этом коде без строки GPIOE->PUPDR|=5; работает нормально, а с ней нет?
Да. Еще губит строчка GPIOC->BSRRL|=1<<4; это из рабочего проекта
RadiatoR
May 26 2016, 06:40
поставьте 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
May 26 2016, 07:08
на descovery то все работает. а во на готовом устройстве нет. ничто нигде не замыкает. Watchdog то сбрасывает контроллер, осциллографом вижу что дергается ножка reset. Но программа не запускается.
RadiatoR
May 26 2016, 07:24
Одинаковые программы на дискавери и на вашем девайсе ведут себя по разному? Если да, то проблема либо в плате, либо в пайке. Других вариантов собственно и нет. Я вам предложил показать топологию несколько сообщений назад. Может что и разглядели бы форумчане
DerKetzer
May 26 2016, 07:48
Часть печатки. Целиком только в альтиумовском файле могу
Целиком мне нельзя.TOPSECRET
RadiatoR
May 26 2016, 07:51
Ну вы хоть обозначения поставьте, а то мало понятно, а вообще вам стоит почитать правила разводки (легко гуглятся).
Хотя бы про 90 градусные проводники.
сколько в плате слоёв. синий и красный - это ж не все?
дело не в 90 градусах.
Отладка контролем светодиода - маловато будет... Что значит "программа не запускается" после сброса? Откуда вы знаете, что не запускается? может, из-за разной разводки разное поведение...
Посмотрите errata на мк, особенно в части сброса, тактирования, поведения при старте/рестарте.
Питание на своей плате мониторили, проблем нет? ёмкости по входам питания? очевидные вещи, но всё же, мало ли... символ проверенный, пины точно не попутаны? мало ли, питание не заведено куда-то или земля...
Пропишите default handler для всех прерываний - пускай там тоже диод зажигается и моргает.
ноги boot в воздухе не болтаются? уровни boot при ресетах проконтролировать - что запускается в редиме старта из флэша.
Доступ к отладчику есть? после "зависания" остановить мк, вытянуть показания регистров, посмотреть, в какой точке сидите...
DerKetzer
May 26 2016, 08:53
Состояние ядра , когда сработал watchdog. PC всегда разный но только в младших разрядах
RadiatoR
May 26 2016, 09:07
Вы прогу загружаете просто во Flash? У вас PC стоит на адресе, который находится в нейкой "System memory + OTP" согласно дш на 407. Я вот не знаю что находится в этой области, но PC явно в ней не должен находиться.
Попробуйте залить прошивку, а потом считать ее и сравнить. Может flash битая?
DerKetzer
May 26 2016, 10:30
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 Перепаял микросхему. Заработало. Всем спасибо. Освоил отладку

.
Aleksandr Baranov
May 26 2016, 16:09
Цитата(DerKetzer @ May 26 2016, 06:30)

Перепаял микросхему.
А почему надо было перепаивать проц? У меня совсем недавно была аналогичная ситуация, но я просто перепрограммировал OPTION BYTE
golf2109
May 28 2016, 10:36
DerKetzer
May 30 2016, 13:21
У меня большинство битов не активны. Как их сделать активными? Повыбирал из BOR и ROP всякое.
Судя по даташиту у stm32f407 их и нету.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.