Часы реального времени без HSE

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Neekeetos писал(а):У тебя же все работает. Просто убери смену тактирования из прерывания часов и оно перестанет зависать.
У меня все работает если тестируешь на макетке с внешним кварцем, у заказщика такового не установлено, поэтому у него не работает. Только что, для проверки убрал смену тактирования в прерывани (хотя она там стоит для корректного выхода из стоп режима) та же ботва, завис и все.
Что-то не удается прикрепить файл.
Проект - зиповский архив, после компиляции в файле stm32l1xx_conf.h неиспользуемые файлы библиотеки нужно заккоментировать(забыл сам такое сделать когда высылал, файлы SPL в соответсвующей папке)
Реклама
Galizin
Мучитель микросхем
Сообщения: 478
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: Часы реального времени без HSE

Сообщение Galizin »

evilbob писал(а):убрал смену тактирования в прерывани
это?

Код: Выделить всё

/* После выхода из режима сна необходимо заново установить внешний генератор */
	/* Включение внешнего высокоскоростного генератора */
	RCC_HSEConfig(RCC_HSE_ON);

	/* Ожидание готовности генератора */
	while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)
	{}
Реклама
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Ну да
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

Честно говоря проглядел весь исходник, не нашел где там именно переключение тактов. Включение генератора внешнего есть и есть ожидание пока он запустится, а мк так и остается на MSI(или на HSE+PLL если в момент сброса мк кварц присутствует см systemInit() в файле system_stm32l1xx.c ) Если ждать в прерывании то все будет висеть.

Для HSI у меня получилось так , ничего не виснет, HSI запускается каждую секунду :
Спойлер

Код: Выделить всё


#include "stm32l1xx.h"
#include "stm32l1xx_conf.h"

void setClocks(void);

void sleep(void)
{
  PWR_UltraLowPowerCmd(ENABLE);
  PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
}

void setClocks(void)
{
	if( (RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL )//! (RCC->CR & RCC_CR_HSION))
	{
		int to = 10000000;

		RCC->CR |= RCC_CR_HSION;
		while ( (!(RCC->CR & RCC_CR_HSIRDY)) && (to-- >= 0 ) );

		if( RCC->CR & RCC_CR_HSIRDY )
		{
			RCC->CFGR &= ~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLDIV|RCC_CFGR_PLLMUL);

			RCC->CFGR|=RCC_CFGR_PLLSRC_HSI;
			RCC->CFGR|=RCC_CFGR_PLLDIV4 | RCC_CFGR_PLLMUL8;

			RCC->CR|=RCC_CR_PLLON;
			to = 1000000;
			while ( (!(RCC->CR & RCC_CR_PLLRDY)) && (to-- >= 0 ));

			if( RCC->CR & RCC_CR_PLLRDY )
			{
				// slow flash enable
				FLASH->ACR=FLASH_ACR_ACC64;
				FLASH->ACR|=FLASH_ACR_LATENCY;
				FLASH->ACR|=FLASH_ACR_PRFTEN;

				RCC->CFGR |= RCC_CFGR_SW_PLL;
			}else{  RCC->CR &= ~RCC_CR_PLLON;  }
		}else{ RCC->CR &= ~RCC_CR_HSION;} // if hsi not ready disable it

	} // if hsi on
}

