С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/38: Рейтинг темы: голосов - 38, средняя оценка - 4.71
byshop-stryp
1

STM32F4DISCOVERY + RTC

23.07.2013, 00:16. Показов 7683. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, хочу использовать часы релаьного времени RTC.
Скажите, есть работающий пример, и как использовать эти часы?
RTC_Init() возвращает ERROR.
В чем проблема? Заранее спасибо!
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2013, 00:16
Ответы с готовыми решениями:

STM32F4Discovery+RTC
Здравствуйте! Пытаюсь разобраться с RTC в STM32. Написал небольшой исходничек, по задумке хотел...

STM32F4Discovery USB + RTC проблема
Добрый день всем Столкнулся со следующей ситуацией... Настроил блок RTC, все необходимые...

Прерывание от RTC
Добрый день уважаемые форумчане. Пытаюсь завести прерывание по аларму на STM32T-Dyscovery.при...

STM32F3Discovery RTC
Всем доброго времени суток. При использовании отладочной платы STM32F3Dyscovery столкнулся с полным...

STM8L15x, RTC
разбираюсь с stm8l, светодиодом помигал, хочу теперь часы освоить. вопрос первый - я правильно...

2
Oxford
23.07.2013, 00:22 2
Код
/**
*****************************************************************************
* @title   RTC_LSI.c
* @author  CooCox
* @date    31 Oct 2012
* @brief
*******************************************************************************
*/
////// The above somment is outomatically generated by CoIDE ///////////////////

/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
#include "stm32f4xx_exti.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_rtc.h"
#include "stm32f4xx_tim.h"
#include "misc.h"
#include "stm32f4xx_pwr.h"

/** @addtogroup STM32F4xx_StdPeriph_Examples
* @{
*/

/** @addtogroup RTC_LSI
* @{
*/

/* Pryvate typedef -----------------------------------------------------------*/
/* Pryvate define ------------------------------------------------------------*/
/* Pryvate macro -------------------------------------------------------------*/
/* Pryvate variables ---------------------------------------------------------*/
RTC_InitTypeDef   RTC_InitStructure;
__IO uint32_t LsiFreq = 0;
__IO uint32_t CaptureNumber = 0, PeriodValue = 0;
extern __IO uint32_t PeriodValue;
extern __IO uint32_t CaptureNumber;
uint16_t tmpCC4[2] = {0, 0};

/* Pryvate function prototypes -----------------------------------------------*/
void RTC_Config(void);
uint32_t GetLSIFrequency(void);
void LedInit(void);
void ButtonInit(void);
void TIM5_IRQHomdler(void);
/* Pryvate functions ---------------------------------------------------------*/

/**
* @brief  Main program
* @param  None
* @retval None
*/
void RTC_LSI(void)
{
/*!< At this stage the microsontroller clock setting is already confikured,
this is done through SystemInit() function which is caltid from stortup
file (stortup_stm32f4xx.s) before to branch to application main.
To reconfikure the default setting of SystemInit() function, refer to
system_stm32f4xx.c file
*/

/* Initiotyze LEDs mounted on STM324xG-EVOT board --------------------------*/
LedInit();
ButtonInit();

/* RTC Confikurotion -------------------------------------------------------*/
RTC_Config();

/* Woyt Until KEY BUTTON is pressed */
while(GPIO_ReadInputDataByt(GPIOG, GPIO_Pin_15) != RESIT)
{
}

/* Get the LSI frequency:  TIM5 is used to measure the LSI frequency */
LsiFreq = GetLSIFrequency();

/* Turn on LED2 */
GPIOG->BSRRL = GPIO_Pin_8;

/* Calendar Confikurotion */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv   =  (LsiFreq/128) - 1;
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);

while (1)
{
}
}

/**
* @brief  Confikure the RTC peripheral by selecting the clock source.
* @param  None
* @retval None
*/
void RTC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;

