ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
583833
LeonidPr (03.03.2015 18:47 - 04.03.2015 09:57, просмотров: 10748)
Проблема с RTC в STM32F373 Сразу скажу, что задавал вопрос на Easyelectronics, но там тишина. В общем хочу запустить часы от HSE/32. #include <stm32f37x.h> #include "rtc.h" //предделители. промежуточная частота 2000 Гц (ck_apre) #define PREDIVA (((HSE_VALUE/32)/2000)-1) #define PREDIVS (((HSE_VALUE/32)/(PREDIVA+1))-1) uint32_t rtc_init(void) { GPIO_InitTypeDef CalibPins; //конфигурируем пин для выхода сигнала калибровки (PC13) RCC_AHBPeriphClockCmd (RCC_AHBPeriph_GPIOC,ENABLE); CalibPins.GPIO_Mode=GPIO_Mode_OUT; CalibPins.GPIO_OType=GPIO_OType_PP; CalibPins.GPIO_Pin=GPIO_Pin_13; CalibPins.GPIO_PuPd=GPIO_PuPd_NOPULL; CalibPins.GPIO_Speed=GPIO_Speed_Level_2; GPIO_Init(GPIOC,&CalibPins); //Включаем питание модуля RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); PWR_BackupAccessCmd(ENABLE); //Сбрасываем модуль RTC RCC->BDCR|=RCC_BDCR_BDRST; RCC->BDCR&=~(RCC_BDCR_BDRST); //Источник тактов HSE/32 RCC->BDCR=(3<<8) | RCC_BDCR_RTCEN; //Включаем доступ к регистрам RTC->WPR=0xCA; RTC->WPR=0x53; //Переходим в режим инициализации RTC->ISR|=(1<<7); while ((RTC->ISR & (1<<6))==0); //Настраиваем предделители RTC->PRER=PREDIVS; RTC->PRER|=(PREDIVA<<16); //Включаем выход сигнала калибровки 1 гц RTC->CR=RTC_CR_COE | RTC_CR_COSEL; //Уходим из режима инициализации RTC->ISR&=~(1<<7); while ((RTC->ISR & (1<<6))!=0); //Запрещаем доступ к регистрам RTC->WPR=0xFF; return 0; }; Получаю на пине PC13 сигнал как на картинке. Т.е. не 1 Гц, да еще и импульсы разной ширины. В общем подпаял часовой кварц, и запустился от него, делители - по умолчанию. все стало отлично. Дальше опять фигня - один делитель уменьшил в два раза (PREDIVA) а другой увеличил в два. По идее ничего не должно было поменяться, но сигнал на выходе стал 2 Гц. Может подскажете куда копать? Видать или я какую-то глупость сморозил, или документацию плохо читал. На втором форуме молчок :-) Просто во всех примерах RTC тактируется от LSE, я же буду постоянно синхронизировать с внешним сигналом его (каждую секунду), поэтому и подумал, что не буду вешать кварц часовой, в пределах секунды HSE думаю обеспечит точность.
image