int main(void)
{

	RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN |RCC_AHBENR_GPIODEN |RCC_AHBENR_GPIOEEN;
	RCC->APB1ENR |= RCC_APB1ENR_PWREN ;

	RCC->CR &= ~(RCC_CR_HSEON|RCC_CR_HSION);

	GPIOA->OTYPER = 0;
	GPIOA->AFR[0] = 0;
	GPIOA->AFR[1] = 0;
	GPIOA->MODER  =  GPIO_MODER_MODER13_1|GPIO_MODER_MODER14_1 // SWD
			| GPIO_MODER_MODER8_1 // MCO
			;
	GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR13|GPIO_OSPEEDER_OSPEEDR14 | GPIO_OSPEEDER_OSPEEDR8;
	GPIOA->PUPDR = 0;

	GPIOB->OTYPER = 0;
	GPIOB->AFR[0] = 0;
	GPIOB->AFR[1] = 0;
	GPIOB->MODER =  GPIO_MODER_MODER6_0 | GPIO_MODER_MODER7_0 ; // led
	GPIOB->OSPEEDR = GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7;
	GPIOB->PUPDR = 0 ;

	//  mco out
	RCC->CFGR &= ~RCC_CFGR_MCOPRE;
//	RCC->CFGR |= RCC_CFGR_MCO_SYSCLK;
//	RCC->CFGR |= RCC_CFGR_MCO_LSE;
	RCC->CFGR |= RCC_CFGR_MCO_HSI;

	PWR->CR |= PWR_CR_DBP;

	RCC->CSR &= ~RCC_CSR_RTCEN;
	RCC->CSR |= RCC_CSR_RTCRST;	  /* Reset RTC Domain */
	RCC->CSR &= ~RCC_CSR_RTCRST;

	RCC->CSR|= RCC_CSR_LSEON;
	while(!(RCC->CSR & RCC_CSR_LSERDY));

	RCC->CSR &= ~RCC_CSR_RTCSEL;
	RCC->CSR|=RCC_CSR_RTCSEL_LSE;

	RCC->CSR |= RCC_CSR_RTCEN;
	RTC_WaitForSynchro();

    RTC_AlarmTypeDef RTC_AlarmStructure;

    EXTI->PR = EXTI_Line17; // clear irq

    EXTI->IMR = EXTI_IMR_MR17;
    EXTI->EMR = 0;
    EXTI->RTSR = EXTI_RTSR_TR17;

    NVIC_EnableIRQ(RTC_Alarm_IRQn);

    RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All;
    RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);

    RTC_AlarmCmd(RTC_Alarm_A, DISABLE);

    RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_6);

    RTC_ITConfig(RTC_IT_ALRA, ENABLE);
    RTC_AlarmCmd(RTC_Alarm_A, ENABLE);

	while(1)
	{
		sleep();
	} // while

} // main


void RTC_Alarm_IRQHandler (void)
{
	  EXTI->PR = EXTI_Line17;

	  if(RTC->ISR & RTC_ISR_ALRAF  )
	  {
	  RTC->ISR &= ~RTC_ISR_ALRAF;  /* Clear RTC AlarmA Flags */


	  GPIOB->BSRRL = GPIO_BSRR_BS_7;

	  setClocks();

	  for(int i =0;i<100000;i++)__NOP();
	  GPIOB->BSRRH = GPIO_BSRR_BS_7;

	  }
}



Информация по RLC mini находится >тут<
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Сам еще раньше пробовал включение хси и выбор его как систем клок

Код: Выделить всё

void init(void)
{
      
    RCC_ClearITPendingBit(RCC_IT_CSS);
    RCC_DeInit();
    RCC_ClockSecuritySystemCmd(DISABLE);
  
//  RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_3,RCC_PLLDiv_2);
    RCC_HSICmd(ENABLE);
    while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET)
    {}
    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
    RCC_HCLKConfig(RCC_SYSCLK_Div2);      
//  RCC_MSICmd(DISABLE);
//  RCC_HSEConfig(RCC_HSE_OFF);
только это особо не помогало....
Кстати в предложеном коде тоже не заметил строчки выбора хси как систем клок. Там включается хси и идет его ожидание, так же включается плл с ожиданием готовности.
Реклама
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

В предложенном проекте нет непосредсвенного переключения, так как исходя из стмовских примеров и собственных программ строчки включающей HSE было достаточно, что выложенный проект и демонстрирует.
Реклама
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а):Кстати в предложеном коде тоже не заметил строчки выбора хси как систем клок. Там включается хси и идет его ожидание, так же включается плл с ожиданием готовности.
В моем коде включается HSI и затем от него тактируется PLL. Сам мк при этом работает от PLL на максимальной частоте 32МГц. Чтобы чисто HSI был надо сразу после того, как он запустился сделать
RCC->CFGR |= RCC_CFGR_SW_HSI;
А части кода, связанные с PLL удалить.
evilbob писал(а):исходя из стмовских примеров и собственных программ строчки включающей HSE было достаточно, что выложенный проект и демонстрирует.
А для чего достаточно? всмысле зачем нужно включать HSE если не для тактирования процессора?
Информация по RLC mini находится >тут<
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Neekeetos писал(а):evilbob писал(а):
исходя из стмовских примеров и собственных программ строчки включающей HSE было достаточно, что выложенный проект и демонстрирует.

