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

Не стартует STM32 по RESET при включении

18 минут назад, adnega сказал:

Что насчет конденсаторов?

Скорее кварц возможно виноват. Попались  какие-то микроминиатюрные, что в никакую не хотели на одной серии из контроллеров, запускаться.

Поэтому (обращение к @Ioann_II ) стоит сначала заменить эти компоненты на другой марки/фирмы для проверки.

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


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

Конденсаторы поставил по 10 пФ, размер 0603, ёмкость прибором не проверял.

От внешнего блока питания попробовал - запускается через раз. Если программа не запустилась, reset помогает всегда. Пробовал отпаять кварц совсем - не запускается. Попробовал кварц совсем другой, тоже часовой - картина та же. Может быть надо как-то иначе сделать инициализацию? Сейчас инициализация, которую генерирует CubeMX.

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


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

Решил зайти с другой стороны: инициализация на LSI, потом свой код, который переключает на LSE. Получилось теперь наоборот: при программном или аппаратном reset стартует через раз, при подаче питания - каждый раз. Что-то я делаю, видать не так, но вот что - пока не соображу. Ниже код, которым переключаюсь на LSE

    PWR->CR   |= PWR_CR_DBP;                                      // Разрешить доступ к Backup-области
    RCC->BDCR |= RCC_BDCR_BDRST;                                  // Сбросить Backup-область
    RCC->BDCR &= ~RCC_BDCR_BDRST;
    
    RCC->BDCR |= RCC_BDCR_RTCSEL_0;                               // Выбрать LSE источник (кварц 32768)
    RCC->BDCR |= RCC_BDCR_RTCEN;                                  // Подать тактирование
    RCC->BDCR |= RCC_BDCR_LSEON;                                  // Включить LSE    
    while(!(RCC->BDCR & RCC_BDCR_LSERDY));                        // Ждём запуска

После этого я считываю биты RCC_BDCR_RTCSEL_Msk, устанавливаю время, дату, жду 2с, получаю новое время, результат вывожу на экран. Всегда при запуске установлен источник LSE, прошедшее время 2с.

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


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

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

Конденсаторы поставил по 10 пФ, размер 0603, ёмкость прибором не проверял. . . . .

В схеме на отладочную плату конденсаторы 4.3 pF, но в примечании указано: 

Цитата

Note5: C31&C32 value changed from 10pF to 4.3pF to fit with new 32K crystal ABS25-32.768KHZ-6-T

Плату тщательно протереть от флюса.

В док. время запуска LSE указано 2с.

Обратите внимание на регистр RCC_BDCR, поле LSEDRV,  а также :buba: значения регистров настройки "по умолчанию". Какие они там по  datasheet не очень понятно (может отдельная таблица), лучше все выставлять явно.

Если рядом с цепями кварца имеется помеха, то флаг ошибки может не сбрасываться.

>>  Может быть надо как-то иначе сделать инициализацию? 

Может. Создайте отдельный "пустой" проект с инициализацией и запуском LSE.

ps

по умолчанию RCC_BDCR/LSEDRV ==  11 : ‘Xtal mode’ higher driving capability (reset value)

все остальные биты регистра по умолчанию == 0

 

Изменено пользователем k155la3
дополнение ps

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


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

К сожалению, купили только 10 пФ, плата от флюса вымыта, а какое значение лучше всего в поле LSEDRV ставить? Попробовал все значения - разницы не увидел.

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


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

Пробовал все: 00, 01, 10, 11. Разницы нет.

Прошёлся отладчиком, виснет в функции  SystemClock_Config(), вот тут:

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

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


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

. . . . . 

LED_GREEN_ON; // A

while(!(RCC->BDCR & RCC_BDCR_LSERDY));

LED_RED_ON; // B

Или - отладчике удостоверьтесь, что завес идет именно на  while(!(RCC->BDCR & RCC_BDCR_LSERDY));

Вместо LED можно поставить _no_operation() (смотря какой компилятор, фиктивная операция для отладчика) и в отладчике поставить контрольные точки на строках A, B. Надо убедиться, что выполнение доходит до строки A (когда требуется Reset кнопкой).

Проверьте для цепи сброса Reset 100 nF + 50-100k  может в этом причина.

ps BOOT0 дб притянут на GND через 10к

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


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

В 30.06.2022 в 08:41, Ioann_II сказал:

К сожалению, купили только 10 пФ

Два 10пФ последовательно - дают в результате 5пФ. ...если что

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


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

Выше написал, где виснет. Виснет после того, как выполнится приведенный выше код. Как делать reset - неважно: или замыкать, или через SWD подавать команду. BOOT0 сидит наглухо на GND.

В 30.06.2022 в 14:15, jcxz сказал:

Два 10пФ последовательно - дают в результате 5пФ. ...если что

Понятно, только LSE запускается, писал выше. Не пойму почему виснет.

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


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

В 30.06.2022 в 10:21, Ioann_II сказал:

Понятно, только LSE запускается, писал выше. Не пойму почему виснет.

Видимо пора открывать и читать ref.manual и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы.  :unknw:

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


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

Re видел. Ну, все прелести HAL.

(?) Я правильно понял, завес внутри HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) ?

"Что вижу - то пою". Функция настройки тактирования периферии (Initializes the RCC extended peripherals clocks according to the specified parameters in the RCC_PeriphCLKInitTypeDef). Возможно CubeMX начудил и получилась коллизия с "входными" параметрами. Особенно если работаете на сгенерированном проекте.

Пересоберите проект на-чистую, без использования старого. Процесс итерационный, "на любителя".

Можно конечно попытаться зайти в ф-ю отладчиком. 

Description of STM32F0 HAL and low-layer drivers  pdf

или

14 минут назад, jcxz сказал:

Видимо пора открывать и читать ref.manual и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы.  :unknw:

:)

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


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

В 30.06.2022 в 14:30, jcxz сказал:

Видимо пора открывать и читать ref.manual и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы.  :unknw:

Т.е. переделать функцию SystemClock_Config();?

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


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

В 30.06.2022 в 11:56, Ioann_II сказал:

Т.е. переделать функцию SystemClock_Config();?

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

Есть подозрения, что бага аппаратная. Можете полную схему опубликовать?

Кста, а зачем вам на F030 часовой кварц вообще?

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


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

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

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

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

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

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

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

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

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

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