Jump to content

    
Sign in to follow this  
DerKetzer

STM32F407 - watchdog+ reset проблемы.

Recommended Posts

Само питание как идет и откуда?

Скиньте скрин платы

 

Я тоже как-то вылавливал такие косяки, что прям в окно выбрасывай - оказалось по своей дури ногу fb провел длинную по плате и при включении цепей внешнего кварца проседала напруга, dcdc добавлял и мк то улетал куда-то, то отходил в мир иной.

Share this post


Link to post
Share on other sites

Выводы boot0 и 99 на земле. Питание идет от импульсного DC/DC. От него же питаются и другие устройства. Попробовал от другого источника питания. Все равно не заводится. Только после ресета. Поднял ногу Reset от площадки. Даже касание щупом тестера вывода reset запускает контроллер. КОрпус 100pin. Поэтому нету выводов PDR_ON

Edited by DerKetzer

Share this post


Link to post
Share on other sites

Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.

 

Share this post


Link to post
Share on other sites
Заметил одну вещь. Если в коде присутствует строчка GPIOE->PUPDR|=5; тоесть подключение внутренних подтяжек на выводы, то watchdog не перезапускает программу.

Глупости какие. Вообще без понятия. Почитайте хоть что-нибудь общее ...

При чём здесь подтяжка к watchdog-у и к сбросу?

Share this post


Link to post
Share on other sites

Сам не понимаю как регистры портов ввода вывода могут влиять на watchdog. Но факт. Еще наличие строчки GPIOC->BSRRL|=1<<4; почему то не позволяет контроллеру начать работать после сброса watchdog ом. Магия. Коментирую строчку, заливаю. Запущенный в коде watchdog перезапускает плату в установленное время. Восстанавливаю строчку-watchdog сбрасывает в нужное время, но программа не выполняется. Сам понимаю что звучит глупо.

Share this post


Link to post
Share on other sites

сверяйте листинги асм кода - комментируемая строчка в каком месте вставляется, что до неё в коде, что сразу после неё - может, просто проблема со стеками или что-то в таком духе. Отключите полностью оптимизацию при компиляции, создайте наконец пустой проект, как вам уже советовали.

Share this post


Link to post
Share on other sites
#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){ //пустой цикл
};

}

Edited by IgorKossak
[codebox] для длинного кода. [code]-для короткого!!!

Share this post


Link to post
Share on other sites
GPIOD->BSRRL|=1<<13; //Зажигаю светодиод

 

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

 

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

Share this post


Link to post
Share on other sites
Можно использовать без "|".

 

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

Да. Еще губит строчка GPIOC->BSRRL|=1<<4; это из рабочего проекта

Share this post


Link to post
Share on other sites

поставьте 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
}

Edited by IgorKossak
[codebox] для длинного кода. [code]-для короткого!!!

Share this post


Link to post
Share on other sites

на descovery то все работает. а во на готовом устройстве нет. ничто нигде не замыкает. Watchdog то сбрасывает контроллер, осциллографом вижу что дергается ножка reset. Но программа не запускается.

Share this post


Link to post
Share on other sites

Одинаковые программы на дискавери и на вашем девайсе ведут себя по разному? Если да, то проблема либо в плате, либо в пайке. Других вариантов собственно и нет. Я вам предложил показать топологию несколько сообщений назад. Может что и разглядели бы форумчане

Share this post


Link to post
Share on other sites

Ну вы хоть обозначения поставьте, а то мало понятно, а вообще вам стоит почитать правила разводки (легко гуглятся).

Хотя бы про 90 градусные проводники.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this