А для чего достаточно? всмысле зачем нужно включать HSE если не для тактирования процессора?
Это к тому что, если не нужны какие-то критичные к частоте моменты, то работу мк настраиваю по минимум, то есть достаточно включить внешний HSE, дождатся его готовности и все, работать дальше; PLL даже не трогать. Понятное дело что такой подход достаточно посредственный. Но если ничего критичного нет, то зачем усложнять себе жизнь?
Как бы без лишних телодвижений, программа прекрастно отрабатывала на базе HSI(без настройки PLL) выход из стоп по внешенму прерыванию, помимо всяких миганий светодиодами. Так вот может быть загвоздка в самом прерывании Аларма ? По даташиту RTC напрямую тактируется от LSE, может гдето есть строчка связывающая HSE(HSI)/PLL с часами(их прерываниями)?
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а): Так вот может быть загвоздка в самом прерывании Аларма ?
Может быть. Тот код который я запостил он работает и с HSI, достаточно везде поменять HSE на HSI. По поводу прерываний я заметил что если их флажки вовремя не сбросить то начинаются глюки. На практике это означает что все трудоемкое (а запуск HSE довольно долгий процесс) лучше из обработчика прерывания вынести все в основной цикл, написать сразу после функции отправки в сон, этот код будет отрабатывать всегда после прерывания когда нужные флажки уже сброшены.
Информация по RLC mini находится >тут<
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Neekeetos, спасибо за труды, все никак не доберусь дома к своей макетке чтобы залить и в тупую проверить выложенный код. А пока есть пара вопросов. Знаю что приведенная настройка флеша это по даташиту, а физически как это сказывается на работе? И вопрос по обработчику прерывания, внутри стоит if с условием срабатывания флага и дальше идет мигание, но бит 17 линии внешнего прерывания заранее сбрасывается, то есть, теоретически, прерывание может срабатывать чаще чем возводится флаг? Чем обусловленно условие if ?
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а): Знаю что приведенная настройка флеша это по даташиту, а физически как это сказывается на работе?
Тормозить начинает :). Если серьезно, то если не увеличить задержку флеша и включить быстрые такты мк может повиснуть. Предел частоты на которой надо включать зависит от напряжения питания ядра. Для обычного 1,8В такты выше 16МГц требуют 1WS , для 1,5В - выше 8МГц и 1,2В - выше 2,1МГц .
evilbob писал(а):И вопрос по обработчику прерывания, внутри стоит if с условием срабатывания флага и дальше идет мигание, но бит 17 линии внешнего прерывания заранее сбрасывается, то есть, теоретически, прерывание может срабатывать чаще чем возводится флаг? Чем обусловленно условие if ?
Там два флага, у EXTI и у RTC. Первый скидывается сразу а второй проверяется и если он есть то тоже скидывается и моргает диод. В данном случае думаю лучше сбрасывать флаги в начале прерывания, у часов вроде нет флажков переполнения, так что если второе прерывание придет пока это выполняется, то обработчик будет вызван повторно. А если сбрасывать флаги в конце прерывания, то лишние прерывания будут просто потеряны. Само условие нужно потому, что этот вектор прерывания может вызываться еще и когда второй будильник срабатывает.
Информация по RLC mini находится >тут<
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Neekeetos писал(а):Само условие нужно потому, что этот вектор прерывания может вызываться еще и когда второй будильник срабатывает
Ну а так как настроен только будильник А условие можно опустить?
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а):настроен только будильник А условие можно опустить?
Можно, но флаг все равно нужно сбрасывать
Информация по RLC mini находится >тут<
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Neekeetos писал(а):Можно, но флаг все равно нужно сбрасывать
Ну за флаг понятно (он и так сбрасывается), я говорю именно за условие, то есть, как будет отрабатывать прерывание без if? Кстати, в какой программе проверялся код?
Последний раз редактировалось evilbob Сб май 23, 2015 08:51:42, всего редактировалось 1 раз.
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Проверил на своей макетке код, таже барада, завис и не блымает :(
Сразу ругнулся на объявление часовой структуры в середине кода (поэтому и интересуюсь, что за программа)
Понимаю, что достал со своими вопросами, но тут уже просто любопытно разобратся почему не работает.
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а):Проверил на своей макетке код, таже барада, завис и не блымает :(
Ну раз такое дело придется по порядку искать. Код, который кварц и плл включает был удален из проекта? Я имею в виду
Проверь в своем проекте файл system_stm32l1xx.c , там есть функция SystemInit которая вызывается при сбросе мк и настраивает его на работу с нужными тактами, переключая с изначального MSI, если закомментишь вызов SetSysClock()
В твоем проекте это было , нужно удалить и заново проверить работает или нет.
evilbob писал(а):Сразу ругнулся на объявление часовой структуры в середине кода (поэтому и интересуюсь, что за программа)
Обычный gcc. Я тут кстати обнаружил такой нюанс с будильником, у меня ж чипец впаян MD и я использовал

Код: Выделить всё

RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_6);
вполне возможно на это ругается.
На легком л1хх будильник включается только раз в секунду или реже, включение секундного поэтому выглядит так:

