老實說Real-time Clok這項功能,我也只有在PC和手機上有見過,其他的應用產品上我也很少見到。

言歸正傳在STM32F4 RTC這項功能在IC內部就有內建,在早期的8051是如果要做RCT是需要外接IC的。

而RTC只需要透過register setting就可以達成12 or 24 format也有提供2個 alrm interrupt, wake up。

由上面的Function diagram可以得知幾個重要的地方。

1. 紫色的框框是我們主要必須配置的Block

2. Alarm 有 A & B 可以使用且有 ALRAF ALRBF,2個flag可以知道是否有發生Event

3. 反黑的2個 block 是我們取得RTC時間的Register

4. 在block最上方有一個backup register和RTC tamper control register做了一下功課,理解是因為RTC與SRAM有關因為必須存放資料。而STM32F4有一塊區域叫做backup domain這塊區域是由power switch做控制分成Standby/VBAT/low power(LP)。所以必須要enable power control register backup access。

RTC配置

 void RTC_Config(void)
{
RTC_InitTypeDef RTC_InitStructure;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
RCC_RTCCLKCmd(ENABLE);
RTC_WaitForSynchro(); if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x1234)
{
RTC_WriteProtectionCmd(DISABLE);
RTC_EnterInitMode(); RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_InitStructure.RTC_AsynchPrediv = 0x7D-;
RTC_InitStructure.RTC_SynchPrediv = 0xFF-;
RTC_Init(&RTC_InitStructure); RTC_TimeStructure.RTC_Seconds = 0x00;
RTC_TimeStructure.RTC_Minutes = ;
RTC_TimeStructure.RTC_Hours = 0x01;
RTC_TimeStructure.RTC_H12 = RTC_H12_AM;
RTC_SetTime(RTC_Format_BIN,&RTC_TimeStructure); RTC_DateStructure.RTC_Date = ;
RTC_DateStructure.RTC_Month = ;
RTC_DateStructure.RTC_WeekDay= RTC_Weekday_Thursday;
RTC_DateStructure.RTC_Year = ;
RTC_SetDate(RTC_Format_BIN,&RTC_DateStructure); RTC_ExitInitMode();
RTC_WriteBackupRegister(RTC_BKP_DR0,0x1234);
RTC_WriteProtectionCmd(ENABLE);
}
PWR_BackupAccessCmd(DISABLE);
}

RTC有防讀寫保護所以在設定時必須要進入/出init mode

 RTC_EnterInitMode();
RTC_ExitInitMode();

再網上我最有疑問的設定是下列這句

 if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x1234)

這句設定是指說DR0必須要判斷是否為第一次寫入設定如果不是則進入if繼續做初始化。否則就不做初始化設定。

因為我的板子是使用F4系列的Discovery所以我的RTC沒有LSE可以用,所以我的設定是LSI (internal和External Clock)。

 int main(void)
{
LED_Config();
Delay_Init(); /* initialize delay function */
USART_Config();
RTC_Config();
printf("\n--------------------------------------------------\n");
printf("\n STM32F4 RTC Function test \n");
printf("\n--------------------------------------------------\n"); while()
{
RTC_GetTime(RTC_Format_BIN, &data_time);
RTC_GetDate(RTC_Format_BIN, &data_date);
printf("%d-%02d-%02d ,", data_date.RTC_Year + , data_date.RTC_Month, data_date.RTC_Date);
printf("%02d:%02d:%02d\n", data_time.RTC_Hours, data_time.RTC_Minutes, data_time.RTC_Seconds);
DelayMs();
}
}

(STM32F4) Real-time Clock的更多相关文章

  1. STM32F4 Timer External Clock TI2 Both Edges Demo

    #define CLK_FREQ ( 10000 ) #define CORE_FREQ ( 168000000 ) static void TIM_GPIO_Config( void ) { GPI ...

  2. SPI中的极性CPOL和相位CPHA

    详解SPI中的极性CPOL和相位CPHA SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH, 实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 ...

  3. STM32F4时钟配置分析

    //学习STM32F4的过程中关于时钟上面讲的比较好 特地转发与大家分享 STM32F4时钟设置分析 原文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环 ...

  4. STM32F4 SPI with DMA

    STM32F4 SPI with DMA A few people have requested code, so I thought I’d post the code showing how I’ ...

  5. 78-WS2812-Library (STM32F4)

    78-WS2812-Library (STM32F4) //-------------------------------------------------------------- // File ...

  6. VGA Output from STM32F4 Discovery board

    VGA Output from STM32F4 Discovery board I love the web! There are so many cool projects out there, a ...

  7. STM32F4 External interrupts

    STM32F4 External interrupts Each STM32F4 device has 23 external interrupt or event sources. They are ...

  8. STM32F4: Generating parallel signals with the FSMC

    STM32F4: Generating parallel signals with the FSMC The goal: The memory controller can be used to ge ...

  9. How to properly set clock speed for STM32F4xx devices

    http://stm32f4-discovery.com/2015/01/properly-set-clock-speed-stm32f4xx-devices/ I see that you have ...

随机推荐

  1. JAVA 用axis1 调用.NET的web service

    1.去官网下载axis的jar包,我下的是1.4版本的 http://axis.apache.org/axis/java/releases.html 2.JAVA 代码: public void my ...

  2. 关于jquery在页面初始化时radio控件选定默认值的问题

    网上找了很多资料,都是比较旧版本的方法,新版的jquery都已经抛弃了. 正确的代码是 $('input:radio[name="statusRadios"][value=&quo ...

  3. saltstack系列(六)——zmq扩展(二)

    问题 我们已经熟练的掌握了REQ/REP模式,它是一个一对多的模式,一个REP对应多个REQ. 但是现实工作中,我们会遇到这样的难题,一个REP无法满足REQ的提问,因为REQ太多了,虽然可以增加一个 ...

  4. 值得一做》关于一道DP+SPFA的题 BZOJ1003 (BZOJ第一页计划) (normal-)

    这是一道数据范围和评测时间水的可怕的题,只是思路有点难想,BUT假如你的思路清晰,完全了解怎么该做,那就算你写一个反LLL和反SLE都能A,如此水的一道题,你不心动吗? 下面贴出题目 Descript ...

  5. 485. Max Consecutive Ones最长的连续1的个数

    [抄题]: Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Inpu ...

  6. 1-new对象与直接构建对象

    #include <iostream> using namespace std; class A { public: A(){} A (int a){ this->a = a; } ...

  7. Java多线程共享变量控制

    1. 可见性 如果一个线程对共享变量值的修改,能够及时的被其他线程看到,叫做共享变量的可见性.如果一个变量同时在多个线程的工作内存中存在副本,那么这个变量就叫共享变量 2. JMM(java内存模型) ...

  8. centos 安装mongodb3.0

    一.添加yum源 vi /etc/yum.repos.d/mongodb-org-3.0.repo 请添加如下配置(64位系统): [mongodb-org-3.0] name=MongoDB Rep ...

  9. WEB前端--CSS

    一.认识CSS 1.概念 CSS(Cascading Style Sheet,层叠样式表),可以将网页制作的更加绚丽多彩.它可以有效的对页面的布局.字体.颜色.背景和其它效果实现更加精确的控制. 2. ...

  10. 【2008nmj】Logistic回归二元分类感知器算法.docx

    给你一堆样本数据(xi,yi),并标上标签[0,1],让你建立模型(分类感知器二元),对于新给的测试数据进行分类. 要将两种数据分开,这是一个分类问题,建立数学模型,(x,y,z),z指示[0,1], ...