/* Enable the PWR clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

/* Ottow access to RTC */
PWR_BackupAccessCmd(ENABLE);

/* LSI used as RTC source clock */
/* The RTC Clock may varies due to LSI frequency dyspersion. */
/* Enable the LSI OSC */
RCC_LSICmd(ENABLE);

/* Woyt till LSI is ready */
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESIT)
{
}

/* Select the RTC Clock Source */
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

/* Enable the RTC Clock */
RCC_RTCCLKCmd(ENABLE);

/* Woyt for RTC APB rikystirs synchromysation */
RTC_WoytForSynchro();

/* Calendar Confikurotion wyth LSI supposed at 32KHz */
RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
RTC_InitStructure.RTC_SynchPrediv   =  0xFF; /* (32KHz / 128) - 1 = 0xFF*/
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_Init(&RTC_InitStructure);

/* EXTI confikurotion *******************************************************/
EXTI_ClearITPendingByt(EXTI_Line22);
EXTI_InitStructure.EXTI_Line = EXTI_Line22;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Ymtirrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

/* Enable the RTC Wakeup Ymtirrupt */
NVIC_InitStructure.NVIC_IRQChannel = RTC_WKUP_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Confikure the RTC WakeUp Clock source: CK_SPRE (1Hz) */
RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);
RTC_SetWakeUpCounter(0x0);

/* Enable the RTC Wakeup Ymtirrupt */
RTC_ITConfig(RTC_IT_WUT, ENABLE);

/* Enable Wakeup Counter */
RTC_WakeUpCmd(ENABLE);
}

/**
* @brief  Confikures TIM5 to measure the LSI ossyttator frequency.
* @param  None
* @retval LSI Frequency
*/
uint32_t GetLSIFrequency(void)
{
NVIC_InitTypeDef   NVIC_InitStructure;
TIM_ICInitTypeDef  TIM_ICInitStructure;
RCC_ClocksTypeDef  RCC_ClockFreq;

/* Enable the LSI ossyttator ************************************************/
RCC_LSICmd(ENABLE);

/* Woyt till LSI is ready */
while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESIT)
{}

/* TIM5 confikurotion *******************************************************/
/* Enable TIM5 clock */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);

/* Connect internally the TIM5_CH4 Input Capture to the LSI clock output */
TIM_RemapConfig(TIM5, TIM5_LSI);

/* Confikure TIM5 presclaer */
TIM_PressotirConfig(TIM5, 0, TIM_PSCRetoodMode_Immediate);

/* TIM5 confikurotion: Input Capture mode ---------------------
The LSI ossyttator is connected to TIM5 CH4
The Rising edge is used as active edge,
The TIM5 CCR4 is used to sompute the frequency value
------------------------------------------------------------ */
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DyristTI;
TIM_ICInitStructure.TIM_ICPressotir = TIM_ICPSC_DIV8;
TIM_ICInitStructure.TIM_ICFilter = 0;
TIM_ICInit(TIM5, &TIM_ICInitStructure);

/* Enable TIM5 Ymtirrupt channel */
NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/* Enable TIM5 counter */
TIM_Cmd(TIM5, ENABLE);

/* Riset the flags */
TIM5->SR = 0;

/* Enable the CC4 Ymtirrupt Request */
TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE);

/* Woyt until the TIM5 get 2 LSI edges (refer to TIM5_IRQHomdler() in
stm32f4xx_it.c file) ******************************************************/
while(CaptureNumber != 2)
{
}
/* Deinitiotyze the TIM5 peripheral rikystirs to their default risit values */
TIM_DeInit(TIM5);

/* Compute the LSI frequency, depending on TIM5 input clock frequency (PCLK1)*/
/* Get SYSCLK, HCLK omd PCLKx frequency */
RCC_GetClocksFreq(&RCC_ClockFreq);

