STM32F030R8 LL库 配置 RTC亚秒中断

用STM32CubeMX 配置好RTC

STM32F030R8 LL库 配置 RTC亚秒中断_第1张图片

因为用的是LL库,生成的代码并不完整。关于中断只有两行代码.

  /* RTC interrupt Init */
  NVIC_SetPriority(RTC_IRQn, 0);
  NVIC_EnableIRQ(RTC_IRQn);

这样是不可以使用的。

需要增加以下代码:

MX_RTC_Init(void)
{
  /* USER CODE BEGIN RTC_Init 2 */
  LL_RTC_DisableWriteProtection(RTC);      //关闭RTC写保护
  LL_RTC_ALMA_Disable(RTC);                //失能Alarm A
  tickstart = 0;
  /* Wait till RTC ALRAWF flag is set and if Time out is reached exit */
  while(!LL_RTC_IsActiveFlag_ALRAW(RTC))   //等待可写Alarm A
  {
    if(tickstart++ > 10000u)
    {
      /* Enable the write protection for RTC registers */
      LL_RTC_EnableWriteProtection(RTC);  
      return;
    }  
  }
  LL_RTC_ALMA_SetSubSecond(RTC, 0);                  //设置亚秒初值
  LL_RTC_ALMA_SetSubSecondMask(RTC, 6);              //设置中断周期 异步分频结果/2^7
  LL_RTC_ALMA_SetMask(RTC, LL_RTC_ALMA_MASK_ALL);    //
  LL_RTC_ALMA_Enable(RTC);                           //使能Alarm A
  LL_RTC_EnableIT_ALRA(RTC);                         //Alarm A 中断使能
  LL_EXTI_EnableIT_0_31(LL_EXTI_LINE_17);            //外部中断17使能
  LL_EXTI_EnableRisingTrig_0_31(LL_EXTI_LINE_17);    //外部中断极性
  
  LL_RTC_EnableWriteProtection(RTC);                 //打开RTC写保护
  /* USER CODE END RTC_Init 2 */
   
}

//中断服务程序
void RTC_IRQHandler(void)
{
   /* USER CODE BEGIN RTC_IRQn 0 */
    if(LL_RTC_IsActiveFlag_ALRA(RTC))
        LL_RTC_ClearFlag_ALRA(RTC);
    if(LL_RTC_IsActiveFlag_RS(RTC))
        LL_RTC_ClearFlag_RS(RTC);
    LL_EXTI_ClearFlag_0_31(LL_EXTI_LINE_17);

  /* USER CODE END RTC_IRQn 0 */
  
  /* USER CODE BEGIN RTC_IRQn 1 */

  /* USER CODE END RTC_IRQn 1 */
}

 

你可能感兴趣的:(技术)