stm8 rtc时钟

发布者:TechVoyager最新更新时间:2017-02-04 来源: eefocus关键字:stm8  rtc时钟 手机看文章 扫描二维码
随时随地手机看文章

stm8 rtc时钟可以使用内部低频时钟源,或者外部低速32768Hz时钟源,关于rtc部分代码如下:


  1. #include   

  2. #include   

  3.   

  4. void init_rtc(void)  

  5. {  

  6.     RTC_InitTypeDef RTC_InitStr;  

  7.     RTC_TimeTypeDef RTC_TimeStr;  

  8.     RTC_DateTypeDef RTC_DateStr;  

  9.   

  10. #if 0  

  11.     /* LSI */  

  12.     CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);  

  13.     CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);  

  14.   

  15.     RTC_InitStr.RTC_HourFormat = RTC_HourFormat_24;  

  16.     RTC_InitStr.RTC_AsynchPrediv = 0x7C;  

  17.     RTC_InitStr.RTC_SynchPrediv = 0x012F;  

  18.     RTC_Init(&RTC_InitStr);  

  19. #else  

  20.     /* LSE */  

  21.     CLK_LSEConfig(CLK_LSE_ON);  

  22.     while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);  

  23.     CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);  

  24.     CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);  

  25.   

  26.     RTC_InitStr.RTC_HourFormat = RTC_HourFormat_24;  

  27.     RTC_InitStr.RTC_AsynchPrediv = 127;  

  28.     RTC_InitStr.RTC_SynchPrediv = 255;  

  29.     RTC_Init(&RTC_InitStr);  

  30. #endif  

  31.   

  32.     RTC_TimeStructInit(&RTC_TimeStr);  

  33.     RTC_TimeStr.RTC_Hours = 00;  

  34.     RTC_TimeStr.RTC_Minutes = 00;  

  35.     RTC_TimeStr.RTC_Seconds = 00;  

  36.     RTC_SetTime(RTC_Format_BIN, &RTC_TimeStr);  

  37.   

  38.     RTC_DateStructInit(&RTC_DateStr);  

  39.     RTC_DateStr.RTC_WeekDay = RTC_Weekday_Tuesday;  

  40.     RTC_DateStr.RTC_Date = 2;  

  41.     RTC_DateStr.RTC_Month = RTC_Month_February;  

  42.     RTC_DateStr.RTC_Year = 16;  

  43.     RTC_SetDate(RTC_Format_BIN, &RTC_DateStr);  

  44. }  

  45.   

  46. void rtc_get_time(char *buf)  

  47. {  

  48.     RTC_TimeTypeDef RTC_TimeStr;  

  49.   

  50.     while (RTC_WaitForSynchro() != SUCCESS);  

  51.   

  52.     RTC_GetTime(RTC_Format_BIN, &RTC_TimeStr);  

  53.   

  54.     sprintf(buf, "%02d:%02d:%02d",  

  55.         RTC_TimeStr.RTC_Hours & 0xff, RTC_TimeStr.RTC_Minutes & 0xff, RTC_TimeStr.RTC_Seconds & 0xff);  

  56. }  

  57.   

  58. void rtc_get_date(char *buf)  

  59. {  

  60.     RTC_DateTypeDef RTC_DateStr;  

  61.   

  62.     while (RTC_WaitForSynchro() != SUCCESS);  

  63.   

  64.     RTC_GetDate(RTC_Format_BIN, &RTC_DateStr);  

  65.   

  66.     sprintf(buf, "%04d-%02d-%02d",  

  67.         (RTC_DateStr.RTC_Year & 0xff) + 2000, RTC_DateStr.RTC_Month & 0xff, RTC_DateStr.RTC_Date & 0xff);  

  68. }  

关于rtc定时唤醒,进入halt模式使用编译器提供的halt()函数就可以了,如果需要定时唤醒,需要对rtc做相应的配置,代码如下:

  1. /* maximum wakeup time is (0xFFFF + 1) * 31.25ms = 2048s */  

  2. void init_rtc(void)  

  3. {  

  4.     CLK_LSEConfig(CLK_LSE_ON);  

  5.   

  6.     while (CLK_GetFlagStatus(CLK_FLAG_LSERDY) == RESET);  

  7.   

  8.     CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_64);  

  9.   

  10.     CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);  

  11.   

  12.     RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);  

  13.   

  14.     RTC_ITConfig(RTC_IT_WUT, ENABLE);  

  15.   

  16.     enableInterrupts();  

  17.       

  18.     RTC_SetWakeUpCounter(800);  

  19.       

  20.     RTC_WakeUpCmd(ENABLE);  

  21. }  

这里配置的是800×31.25=25s唤醒一次,唤醒之后,触发rtc唤醒中断,可以在中断函数中做相关处理,如果需要再次进入halt模式,重新调用halt()函数就可以了。


关键字:stm8  rtc时钟 引用地址:stm8 rtc时钟

上一篇:stm8 clock
下一篇:ubuntu下搭建msp430开发环境

推荐阅读最新更新时间:2024-03-16 15:32