Код: Выделить всё

    RTC->WPR = 0xCA;
    RTC->WPR = 0x53;
    RTC->CR = RTC_CR_ALRAIE;
    RTC->ALRMAR = RTC_AlarmMask_DateWeekDay|RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes|RTC_AlarmMask_Seconds;
    RTC->CR |= RTC_CR_ALRAE;
Информация по RLC mini находится >тут<
Аватара пользователя
evilbob
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Вт авг 27, 2013 10:51:04
Откуда: Донецк, Украина

Re: Часы реального времени без HSE

Сообщение evilbob »

Не совсем понял про SystemInit, разве строчки в самом коде про инициализацию HSI и тд не имеют больший приоритет чем данная функция? Ну все равно проверю.
Про программу, имел ввиду там Кокос или мож Кейл, Иар? или тут все по суровому, блокнот и make ?
На саму функцию субсекунд не ругается, тут все нормально, по идее должен нормально отрабатывать (сам не вникал в данную функция, тем более мне не просто секунды тикать нужно, а более глобально срабатывать на конкретные часы, дни). Лично у меня кейл ругнулся на объявление структуры часов (по сути переменная) после строчек с запуском тактирования шин (основной код)
Аватара пользователя
Neekeetos
Держит паяльник хвостом
Сообщения: 993
Зарегистрирован: Пн сен 18, 2006 11:16:05
Откуда: Тула
Контактная информация:

Re: Часы реального времени без HSE

Сообщение Neekeetos »

evilbob писал(а):Не совсем понял про SystemInit, разве строчки в самом коде про инициализацию HSI и тд не имеют больший приоритет чем данная функция?
Влияет то, что настройки находятся не в том состоянии, какое ожидаешь. Ты к примеру сам писал что такты должны быть MSI а реально в кейловском проекте при старте вызывается этот инит и запускается кварц+плл на максимальной частоте, причем оно ждет пока кварц запустится, так что при сбросе мк если у него нет кварца еще и тормоза планируются если не полный ступор.
evilbob писал(а):Про программу, имел ввиду там Кокос или мож Кейл, Иар? или тут все по суровому, блокнот и make ?
Эклипс+gcc
evilbob писал(а):На саму функцию субсекунд не ругается, тут все нормально, по идее должен нормально отрабатывать (сам не вникал в данную функция, тем более мне не просто секунды тикать нужно, а более глобально срабатывать на конкретные часы, дни). Лично у меня кейл ругнулся на объявление структуры часов (по сути переменная) после строчек с запуском тактирования шин (основной код)
На счет структур не подскажу, сам их не использую практически. Сделал из любопытства на легком мк прерывания чаще чем раз в секунду код получился такой:
Спойлер

Код: Выделить всё

