Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32. Проблема с генерацией часового кварца.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Вячик13
Имеется два девайса - своего изготовления на базе контроллера STM32F100 и отладочная плата STM32F103_DB и одна и та же программа для обоих. Требуется запустить модуль RTC (или хотя бы для начала генерацию часового кварца при батарейном питании).

Описание эффекта.

Программа загружается в отладочную плату. Часы идут. Выключается основное питание. Часы идут. Смотрю осциллоскопом генерацию на ножке кварца. И с основным питанием и с батарейным имеется в наличии.

Схемотехника своей платы в этом узле повторяет один в один схемотехнику отладочной платы. Загружается программа. Часы идут. Генерация на ножке кварца имеется. Выключается основное питание. Часы не идут. Генерации на ножке кварца нет. Смотрю генерацию одновременно с наличием основного питания. По мере падения уровня питания генерация уменьшается и сходит на нет. Такое впечатление, что внутренний аналоговый переключатель, управляемый детектором уровня просто не работает.
Разводка платы грамотная, конденсаторы при кварце на месте и нужного номинала (впрочем, пробовали и без них - то же самое).

Кто-нибудь что-нибудь по этому поводу может подсказать?
laughing.gif
kan35
Может что то в инициализации..
у меня так и проблем никаких не возникает:
Код
if (BKP_ReadBackupRegister(BKP_DR1) != CHECK_CODE)
    {
        // разрешаем доступ к BKP домену    
        PWR_BackupAccessCmd(ENABLE);
        BKP_DeInit();
        RCC_LSEConfig(RCC_LSE_ON);
        while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
        {}
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();
        RTC_WaitForLastTask();
        // разрешили прерывание
        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        RTC_WaitForLastTask();
        RTC_SetPrescaler(32767);
        RTC_WaitForLastTask();
        BKP_WriteBackupRegister(BKP_DR1, CHECK_CODE);
    }

может поможет.
Вячик13
Цитата(kan35 @ Apr 27 2012, 20:43) *
Может что то в инициализации..
у меня так и проблем никаких не возникает:
Код
if (BKP_ReadBackupRegister(BKP_DR1) != CHECK_CODE)
    {
        // разрешаем доступ к BKP домену    
        PWR_BackupAccessCmd(ENABLE);
        BKP_DeInit();
        RCC_LSEConfig(RCC_LSE_ON);
        while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
        {}
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
        RCC_RTCCLKCmd(ENABLE);
        RTC_WaitForSynchro();
        RTC_WaitForLastTask();
        // разрешили прерывание
        RTC_ITConfig(RTC_IT_SEC, ENABLE);
        RTC_WaitForLastTask();
        RTC_SetPrescaler(32767);
        RTC_WaitForLastTask();
        BKP_WriteBackupRegister(BKP_DR1, CHECK_CODE);
    }

может поможет.

Спасибо, но у меня практически код такой же. Боюсь, что это всё-таки проблема, так называемого, инженерного кристалла. Т.е. была продана партия чипов с недоработками. Не думаю, что специально, просто проблему, наверное обнаружили после и устранили в 103.
Вячик13
Причина эффекта найдена!!! Все для сведения.
В моём контроллере были разделены общие питания цифровой и аналоговой части. В результате при выключении питания напряжения падали не синхронно. И эта зараза не переключалась на батарейное питание. Соединение общих через диоды Шоттки решило проблему.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.