微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > STM32单片机小Tips(6):玩转IAR,开发STM32

STM32单片机小Tips(6):玩转IAR,开发STM32

时间:02-16 来源:本站整理 点击:

当备份区域由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’后并没

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top