STM32实时时钟实验中,怎样在小于10的c 判断十位数字小于前

STM32再学习——实时时钟(RTC)
> STM32再学习——实时时钟(RTC)
STM32再学习——实时时钟(RTC)
  ,是Real&Time&Counter的缩写。在中,其实是一组连续计数的,各个产品及系列各不相同。因此,在相应的软件配置下,可提供的功能。当然,修改这个的值也就重新设置了系统当前的时间和日期。本文引用地址:  只是一个时钟,但与相连的有两个系统时钟,一个是APB1接口的PCLK1另一个是RTC时钟[注意1]。这样,RTC功能也就分为两个部分:第一部分,APB1接口部分,与APB1总线相连,也就是通过这条总线对其进行读写操作。另一部,RTC核,由一系列可编程组成,这部分又再细分为两个组件:预分频模块与32位可编程计数器。预分频模块用来产生最长为1秒的RTC时间基准,而32位的可编程的计数器可被初始化为当前的系统时间。  下图为RTC简化框图:  读RTC  从上面的工作原理可知,RTC核完全独立于RTC&APB1接口,软件通过APB1接口来访问RTC的各项参数,包括预分频值、计数器值等等,但是这些参数值只在RTC时钟的上升沿被更新,之后,RTC时钟会与RTC&APB1时钟进行重新同步。这里会有一些问题出现,就是在APB1接口刚刚被开启时,第一次的内部更新之前,那么此时从RTC中读出的第一个值可能被破坏了,例如下面所述的三种情况:  发生系统复位或电源复位  系统刚从待机模式唤醒  系统刚从停机模式唤醒  可以简单得出,在APB1接口被禁止时(复位,无时钟或断电)RTC核仍保持运行状态。因此,在禁止了RTC的APB1接口后,软件首先须等等RSF位被硬件置1.  RTC功能配置  1.&查询RTOFF&位,直到RTOFF&的值变为“1”  2.&置CNF&值为1,进入配置模式  3.&对一个或多个RTC&寄存器进行写操作  4.&清除CNF&标志位,退出配置模式  5.&查询RTOFF,直至RTOFF&位变为“1”&以确认写操作已经完成。  仅当CNF&标志位被清除时,写操作才能进行,这个过程至少需要3&个RTCCLK&周期。  注意1:RTC时钟必须小于PCLK1时钟的四分之一以上。&
尘埃粒子计数器相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一STM32F4学习笔记10——RTC实时时钟
日期: 18:05:47
来源:ITeye
STM32F4学习笔记10——RTC实时时钟
RTC实时时钟
实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程 闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模 式的自动唤醒单元。
两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星 期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。
系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时 补偿。
其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。
此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。
上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。
无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC 便不会停止工作。
RTC主要特性
● 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历。
● 软件可编程的夏令时补偿。
● 两个具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟。
● 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断。
● 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度。
● 利用亚秒级移位特性与外部时钟实现精确同步。
● 可屏蔽中断/事件:
— 唤醒中断
— 入侵检测
● 数字校准电路(周期性计数器调整)
— 精度为 5 ppm
— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
● 用于事件保存的时间戳功能(1 个事件)
● 入侵检测:
— 2 个带可配置过滤器和内部上拉的入侵事件
● 20 个备份寄存器(80 字节)。发生入侵检测事件时,将复位备份寄存器。
● 复用功能输出 (RTC_OUT),可选择以下两个输出之一:
— RTC_CALIB:512 Hz 或 1 Hz 时钟输出(LSE 频率为 32.768 kHz)。
可通过将 RTC_CR 寄存器中的 COE[23] 位置 1 来使能此输出。该输出可连接到器件 RTC_AF1 功能。
— RTC_ALARM(闹钟 A、闹钟 B 或唤醒)。
可通过配置 RTC_CR 寄存器的 OSEL[1:0] 位选择此输出。该输出可连接到器件RTC_AF1 功能。
● RTC 复用功能输入:
— RTC_TS:时间戳事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2 功能。
— RTC_TAMP1:TAMPER1 事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2功能。
— RTC_TAMP2:TAMPER2 事件检测。
— RTC_REFIN:参考时钟输入(通常为市电,50 Hz 或 60 Hz)。
对于 STM32F4xx 器件,RTC_AF1 和 RTC_AF2 复用功能分别与 PC13 和 PI8 相连。
RTC功能说明
时钟和预分频器
RTC时钟源RTCCLK通过时钟控制器LSE时钟,LSI振荡器时钟一级HSE时钟三者中选者。可编程预分频器阶段可以生成1Hz的时钟,用于更新日历。为最大程度价格低功耗,预分频器分为两个可编程的预分频器:
· 一个通过RTC_PRER寄存器的PREDIV_A位配置的7位异步分频器。
· 一个通过RTC_PRER寄存器的PREDIV_S位配置的15位同步预分频器。
为了最大程度的降低功耗,推荐将异步预分频器配置为较高的值。
要使用频率为 32.768 kHz 的 LSE 获得频率为 1 Hz 的内部时钟 (ck_spre),需要将异步预分 频系数设置为 128,并将同步预分频系数设置为 256。
分频系数的最小值为 1,最大值为 2^22。
这对应于约为 4 MHz 的最大输入频率。
fck_apre 可根据以下公式得出:
ck_apre 时钟用于为二进制 RTC_SSR 亚秒递减计数器提供时钟。当该计数器计数到 0 时, 会使用 PREDIV_S 的内容重载 RTC_SSR。
fck_spre 可根据以下公式得出:
ck_spre 时钟既可以用于更新日历,也可以用作 16 位唤醒自动重载定时器的时基。为获得较 短的超时周期,还可以将 16 位唤醒自动重载定时器与经可编程的 4 位异步预分频器分频的 RTCCLK 一同运行。
实时时钟和日历
RTC 日历时间和日期寄存器可通过与 PCLK1(APB1 时钟)同步的影子寄存器来访问。这 些时间和日期寄存器也可以直接访问,这样可避免等待同步的持续时间。
● RTC_SSR 对应于亚秒
● RTC_TR 对应于时间
● RTC_DR 对应于日期
每隔两个 RTCCLK 周期,便将当前日历值复制到影子寄存器,并将 RTC_ISR 寄存器的 RSF 位置 1。在停机和待机模式下不会执行复制操作。退出这两种模式 时,影子寄存器会在最长 2 个 RTCCLK 周期后进行更新。
当应用读取日历寄存器时,它会访问影子寄存器的内容。也可以通过将 RTC_CR 寄存器的 BYPSHAD 控制位置 1 来直接访问日历寄存器。默认情况下,该位被清零,用户访问影子寄 存器。
在 BYPSHAD=0 模式下读取 RTC_SSR、RTC_TR 或 RTC_DR 寄存器时,APB 时钟频率 (fAPB) 必须至少为 RTC 时钟频率 (fRTCCLK) 的 7 倍。
影子寄存器通过系统复位来复位。
可编程闹钟
RTC 单元提供两个可编程闹钟,即闹钟 A 和闹钟 B。
可通过将 RTC_CR 寄存器中的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。如果日历 亚秒、秒、分钟、小时、日期或日分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和RTC_ALRMBSSR/RTC_ALRMBR 中编程的值相匹配,则 ALRAF 和 ALRBF 标志会被置为 1。可通过 RTC_ALRMAR 和 RTC_ALRMBR 寄存器的 MSKx 位以及 RTC_ALRMASSR 和 RTC_ALRMBSSR 寄存器的 MASKSSx 位单独选择各日历字段。可通过 RTC_CR 寄存器中 的 ALRAIE 和 ALRBIE 位使能闹钟中断。
闹钟 A 和闹钟 B(如果已通过 RTC_CR 寄存器中的位 OSEL[0:1] 使能)可连接到 RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 极性。
注意: 如果选择秒字段(RTC_ALRMAR 或 RTC_ALRMBR 中的 MSK0 位复位),则 RTC_PRER
寄存器中设置的同步预分频器分频系数必须至少为 3,才能确保闹钟正确地运行。
周期性自动唤醒
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。
唤醒定时器的时钟输入可以是:
● 2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。
当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 μs 和 32 s 之间,且分辨率低至 61 μs。
● ck_spre(通常为 1 Hz 内部时钟)
当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这一较大的可编程时间范围分为两部分:
— WUCKSEL [2:1] = 10 时为 1s 到 18h。
— WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 577 页的编程唤醒定时器),定时器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。之后必须用软件清零 WUTF 标志。
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低 功耗模式。
如果已通过 RTC_CR 寄存器中的位 OSEL[0:1] 使能周期性唤醒标志,则该标志可连接到 RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 极性。
系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。
RTC的初始化和配置
RTC 寄存器访问
RTC 寄存器为 32 位寄存器。除了当 BYPSHAD=0 时对日历影子寄存器执行的读访问之外, APB 接口会在访问 RTC 寄存器时引入 2 个等待周期。
RTC 寄存器写保护
系统复位后,可通过 PWR 电源控制寄存器 (PWR_CR) 的 DBP 位保护 RTC 寄存器以防止 非正常的写访问。必须将 DBP 位置 1 才能使能 RTC 寄存器的写访问。
上电复位后,所有 RTC 寄存器均受到写保护。通过向写保护寄存器 (RTC_WPR) 写入一个 密钥来使能对 RTC 寄存器的写操作。
要解锁所有 RTC 寄存器(RTC_ISR[13:8]、RTC_TAFCR 和 RTC_BKPxR 除外)的写保护, 需要执行以下步骤:
1.将“0xCA”写入 RTC_WPR 寄存器。
2. 将“0x53”写入 RTC_WPR 寄存器。
写入一个错误的关键字会再次激活写保护。
保护机制不受系统复位影响。
日历影子寄存器(RTC_SSR、RTC_TR 和 RTC_DR)以及 RTC 状态寄存器 (RTC_ISR) 的 某些位通过所有可用的系统复位源复位为各自的默认值。
相反,以下寄存器则通过上电复位来复位为各自的默认值并且不受系统复位的影响:RTC 当 前日历寄存器、RTC 控制寄存器 (RTC_CR)、预分频器寄存器 (RTC_PRER)、RTC 校准寄 存器(RTC_CALIBR 或 RTC_CALR)、RTC 移位寄存器 (RTC_SHIFTR)、RTC 时间戳寄 存器(RTC_TSSSR、RTC_TSTR 和 RTC_TSDR)、RTC 入侵和复用功能配置寄存器 (RTC_TAFCR)、RTC 备份寄存器 (RTC_BKPxR)、唤醒定时器寄存器 (RTC_WUTR) 以及 闹钟 A 和闹钟 B 寄存器(RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/
RTC_ALRMBR)。
此外,如果复位源不是上电复位源,则发生系统复位时,RTC 会继续工作。发生上电复位 时,RTC 会停止工作,并且所有 RTC 寄存器都会设置为各自的复位值。
RTC 可与高精度的远程时钟同步。在读取亚秒字段后(RTC_SSR 或 RTC_TSSSR),即 可计算远程时钟的时间与 RTC 之间的精准偏差。之后,可使用 RTC_SHIFTR 对 RTC 的时 钟进行零点几秒的“平移”,经过调整后可消除此偏差。
RTC_SSR 包含同步预分频器计数器的值。这样,便可计算分辨率低至 1/(PREDIV_S + 1) 秒的 RTC 的准确时间。因此,可通过增大同步预分频器的值 (PREDIV_S[14:0]) 来提高 分辨率。将 PREDIV_S 设置为 0x7FFF 时,可得到允许的最大分辨率(30.52 μs,时钟频率 为 32768 Hz)。
但是,提高 PREDIV_S 意味着必须降低 PREDIV_A 才能将同步预分频器的输出维持在 1 Hz。 这样,异步预分频器的输出频率会增大,RTC 的动态功耗也会相应增加。
可以使用 RTC 平移控制寄存器 (RTC_SHIFTR) 对 RTC 进行微调。可以用大小为 1/
(PREDIV_S + 1) 秒的分辨率对 RTC_SHIFTR 进行写操作,将时钟平移(延迟或提前)最长 1 秒。在这种平移操作中,会将 SUBFS[14:0] 值加到同步预分频器计数器 SS[15:0] 中:这将使时钟产生延迟。如果同时将 ADD1S 位置 1,则会增加一秒,与此同时减去的时间为零点几秒,因此将使时钟提前。
注意: 初始化平移操作前,用户必须检查确认 SS[15] = 0,以确保不会发生上溢。
对 RTC_SHIFTR 寄存器执行写操作以启动平移操作时,硬件会将 SHPF 标志置 1 以指示平 移操作挂起。完成平移操作时,硬件会将将该位清零。
注意: 该同步功能与参考时钟检测功能不兼容:当 REFCKON=1 时,固件不能对 RTC_SHIFTR 执
行写操作。
Error StatusRTC_DeInit(void)功能:重定义RTC寄存器到他们的复位值,这个函数不能复位RTC时钟源跟RTC备份数据寄存器。
ErrorStatus RTC_Init(RTC_InitTypeDef*RTC_InitStruct)功能:根据RTC参数配置RTC例子,RTC分频器寄存器是写保护的,只能在初始化模式才能写。
void RTC_StructInit(RTC_InitTypeDef*RTC_InitStruct)功能:将RTC_InitStruct成员全部初始化成为复位值。
void RTC_WriteProtectionCmd(FunctionalState NewState)功能:使能或禁止写保护。所有的RTC寄存器都是写保护的除(RTC_ISR[13:8],RTC_TAFCR,RTC_BKBxR)。写入错误的秘钥将从新激活写保护,写保护机制不收系统复位影响。
ErrorStatue RTC_EnterInitMode(viod)功能:进入RTC初始化模式,RTC初始化模式是写保护模式,调用这个函数之前要先调用函数RTC_WriteProtectionCmd(DISABLE)。
void RTC_ExitInitMode(void)功能:退出RTC初始化模式,当初始化时序完成后,4个RTCCLK时钟后日历才开始工作。RTC初始化模式是写保护的,调用这个函数之前要先调用函数RTC_WriteProtectionCmd(DISABLE)。
ErrorStatus RTC_WaitForSynchro(void)功能:等待直到RTC时间和日期寄存器与APB时钟同步。RTC同步·模式是写保护的,使用前要先调用函数RTC_WriteProtectionCmd(DISABLE)。
ErrorStatus RTC_RefClockCmd(FunctionalState NewState)使能或禁止RTC参考时钟。
时间和日期初始化和配置
要编程包括时间格式和预分频器配置在内的初始时间和日期日历值,需按照以下顺序操作:
1.将 RTC_ISR 寄存器中的 INIT 位置 1 以进入初始化模式。在此模式下,日历计数器将停 止工作并且其值可更新。
2. 轮询 RTC_ISR 寄存器中的 INITF 位。当 INITF 置 1 时进入初始化阶段模式。大约需要 2 个 RTCCLK 时钟周期(由于时钟同步)。
3. 要为日历计数器生成 1 Hz 时钟,应首先编程 RTC_PRER 寄存器中的同步预分频系数, 然后编程异步预分频系数。即使只需要更改这两个字段中之一,也必须对 RTC_PRER 寄存器执行两次单独的写访问。
4. 在影子寄存器(RTC_TR 和 RTC_DR)中加载初始时间和日期值,然后通过 RTC_CR 寄存器中的 FMT 位配置时间格式(12 或 24 小时制)。
5. 通过清零 INIT 位退出初始化模式。随后,自动加载实际日历计数器值,在 4 个 RTCCLK 时钟周期后重新开始计数。
当初始化序列完成之后,日历开始计数。
注意:系统复位后,应用可读取 RTC_ISR 寄存器中的 INITS 标志,以检查日历是否已初始化。如 果该标志为 0,表明日历尚未初始化,因为年份字段设置为其上电复位时的默认值 (0x00)。
要在初始化之后读取日历,必须首先用软件检查 RTC_ISR 寄存器的 RSF 标志是否置 1。
ErrorStatus RTC_SetTime(uint32_tRTC_Format,RTC_TimeTypeDef*RTC_TimeStruct)功能:设置当前RTC时间
void RTC_TimeStructInit(RTC_TimeTypeDef*RTC_TimeStruct)功能:初始化RTC_TimeStruct结构体成员到复位值
void RTC_GetTime(uint32_t RTC_Format,RTC_TimeTypeDef*RTC_TimeStruct)功能得到RTC时间。
uint_32t RTC_GetSubSecond(void)功能:得到亚秒
ErrorStatus RTC_SetDate(uint32_t RTC_Format,RTC_DateTypeDef*RTC_DateStruct)
void RTC_DateStructInit(RTC_DateTypeDef*RTC_DateStruct)
void RTC_GetDate(uint32_t RTC_Format,RTC_DateTypeDef*RTC_DateStruct)这几个函数都是设置日期的,功能与设置时间的函数是一样的。
要对可编程的闹钟(闹钟 A 或闹钟 B)进行编程或更新,必须执行类似的步骤:
1.将 RTC_CR 寄存器中的 ALRAE 或 ALRBE 位清零以禁止闹钟 A 或闹钟 B。
2. 轮询 RTC_ISR 寄存器中的 ALRAWF 或 ALRBWF 位,直到其中一个置 1,以确保闹钟 寄存器可以访问。大约需要 2 个 RTCCLK 时钟周期(由于时钟同步)。
3. 编程闹钟 A 或闹钟 B 寄存器(RTC_ALRMASSR/RTC_ALRMAR 或 RTC_ALRMBSSR/RTC_ALRMBR)。
4. 将 RTC_CR 寄存器中的 ALRAE 或 ALRBE 位置 1 以再次使能闹钟 A 或闹钟 B。
注意:约 2 个 RTCCLK 时钟周期(由于时钟同步)后,将执行对 RTC_CR 寄存器的更改。
void RTC_SetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef*RTC_AlarmStruct)功能:RTC闹钟时间配置。
void RTC_AlarmStructInit(RTC_AlarmTypeDef*RTC_AlarmStruct)功能初始化RTC_AlarmTypeDef类型的结构体成员到复位值。
void RTC_GetAlarm(uint32_t RTC_Format, uint32_t RTC_Alarm, RTC_AlarmTypeDef*RTC_AlarmStruct)功能:得到RTC闹钟数值。
ErrorStatus RTC_AlarmCmd(uint32_t RTC_Alarm,FunctionalState NewState)功能:禁止或使能RTC闹钟。
void RTC_AlarmSubSecondConfig(uint32_t RTC_Alarm,uint32_t RTC_AlarmSubSecondValue,uint32_t RTC_AlarmSubSecondMask)功能配置RTC AlarmA/B的亚秒
RTC_GetAlarmSubSecond(uint32_t RTC_Alarm)功能:得到RTC的亚秒时间。
编程唤醒定时器
要配置或更改唤醒定时器的自动重载值(RTC_WUTR 中的 WUT[15:0]),需要按照以下顺 序操作:
1.清零 RTC_CR 中的 WUTE 以禁止唤醒定时器。
2. 轮询 RTC_ISR 中的 WUTWF,直到该位置 1,以确保可以访问唤醒自动重载定时器和 WUCKSEL[2:0] 位。大约需要 2 个 RTCCLK 时钟周期(由于时钟同步)。
3. 编程唤醒自动重载值 WUT[15:0],并选择唤醒时钟(RTC_CR 中的 WUCKSEL[2:0] 位)。 将 RTC_CR 寄存器中的 WUTE 位置 1 以再次使能定时器。唤醒定时器重新开始递减 计数。
void RTC_WakeUpClockConfig(uint32_t RTC_WakeUpClock)功能:配置RTC唤醒时钟源
void RTC_SetWakeUpCounter(uint32_t RTC_WakeUpCounter)功能:配置RTC唤醒计数,使用这个函数前要保证RTC唤醒被禁止RTC_WakeUpCmd(DISABLE)
uint32_t RTC_GetWakeUpCounter(void)功能:得到唤醒定时器的计数值
ErrorStatus RTC_WakeUpCmd(FunctionalState NewState)功能:使能或禁止唤醒定时器
时间戳功能
将 RTC_CR 寄存器的 TSE 位置 1 可使能时间戳。
当在 TIMESTAMP 备用功能映射到的引脚上检测到时间戳事件时,日历会保存到时间戳寄存 器(RTC_TSSSR、RTC_TSTR 和 RTC_TSDR)中。发生时间戳事件时,RTC_ISR 寄存 器中的时间戳标志位 (TSF) 将置 1。
通过将 RTC_CR 寄存器中的 TSIE 位置 1,可在发生时间戳事件时生成中断。
如果在时间戳标志 (TSF) 已置 1 的条件下检测到新的时间戳事件,则时间戳上溢标志 (TSOVF) 将置 1,而时间戳寄存器(RTC_TSTR 和 RTC_TSDR)将保持上一事件的结果。
注意:由于同步过程,TSF 将在时间戳事件后 2 个 ck_apre 周期置 1。
将 TSOVF 置 1 时不存在延迟。这意味着,如果两个时间戳事件接连发生,则 TSOVF 可能 为“1”而 TSF 仍为“0”。因此,建议只在检测到 TSF 为“1”后再轮询 TSOVF。
注意: 如果在 TSF 位清零后紧接着发生时间戳事件,则 TSF 和 TSOVF 位都将置 1。为防止在时间戳事件发生的同时屏蔽该事件,除非已将 TSF 位读取为“1”,否则应用程序不得将“0”写入 TSF 位。
此外,入侵事件可能导致时间戳被记录。有关 TAMPTS 控制位的说明,请参见第 23.6.17 节: RTC 入侵和复用功能配置寄存器 (RTC_TAFCR)。如果时间戳事件与配置为过滤模式的入侵 事件(TAMPFLT 设置为非零值)使用同一引脚,则必须通过将 RTC_TAFCR 寄存器中的 TAMPTS 置“1”来选择入侵检测事件的时间戳模式。
时间戳复用功能
时间戳复用功能 (RTC_TS) 可映射到 RTC_AF1 或 RTC_AF2,具体取决于 RTC_TAFCR 寄存器中 TSINSEL 位的值(请参见第 23.6.17 节:RTC 入侵和复用功能配置寄存器 (RTC_TAFCR))。如果 RTC_AF1 用作过滤模式的 TAMPER(TAMPFLT 设置为非零值),则不允许将时间戳事件映射到 RTC_AF2 上。
void RTC_TimeStampCmd(uint32_t RTC_TimeStampEdge,FunctionalState NewState)功能:使能或禁止RTC的时间戳。
void RTC_GetTimeStamp(uint32_t RTC_Format,RTC_TimeTypeDef*RTC_StampTimeStruct,RTC_DateTypeDef**RTC_StampDateStruct)功能:永遇得到时间戳的数值。
unit32_t RTC_GetTimeStampSubSecond(void)功能:用于得到时间戳的亚秒时间。
有两个入侵检测输入可用。这两个输入既可配置为边沿检测,也可配置为带过滤的电平检测。
RTC 备份寄存器
备份寄存器 (RTC_BKPxR) 包括20 个 32 位寄存器,用于存储 80 字节的用户应用数据。这 些寄存器在备份域中实现,可在 VDD 电源关闭时通过 VBAT 保持上电状态。备份寄存器不会 在系统复位或电源复位时复位,也不会在器件从待机模式唤醒时复位。
发生入侵检测事件时,将复位备份寄存器。
入侵检测初始化
两个入侵检测输入分别与 RTC_ISR2 寄存器中的标志TAMP1F/TAMP2F 相关联。可通过将 RTC_TAFCR 寄存器中相应的 TAMP1E/TAMP2E 位置 1 来使能各输入。
入侵检测事件会复位所有备份寄存器 (RTC_BKPxR)。
通过将 RTC_TAFCR 寄存器中的 TAMPIE 位置 1,可在发生入侵检测事件时生成中断。
入侵事件的时间戳
当 TAMPTS 置“1”时,任何入侵事件都会导致时间戳事件的发生。在这种情况下,如同发 生正常时间戳事件一样,RTC_ISR 中的 TSF 位或 TSOVF 位会置 1。在 TSF 或 TSOVF 置 1 的同时,受影响的入侵标志寄存器(TAMP1F、TAMP2F)也会随之置 1。
对入侵输入的边沿检测
如果 TAMPFLT 位为“00”,则在观测到上升沿或下降沿时(根据相应的 TAMPxTRG 位), TAMPER 引脚会生成入侵检测事件 (RTC_TAMP[2:1])。选择边沿检测时,会禁止入侵输入 上的内部上拉电阻。
注意: 为避免丢失入侵检测事件,用于边沿检测的信号与 TAMPxE 使用逻辑与操作来检测入侵事件,
以避免丢失在使能 TAMPERx 引脚前发生的入侵事件。
● 当 TAMPxTRG = 0 时:如果 TAMPERx 复用功能在使能入侵检测之前已变为高电平
(TAMPxE 位置 1),则使能 TAMPERx 后便会立即检测到入侵事件,即使在 TAMPxE
置 1 后 TAMPERx 引脚上未出现上升沿。
● 当 TAMPxTRG = 1 时:如果 TAMPERx 复用功能在使能入侵检测之前已变为低电平,
则使能 TAMPERx 后便可立即检测到入侵事件(即使在 TAMPxE 置 1 后 TAMPERx 引
脚上未出现下降沿)。
检测到入侵事件并清零后,应当在重新编程备份寄存器 (RTC_BKPxR) 之前禁止 TAMPERx 复用功能,然后再重新使能(TAMPxE 置 1)。这可防止应用在 TAMPERx 值仍指示入侵检 测时,对备份寄存器执行写操作。这相当于对 TAMPERx 复用功能的电平检测。
注意:当 VDD 电源关闭时,入侵检测仍有效。要避免意外复位备份寄存器,应将 TAMPER 复用功 能映射到的引脚从外部连接到正确的电平。
对入侵输入的带过滤电平检测
通过将 TAMPFLT 设置为非零值可执行带过滤的电平检测。在 TAMPxTRG 位 (TAMP1TRG/
TAMP2TRG) 指定的电平连续出现 2、4 或 8 个(取决于 TAMPFLT 值)采样时生成入侵检 测事件。
除非通过将 TAMPPUDIS 置 1 禁止入侵输入,否则在入侵输入的状态被采样前,将通过 I/O 内部上拉电阻对这些输入预充电。预充电的持续时间由 TAMPPRCH 位确定,允许增大入侵 输入上的电容。
可使用 TAMPFREQ 确定用于电平检测的采样频率,以便使入侵检测延迟与上拉电阻功耗之 间达到最佳平衡。
注意:有关上拉电阻的电气特性,请参见数据手册。
void RTC_TamperTriggerConfig(uint32_T RTC_Tamper,uint32_t RTC_TamperTrigger)功能:Tamper引脚的触发方式
void RTC_TamperCmd(uint32_t RTC_Tamper,FunctionalState NewState)功能:使能过或者禁止入侵检测
void RTC_TamperFilterConfig(uint32_t TamperFilter)
void RTC_TamperSamplingFreqConfig(uint32_t RTC_TamperSamplingFreq)
void RTC_TamperPinsPrechargeDuration(uint32_t RTC_TamperPrechargeDuration)
void RTC_TimeStampOnTamperDetectionCmd(FunctionalState NewState)
void RTC_TamperPullUpCmd(FunctionalState NewState)
void RTC_WriteBackupRegister(uint32_t RTC_BKP_DR, uint32_t Data)功能:写数据到RTC备份数据寄存器
uint32_t RTC_ReadBackupRegister(uint32_t RTC_BKP_DR) 功能:从备份数据寄存器读出数据。
void RTC_TamperPinSelection(uint32_t RTC_TamperPin)功能:选择RTC Tamper引脚。
void RTC_TimeStampPinSelection(uint32_t RTC_TimeStampPin)功能:选择RTC TimeStamp引脚
所有 RTC 中断均与 EXTI 控制器相连。
要使能 RTC 闹钟中断,需按照以下顺序操作:
1.将 EXTI 线 17 配置为中断模式并将其使能,然后选择上升沿有效。
2. 配置 NVIC 中的 RTC_Alarm IRQ 通道并将其使能。
3. 配置 RTC 以生成 RTC 闹钟(闹钟 A 或闹钟 B)。
要使能 RTC 唤醒中断,需按照以下顺序操作:
1.将 EXTI 线 22 配置为中断模式并将其使能,然后选择上升沿有效。
2. 配置 NVIC 中的 RTC_WKUP IRQ 通道并将其使能。
3. 配置 RTC 以生成 RTC 唤醒定时器事件。
要使能 RTC 入侵中断,需按照以下顺序操作:
1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。
2. 配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
3. 配置 RTC 以检测 RTC 入侵事件。
要使能 RTC 时间戳中断,需按照以下顺序操作:
1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。
2. 配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
3. 配置 RTC 以检测 RTC 时间戳事件。
void RTC_ITConfig(uint32_t RTC_IT,FunctionalState NewState)功能:使能或禁止RTC中断
FlagStatus RTC_GetFlagStatus(unit32_t RTC_FLAG)功能:查询RTC标志,主要用于非中断函数
void RTC_ClearFlag(uint32_t RTC_FLAG)功能:清除RTC标志,主要用于非中断函数
ITStatus RTC_GetITStatus(uint32_t RTC_IT)功能:查询RTC中断标志,主要用于中断函数
void RTC_ClearITPendingBit(uin32_t RTC_IT)功能:清除RTC中断标志,主要用于中断函数
static uint8_t RTC_ByteToBcd2(uint8_t Value)功能:用于bcd和二进制数的互转
static uint8_t RTC_Bcd2ToByte(uint8_t Value)功能:用于bcd和二进制数的互转
RTC低功耗模式
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
今天与大家分享的是QQ三方登录,第一步我们需要在友盟注册友盟账号,然后申请我们的应用,会得到一个Key 这个AppKey是友盟区分每个应用所用的,也是唯一的。我们可以先下载sdk的demo,因为里面已经包含了我们所需要的大部分内容,这里我集成的是android 5.0版本的文档, 我们在我们的项目中添加一些权限,和导入jar包, 这里我们要集成什么就选择什么,如果我们集成QQ就选择QQ,集成新浪微博就选择新浪微博。 把QQ这几个Jar包导入项目里即可。 注意 1:QQ和QQ Zone SSO(免登录)引用
这要从frameworks/native/cmds/servicemanager/service_manager.c:347的main函数说起,该文件编译后生成servicemanager。 int main( int argc, char **argv){ struct binder_state * bs = binder_open( 128 * 1024 ); // 打开/dev/binder文件,并映射到内存 if (!bs) { ALOGE( "failed to open binder d
JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对象的思想
作为中国民营经济最杰出的企业领袖,70 多岁的任正非却极少在公众面前露面,也很少接受媒体专访。近日,任正非鲜见的接受了新华社记者的采访,讲述了他对接下来整个中国科技产业发展的判断,以及中国产业环境中的问题。 在专访中,一贯保守的任正非,做出了许多大胆的预言,看好正在来临的科技拐点大时代,以及对中国知识产权环境产生担忧。 以下总结了任正非说的几个要点: 1、华为坚定不移 28 年只对准通信领域这个“城墙口”冲锋。我们成长起来后,坚持只做一件事,在一个方面做大。华为只有几十人的时候就对着一个“城墙口”进攻,几百
在实际开发过程中,实现一个功能,需要通过多个线程来处理。比如,房间温控监视仪需要监视不同房间的温度,温度传感器会实时传递并保存至数据库,意味着我们需要处理多个Observables。在这种情况下,该如何处理这些Observables呢?本篇博客,我们将学习组合操作符,了解如何同时处理多个Observables来创建我们想要的Observable。 merge
merge操作符将两个甚至更多的Observables合并到一个发射的数据项里,并发射出去。
来自Leo的原创 博客 ,转载请著名出处 我的stackoverflow 这个源码解析系列的文章 AsnycDispalyKit SDWebImage(本文) 前言 SDWebImage是iOS开发中十分流行的库,大多数的开发者在下载图片或者加载网络图片并且本地缓存的时候,都会用这个框架。这个框架相对来说,源代码还是比较少的。本文会详细的讲解这些类的架构关系和原理。 本文会先介绍 类的整体架构关系 ,先有一个宏观的认识。然后讲解 sd_setImageWithURL 的加载逻辑 ,因为这是SDWebIma
一、Picasso使用: gradle: compile 'com.squareup.picasso:picasso:2.5.2' 使用: Picasso.with(this). load ( "http://...../photo3.jpg" ). into (myImg); 自定义的使用方法: Picasso picasso = new Picasso.Builder( this ) .memoryCache( new LruCache()) // 设置自定义的内存缓存 .addRequestHand
wpa_supplicant结构体与网络接口 在手机adb中运行 netcfg或者ifconfig可以看到相关的网络接口的ip,掩码,mac地址等信息 Wpa_supplicant为每个网络接口都分配了一个struct wpa_supplicant, 该结构体存储了一些必要信息例如 struct dl_list bss(扫描结果); struct wpa_config *conf(配置文件)等等。 每一个网络接口的扫描,连接等操作都是通过struct wpa_supplicant中定义的相关函数和数据来实
Android实训案例(八)——单机五子棋游戏,自定义棋盘,线条,棋子,游戏逻辑,游戏状态存储,再来一局 阿法狗让围棋突然就被热议了,鸿洋大神也顺势出了篇五子棋单机游戏的视频,我看到了就像膜拜膜拜,就学习了一下,写篇博客梳理一下自己的思路,加深一下印象 视频链接: http://www.imooc.com/learn/641 一.棋盘 我们一看就知道,我们必须自定义View,这里我们定义一个GameView来做游戏主类,第一步,先测量,我们这里不难知道,五子棋他的棋盘是一个正方形,所以我们需要去测量 /*
在android开发中对图片处理很是频繁,其中对图片的颜色处理就是很常见的一种。我们经常看到一些类似美图秀秀,美颜相机的app,为什么那么黑的人拍出来是确实那么地白呢?长的那么那个(丑)的人,用美颜相机拍出来的看起来也有那么回事(拍出来就感觉挺漂亮)。就像网上有个段子,有钱的都去韩国了,没钱都用ps了。韩国的就去整形,中国的就用ps.这些话虽然是调侃,但是从某种程度上来说像类似美图秀秀,美颜相机app确实挺受大家欢迎。但是你是否曾想过它这种效果,它是怎么实现的吗?你是否曾想过它的原理是什么吗?所以我将和大
Copyright (C)
ITfish.net}

我要回帖

更多关于 excel数字小于0提示 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信