int main(void)
{

	RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN |RCC_AHBENR_GPIODEN |RCC_AHBENR_GPIOEEN;
	RCC->APB1ENR |= RCC_APB1ENR_PWREN ;

	RCC->CR &= ~(RCC_CR_HSEON|RCC_CR_HSION);

	GPIOA->OTYPER = 0;
	GPIOA->AFR[0] = 0;
	GPIOA->AFR[1] = 0;
	GPIOA->MODER  =  GPIO_MODER_MODER13_1|GPIO_MODER_MODER14_1 // SWD
			| GPIO_MODER_MODER8_1 // MCO
			;
	GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR13|GPIO_OSPEEDER_OSPEEDR14 | GPIO_OSPEEDER_OSPEEDR8;
	GPIOA->PUPDR = 0;

	GPIOB->OTYPER = 0;
	GPIOB->AFR[0] = 0;
	GPIOB->AFR[1] = 0;
	GPIOB->MODER =  GPIO_MODER_MODER6_0 | GPIO_MODER_MODER7_0 ; // led
	GPIOB->OSPEEDR = GPIO_OSPEEDER_OSPEEDR6 | GPIO_OSPEEDER_OSPEEDR7;
	GPIOB->PUPDR = 0 ;

	//  mco out
	RCC->CFGR &= ~RCC_CFGR_MCOPRE;
//	RCC->CFGR |= RCC_CFGR_MCO_SYSCLK;
//	RCC->CFGR |= RCC_CFGR_MCO_LSE;
	RCC->CFGR |= RCC_CFGR_MCO_HSI;

	PWR->CR |= PWR_CR_DBP;

	RCC->CSR &= ~RCC_CSR_RTCEN;
	RCC->CSR |= RCC_CSR_RTCRST;	  /* Reset RTC Domain */
	RCC->CSR &= ~RCC_CSR_RTCRST;

	RCC->CSR|= RCC_CSR_LSEON;
	while(!(RCC->CSR & RCC_CSR_LSERDY));

	RCC->CSR &= ~RCC_CSR_RTCSEL;
	RCC->CSR|=RCC_CSR_RTCSEL_LSE;

	RCC->CSR |= RCC_CSR_RTCEN;
	RTC_WaitForSynchro();


    EXTI->PR = EXTI_Line17|EXTI_Line20; // clear irq

    EXTI->IMR = EXTI_IMR_MR17|EXTI_IMR_MR20;
    EXTI->EMR = 0;
    EXTI->RTSR = EXTI_RTSR_TR17|EXTI_RTSR_TR20;

    NVIC_EnableIRQ(RTC_Alarm_IRQn);
    NVIC_EnableIRQ(RTC_WKUP_IRQn);

    RTC->WPR = 0xCA;
    RTC->WPR = 0x53;

    RTC->CR = RTC_CR_ALRAIE|RTC_CR_WUTIE;
    RTC->ALRMAR = RTC_AlarmMask_DateWeekDay|RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes|RTC_AlarmMask_Seconds;
    RTC->WUTR = 0x03FF;

    RTC->CR |= RTC_CR_ALRAE|RTC_CR_WUTE;

	while(1)
	{
		sleep();
		setClocks();
	} // while

} // main

void RTC_WKUP_IRQHandler(void)
{


	if(RTC->ISR & RTC_ISR_WUTF  )
	  {

		  GPIOB->BSRRL = GPIO_BSRR_BS_6;
		  for(int i =0;i<10000;i++)__NOP();
		  GPIOB->BSRRH = GPIO_BSRR_BS_6;

		  RTC->ISR &= ~RTC_ISR_WUTF;  
	  }
	EXTI->PR = EXTI_Line20;
}

void RTC_Alarm_IRQHandler (void)
{


	  if(RTC->ISR & RTC_ISR_ALRAF  )
	  {

	  GPIOB->BSRRL = GPIO_BSRR_BS_7;
	  //setClocks();
	  for(int i =0;i<10000;i++)__NOP();
	  GPIOB->BSRRH = GPIO_BSRR_BS_7;

	  RTC->ISR &= ~RTC_ISR_ALRAF; 
	  }

	  EXTI->PR = EXTI_Line17;
}
Но это так, без особой практической пользы.
Информация по RLC mini находится >тут<
Ответить

Вернуться в «ARM»