AleksBak 0 29 июня, 2022 Опубликовано 29 июня, 2022 · Жалоба 18 минут назад, adnega сказал: Что насчет конденсаторов? Скорее кварц возможно виноват. Попались какие-то микроминиатюрные, что в никакую не хотели на одной серии из контроллеров, запускаться. Поэтому (обращение к @Ioann_II ) стоит сначала заменить эти компоненты на другой марки/фирмы для проверки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба Конденсаторы поставил по 10 пФ, размер 0603, ёмкость прибором не проверял. От внешнего блока питания попробовал - запускается через раз. Если программа не запустилась, reset помогает всегда. Пробовал отпаять кварц совсем - не запускается. Попробовал кварц совсем другой, тоже часовой - картина та же. Может быть надо как-то иначе сделать инициализацию? Сейчас инициализация, которую генерирует CubeMX. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба Решил зайти с другой стороны: инициализация на 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с. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 июня, 2022 Опубликовано 30 июня, 2022 (изменено) · Жалоба 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, а также значения регистров настройки "по умолчанию". Какие они там по datasheet не очень понятно (может отдельная таблица), лучше все выставлять явно. Если рядом с цепями кварца имеется помеха, то флаг ошибки может не сбрасываться. >> Может быть надо как-то иначе сделать инициализацию? Может. Создайте отдельный "пустой" проект с инициализацией и запуском LSE. ps по умолчанию RCC_BDCR/LSEDRV == 11 : ‘Xtal mode’ higher driving capability (reset value) все остальные биты регистра по умолчанию == 0 Изменено 30 июня, 2022 пользователем k155la3 дополнение ps Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба К сожалению, купили только 10 пФ, плата от флюса вымыта, а какое значение лучше всего в поле LSEDRV ставить? Попробовал все значения - разницы не увидел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба проверьте 01, 10 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба Пробовал все: 00, 01, 10, 11. Разницы нет. Прошёлся отладчиком, виснет в функции SystemClock_Config(), вот тут: if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба . . . . . 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к Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба В 30.06.2022 в 08:41, Ioann_II сказал: К сожалению, купили только 10 пФ Два 10пФ последовательно - дают в результате 5пФ. ...если что Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба Выше написал, где виснет. Виснет после того, как выполнится приведенный выше код. Как делать reset - неважно: или замыкать, или через SWD подавать команду. BOOT0 сидит наглухо на GND. В 30.06.2022 в 14:15, jcxz сказал: Два 10пФ последовательно - дают в результате 5пФ. ...если что Понятно, только LSE запускается, писал выше. Не пойму почему виснет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба В 30.06.2022 в 10:21, Ioann_II сказал: Понятно, только LSE запускается, писал выше. Не пойму почему виснет. Видимо пора открывать и читать ref.manual и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба 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 и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба В 30.06.2022 в 14:30, jcxz сказал: Видимо пора открывать и читать ref.manual и делать запуск тактирования по нему, а не надеяться на всякие мурзилки кубы. Т.е. переделать функцию SystemClock_Config();? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба В 30.06.2022 в 11:56, Ioann_II сказал: Т.е. переделать функцию SystemClock_Config();? Ни в коем случае! Тогда вообще пропадает смысл использования стандартных библиотек. Есть подозрения, что бага аппаратная. Можете полную схему опубликовать? Кста, а зачем вам на F030 часовой кварц вообще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 30 июня, 2022 Опубликовано 30 июня, 2022 · Жалоба Схема платы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться