(STM32F4) Real-time Clock
老實說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的更多相关文章
- STM32F4 Timer External Clock TI2 Both Edges Demo
#define CLK_FREQ ( 10000 ) #define CORE_FREQ ( 168000000 ) static void TIM_GPIO_Config( void ) { GPI ...
- SPI中的极性CPOL和相位CPHA
详解SPI中的极性CPOL和相位CPHA SPI由于接口相对简单(只需要4根线),用途算是比较广泛,主要应用在 EEPROM,FLASH, 实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间 ...
- STM32F4时钟配置分析
//学习STM32F4的过程中关于时钟上面讲的比较好 特地转发与大家分享 STM32F4时钟设置分析 原文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环 ...
- 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’ ...
- 78-WS2812-Library (STM32F4)
78-WS2812-Library (STM32F4) //-------------------------------------------------------------- // File ...
- 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 ...
- STM32F4 External interrupts
STM32F4 External interrupts Each STM32F4 device has 23 external interrupt or event sources. They are ...
- STM32F4: Generating parallel signals with the FSMC
STM32F4: Generating parallel signals with the FSMC The goal: The memory controller can be used to ge ...
- 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 ...
随机推荐
- Android输入法部分遮挡UI的问题(与EditText框相切)
首先,我们来看看遇到问题的图片 遇到的问题是,当点击输入框之后,输入法会切到红线的位置,理想状态应该是在绿线位置 那么,是什么原因造成的呢? 问题其实很简单,是因为drawableleft图片比该输入 ...
- codeforce469DIV2——C. Zebras
题意 0, 010, 01010 这一类的01交替且开头和结尾都为0的序列被称为zebra序列.给出一段01序列,尝试能否把他分为k个子序列使得每个子序列都是zebra序列. 分析 这个题应该算是水题 ...
- VMware设置及linux静态ip设置
1. VMWARE虚拟机NAT模式上网设置 1.1. VM虚拟机设置 1.1.1. 虚拟机全局设置 启动虚拟机选择[虚拟网络编辑器] 如果需要管理员权限点[更改设置],没有提示这忽略这一步 选 ...
- QT编译时出现警告 Warning: Class Node implements the interface QGraphicsItem but does not list it in Q_INTERFACES. qobject_cast to QGraphicsItem will not work!
1.一定要将public QObject放在public QGraphicsItem的前面,并且在该类的定义中添加Q_OBJECT宏. class XXGraphicsItem : public QO ...
- Marvel
Marvel and what it is From http://www.tuicool.com/articles/qA3yau With marvel you can get an overvie ...
- npm link和react native的问题
问题说明: 需要自己开发一个ReactNative插件,这个插件在独立git仓库,那么怎么把这个插件安装到主项目的依赖里,并且方便对插件的修改调试 方案一: 把插件发布到npm仓库,每次主项目通过np ...
- codefirst updatebase
http://blog.csdn.net/dj2008/article/details/23756895 http://blog.csdn.net/gentle_wolf/article/detail ...
- [转]-webkit-overflow-scrolling:touch的应用
-webkit-overflow-scrolling 用来控制元素在移动设备上是否使用滚动回弹效果. 在移动端上,在你用overflow-y:scorll属性的时候,你会发现滚动的效果很木,很慢,这时 ...
- Java集合类总结 (三)
HashSet类 关于HashMap的实现细节 HashMap是用LinkedList实现的,每个list被称为一个桶(bucket),在hashmap中要查找一个元素,首先对传入的key进行散列,并 ...
- html5标签兼容低版本浏览器
随着html5(后面用h5代表)标签越来越广泛的使用,IE不识别h5标签的问题让人很是烦恼. 在火狐和chrome之类的浏览器中,遇到不认识的标签,只要给个display:block属性,就能让这个元 ...