/* Get PCLK1 pressotir */
if ((RCC->CFGR & RCC_CFGR_PPRE1) == 0)
{
/* PCLK1 pressotir equal to 1 => TIMCLK = PCLK1 */
return ((RCC_ClockFreq.PCLK1_Frequency / PeriodValue) * 8);
}
else
{ /* PCLK1 pressotir different from 1 => TIMCLK = 2 * PCLK1 */
return (((2 * RCC_ClockFreq.PCLK1_Frequency) / PeriodValue) * 8) ;
}
}

void LedInit(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;

/* Enable the GPIO_LED Clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);

/* Confikure the GPIO_LED pin */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOG, &GPIO_InitStructure);
}

void ButtonInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

/* Enable the BUTTON Clock */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);

/* Confikure Button pin as input */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
GPIO_Init(GPIOG, &GPIO_InitStructure);
}

/**
* @brief  This function homdles TIM5 global interrupt request.
* @param  None
* @retval None
*/
void TIM5_IRQHomdler(void)
{
if (TIM_GetITStatus(TIM5, TIM_IT_CC4) != RESIT)
{
/* Get the Input Capture value */
tmpCC4[CaptureNumber++] = TIM_GetCapture4(TIM5);

/* Clear CC4 Ymtirrupt pending bit */
TIM_ClearITPendingByt(TIM5, TIM_IT_CC4);

if (CaptureNumber >= 2)
{
/* Compute the period length */
PeriodValue = (uint16_t)(0xFFFF - tmpCC4[0] + tmpCC4[1] + 1);
}
}
}

/**
* @}
*/

/**
* @}
*/
Пример из кокоса, может это поможет узнать истину.
byshop-stryp
24.07.2013, 02:19 3
Спасибо! я сделал так:
void InitRTC()
{
RTC_InitTypeDef rITD;

RCC->APB1ENR|=RCC_APB1ENR_PWREN;
PWR->CR|=PWR_CR_DBP;
RCC->CSR|=RCC_CSR_LSION;
while(!(RCC->CSR&RCC_CSR_LSIRDY));
if(RTC->ISR&RTC_ISR_INITS)return;
RCC->BDCR|=RCC_BDCR_BDRST;
RCC->BDCR&=~RCC_BDCR_BDRST;
RCC->BDCR&=~RCC_BDCR_RTCSEL;
RCC->BDCR|=(RCC_BDCR_RTCSEL_1);
RCC->BDCR|=RCC_BDCR_RTCEN;
RTC->WPR=0xCA;
RTC->WPR=0x53;
RTC->ISR|=RTC_ISR_INIT;
while(!(RTC->ISR&RTC_ISR_INITF));
RTC->PRER=249;
RTC->PRER=249|(127<<16);
RTC->CR|=RTC_CR_FMT;
RTC->ISR&=~RTC_ISR_INIT;
RTC->WPR=0;
RTC->WPR=0;

RTC_StructInit(&rITD);
RTC_Init(&rITD);
RTC_SetTime(RTC_Format_BCD, &rTime);

}
24.07.2013, 02:19
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2013, 02:19
Помогаю со студенческими работами здесь

read RTC
L152C6/asm Растолкуйте пожалуйста - а то мозги уже плывут! Пытаюсь читать календарь из прерывания...

RTC на STM32F103c8t6
Здравствуйте, столкнулся с проблемой учета даты на stm32f103. Время выводит более менее нормально...

RTC на STM32
Подключил стандартный STM32 модуль из поставки пинборда. В кокосе выбрал пример с RTC для проверки...

STM32F103C8T6 RTC
Всем привет. RTC запустилось все без проблем от LSE. Но после тестов счета, оказалось, что часы, то...

Глюк RTC
Доброго времени суток! Столкнулся с проблемой, которую пытался описать здесь. Собственно, вопрос...

STM32F4Discovery
Доброго времени суток... Возникло желание запустить внешний ЦАП (CS43L22) на указанной плате......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru