STM32单片机小Tips(6):玩转IAR,开发STM32
当备份区域由V DD (内部模拟开关连到V DD )供电时,下述功能可用:
● PC14和PC15可以用于GPIO或LSE引脚
● PC13可以作为通用I/O口、TAMPER引脚、RTC校准时钟、RTC闹钟或秒输出
当后备区域由VBAT供电时(VDD消失后模拟开关连到VBAT),可以使用下述功能:
● PC14和PC15只能用于LSE引脚
● PC13可以作为TAMPER引脚、RTC闹钟或秒输出
*/
RCC_LSEConfig(RCC_LSE_ON);
/* 等待LSE振荡器就绪 */
while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
{}
/* 选择LSE作为RTC的时钟源
说明:RTC时钟源可以是以下三种之一:
─ HSE 时钟除以 128
─ LSE 振荡器时钟
─ LSI振荡器时钟
其中LSI是一个内部的低频RC振荡器。关于RTC的这三个时钟各有何特点,见下面的说明。
*/
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
/* RTC时钟允许*/
RCC_RTCCLKCmd(ENABLE);
/* 等待RTC寄存器同步
理由如下:
15.3.3 读 RTC 寄存器
RTC核完全独立于RTC APB1接口。
软件通过APB1接口访问RTC的预分频值、计数器值和闹钟值。但是,相关的可读寄存器只在与RTC APB1时钟进行重新同步的RTC时钟的上升沿被更新。RTC标志也是如此的。
这意味着,如果APB1接口刚刚被开启之后,在第一次的内部寄存器更新之前,从APB1上读出RTC寄存器的第一个值可能被破坏了(通常读到0)。下述几种情况下能够发生这种情形:
● 发生系统复位或电源复位
● 系统刚从待机模式唤醒(参见4.3节)。
● 系统刚从停机模式唤醒(参见4.3节)。
所有以上情况中,APB1接口被禁止时(复位、无时钟或断电)RTC核仍保持运行状态。 因此,若在读取RTC寄存器曾经被禁止的RTC APB1接口,软件首先须等待RTC_CRL寄存器中
的RSF位(寄存器同步标志)被硬件置1。
void RTC_WaitForSynchro(void)
{
/* Clear RSF flag */
RTC-》CRL &= (uint16_t)~RTC_FLAG_RSF;
/* Loop until RSF flag is set */
while ((RTC-》CRL & RTC_FLAG_RSF) == (uint16_t)RESET)
{
}
}
*/
RTC_WaitForSynchro();
/* 等待最后写操作完成*/
RTC_WaitForLastTask();
/* 允许秒中断,相应代码如下:
void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_RTC_IT(RTC_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RTC-》CRH |= RTC_IT;
}
else
{
RTC-》CRH &= (uint16_t)~RTC_IT;
}
}
而调用这段程序的代码中的第一个参数是:
#define RTC_IT_SEC ((uint16_t)0x0001) /*!《 Second interrupt */
可见它是对RTC-》CRH的最低位进行操作,CRH相关内容见下面的图。
*/
RTC_ITConfig(RTC_IT_SEC, ENABLE);
/* 等待最后的写操作完成*/
RTC_WaitForLastTask();
/* 设置RTC预分频器: set RTC period to 1sec */
RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
/* 等待最后的写操作完成*/
RTC_WaitForLastTask();
}
下面的图是有关RTC时钟选择的问题,其中说明了各种时钟的工作特性:
下面的图是有关RTC_CRH寄存器的描述,放在这里是为了说明SECIE标志位。
STM32单片机学习小Tips之数据的保存和毁灭(2)
和以前学到的有关数据保存不同,这里的数据保存还有"保密"之意,即一旦受到意外的侵入,STM32将毁灭数据。这是通过Tamper机制来实现的。
以下是数据手册中的有关说明:
5.3.1 侵入检测
当TAMPER引脚上的信号从0变成1或者从1变成0(取决于备份控制寄存器 BKP_CR的TPAL位),会产生一个侵入检测事件。侵入检测事件将所有数据备份寄存器内容清除。 然而为了避免丢失侵入事件,侵入检测信号是边沿检测的信号与侵入检测允许位的逻辑与,从而在侵入检测引脚被允许前发生的侵入事件也可以被检测到。
● 当 TPAL=0 时:如果在启动侵入检测TAMPER引脚前(通过设置TPE位)该引脚已经为高电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没有出现上升沿)。
● 当 TPAL=1 时:如果在启动侵入检测引脚TAMPER前(通过设置TPE位)该引脚已经为低电平,一旦启动侵入检测功能,则会产生一个额外的侵入事件(尽管在TPE位置’1’后并没
MCU STM32 IAR STM 32位单片机 相关文章:
- 基于MCU的智能漏水检测系统设计(10-06)
- 分享来自凌特大牛关于LTC6804相关问题解决方案(06-20)
- 基于飞思卡尔MCU的血糖监测仪应用(09-16)
- 探索利用MCU增加LED照明系统的智能程度的方法(02-07)
- 强化射频与MCU性能 车用77GHz雷达性价比攀升(03-03)
- 飞思卡尔汽车电控系统MCU新方案:关注安全与联网(03-22)