如何在STM8微控制器上使用GPIO
原理图 通用设计 使用PIC和AVR器件时,您通常需要获取该特定器件的数据表,并了解如何使用外设。有时,一个PIC上的外设可能与另一个PIC上的外设不同,因此不能简单地将代码从一个PIC复制并粘贴到另一个PIC。但是,STM8完全不同,因为所有STM8设备都使用通用布局而不是具有唯一配置。这意味着为一个STM8设计的代码可以直接复制并粘贴到不同的控制器,它仍然可以工作(假设新设备具有所需的外设)。 一个典型的例子是UART外设。 STM8器件最多可以有三个UART端口(1,2和3),一个STM8器件上的UART1与另一个STM8器件上的UART1相同。但是,各个STM8器件的数据表中没有太多关于如何使用外设的信息,因此在使
[单片机]
如何在<font color='red'>STM8</font>微控制器上使用GPIO
STM8单片机学习总结04
所做的“功率LED板”,通过使用STM8完成手机、电脑通过蓝牙控制功率器件的有效动作,自己编写“代码”已经完全调通,其中也遇到不少问题,列举如下: --------------------------制作方面----------------------- 01)、首先就是MCU的选择; 考虑的主要要素为:价格低、资源够,后来又添加了“封装小”;实际中,但以“功能实现”而言,“51单片机”、“stm32”、“MSP430”、“AVR”全部可以满足需求,但综合考虑后,可能得仔细斟酌,新闻上面报道过现在已经有“小封装”、“功能足”的“51单片机”,价格在“1.0RMB”左右,但未具体查询过,后续有需求时,再更新; 02)、然后,“原
[单片机]
STM8支持哪些RTOS操作系统?
一、引伸问题 回答这个问题之前,引伸一个问题:STM8有必要使用操作系统吗? 这个问题其实没有标准答案,我用STM8裸机开发过项目,也在STM8的项目上跑过RTOS。 具体要看项目实际情况:MCU资源情况、功能复杂程度、实时性等。 比如:通过UART通信,简单控制几个IO口,这种或许没必要跑RTOS。 二、回归主题 STM8都支持哪些RTOS操作系统? 我找了下官方资料,共列举4种: 1.AtomThreads 这个RTOS应该是使用STM8跑操作系统的人都了解,或者听说过。 我觉得这个系统应该是目前(在STM8上)用的最多的一个RTOS. 在这4个系统中,我也只在STM8上跑过该操作系统。 网址:
[单片机]
<font color='red'>STM8</font>支持哪些RTOS操作系统?
STM8 单片机调试笔记
1、休眠唤醒后串口异常问题 STM8L主要用来做低功耗产品,这里就有休眠前跟唤醒后有差异的情况,在调试的时候碰到如果使用串口,在休眠前都正常,当唤醒后,串口发送的数据会出现异常的情况,发送的数据感觉会有丢帧。后来发现跟系统时钟有关,如果系统时钟采用外部时钟就会有问题,内部时钟就OK。 /* 这里要用内部时钟 用外部时钟在进入halt之后会出现 串口发送异常 */ CLK_HSICmd(ENABLE); while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET); CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); CLK_SYSCLKDi
[单片机]
STM8学习笔记(二):GPIO的输入
这两天有点忙,焊了四个按键,在LED灯的基础上,实现GPIO的输入 这次用的是ST公司的官方库 组要的还是要理解GPIO的几个寄存器的功能 同时,要好好的理解它官方库里面的函数定义和用法 /**************************************************************/ void GPIO_Configuration(void) { GPIO_Init(LEDS_PORT, (LED1_PIN | LED2_PIN | LED3_PIN | LED4_PIN | LED5_PIN | LED6_PIN | LED7_PIN | LED8_PIN), GPIO_MODE_OUT_
[单片机]
STM8 STM8S208MB寄存器
引脚类型 寄存器 STM8S208MB寄存器采用LQFP80封装,此处的80就表示都会 有80个引脚,其中68个引脚是GPIO。按 GPIO 端口功能分类,依次是 PA 组GPIO端口有6个(PA1-PA6) PB 组GPIO端口有8个(PB0-PB7) PC 组GPIO端口有8个(PC0-PC7) PD 组GPIO端口有8个(PD0-PD7) PE 组GPIO端口有8个(PE0-PE7) PF 组GPIO端口有6个(PF0,PF3-PF7) PG 组GPIO端口有8个(PG0-PG7) PH 组GPIO端口有8个(PH0-PH7) PI 组GPIO端口有8个(PI0-PI7) STM8S208MB 每一个端口寄存器位驱
[单片机]
<font color='red'>STM8</font> STM8S208MB寄存器
STM8 时钟安全系统寄存器
STM8时钟安全系统寄存器(CLK_CSSR) 地址偏移值:0x08 复位值:0x00 位7:4 保留。始终为0。 位3 CSSD:时钟安全系统监测 由硬件置位或软件写0清除。 0:CSS关或未检测到HSE失效 1:检测到HSE失效 位2 CSSDIE:时钟安全系统监测中断使能 由软件置位或清除 0:时钟安全系统监测中断禁用 1:时钟安全系统监测中断使能 位1 AUX:辅助振荡器连接至主时钟 由硬件置位或清除。 0:辅助振荡器关 1:辅助振荡器(HSI/8)开,并做为当前的主时钟源 位0 CSSEN:时钟安全系统使能 可读,但只能由软件写一次。 0:时钟安全系统关。 1:时钟安全系统开。
[单片机]
<font color='red'>STM8</font> <font color='red'>时钟</font>安全系统寄存器
Maxim的几款实时时钟(RTC)芯片
摘要:本文介绍了Maxim的几款实时时钟(RTC)芯片,列出了DS3231、DS3232、DS3234、DS32B35和DS32C35之间的性能差异,以帮助用户找到最合适的解决方案。重点讨论了DS2131M内置微机电系统(MEMS)谐振电路的时钟方案,用于替换晶振方案。 Maxim是实时时钟(RTC)产品的引领者,已经设计了多款在市场上炙手可热的实时时钟产品。这些产品提供完全集成的高精度、温度补偿RTC方案。多数情况下,RTC的精度主要取决于晶振频率随温度的变化。因此,对晶体进行高精度的温度补偿能够提高这些器件的时钟精度。 本文列出了几款RTC (DS3231、DS3232、DS3234、DS32B35和DS32C35)的性能差
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved