• STM32F1 RTC 当成 ms 等级计时/延迟使用


    STM32F1 RTC 当成 ms 等级计时 / 延迟使用

    这一天天的, 用 F103C8不好吗? 一定要改 F103C6
    Timer 少一个, 捣鼓了一下, 用 RTC SECIE 来作, 不很准, 够用。
    ( OWIE : CNT Overflow, ALRIE: Alarm IE 这两个不适用)

    概念上是以 STM32 RTC 使用 内部 LSI 40KHz 当 Clock.

    /* 
    *   AsynchPrediv = 38, 39, 40 
    *   这数值依每一个STM32内部 LSI 40KHz 来微调.
    *   以实际系统为准, 在 DEBUG 模式中的数据不准!
    */
    
      hrtc.Instance = RTC;
      hrtc.Init.AsynchPrediv = 39;
      hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
      HAL_RTC_Init(&hrtc);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    要自己打开 RTC.CRH SECIE 中断

    void HAL_RTC_MspInit(RTC_HandleTypeDef* rtcHandle)
    {
    
      if(rtcHandle->Instance==RTC)
      {
      /* USER CODE BEGIN RTC_MspInit 0 */
    
      /* USER CODE END RTC_MspInit 0 */
        HAL_PWR_EnableBkUpAccess();
        /* Enable BKP CLK enable for backup registers */
        __HAL_RCC_BKP_CLK_ENABLE();
        /* RTC clock enable */
        __HAL_RCC_RTC_ENABLE();
    
        /* RTC interrupt Init */
        HAL_NVIC_SetPriority(RTC_IRQn, 15, 0);
        HAL_NVIC_EnableIRQ(RTC_IRQn);
      /* USER CODE BEGIN RTC_MspInit 1 */
       // Set CNF for program RTC->CRH 
       RTC->CRL |= RTC_CRL_CNF;
       RTC->CRH |= RTC_CRH_SECIE;
      /* USER CODE END RTC_MspInit 1 */
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在 RTC IRQ中, 加上 Tick++

    uint32_t msRTC_Tick = 0; 
    void RTC_IRQHandler(void)
    {
       // RTOFF must 1 , before change RTC Registers 
       if(RTC_FLAG_RTOFF && RTC->CRL)
       {
         // Make sure IRQ actibe by SECF
         if( RTC->CRL && RTC_FLAG_SEC )
    	   {
    	     // Clear SECF flag 
    	     RTC->CRL  &= (~RTC_FLAG_SEC);
    	 	  ++msRTC_Tick;
    	   }
     	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    STM32F1 RTC 当成 ms 等级计时/延迟使用 @LSI 40KHz
    资料, 仅供参考。
    数据剪辑自原厂规格书, 版权归原所有人拥有。
    档案取自互联网!如有侵权或不适用情形, 请联系移除!
    ** 使用有风险, 请详阅原厂使用说明!
    ** 范例码为自用,请谨慎引用, Ctrl-C, Ctrl-V结果自行承担!

  • 相关阅读:
    代码执行相关函数以及简单例题
    Repo简介
    【遍历二叉树的非递归算法,二叉树的层次遍历】
    websocket多线程发送消息报错TEXT_PARTIAL_WRITING--自旋锁替换synchronized独占锁的使用案例
    面试经典150题——Day35
    matlab编译.net dll及C#调用
    B站崩了,如果我们是那晚负责修复的开发人员
    《深入理解计算机系统》笔记
    构建并训练简单的CNN
    [vue] element的表格fixed悬浮固定列错乱的官方解决办法
  • 原文地址:https://blog.csdn.net/weixin_44679008/article/details/126662845