一种单片机独立看门狗定时校准方法
文献发布时间:2024-04-18 20:01:55
技术领域
本发明涉及一种单片机独立看门狗定时校准方法,属于单片机独立看门狗技术领域。
背景技术
看门狗是用于监测单片机程序运行状态的模块或芯片,独立看门狗工作在主程序之外,能够独立工作,具有独立的时钟,不受整个系统的影响,单片机内的独立看门狗基本使用内部的RC振荡器进行定时,但是内部RC振荡器存在误差,以秒TM32F103系列单片机举例,内部RC振荡器范围为30kHz-60kHz,当使用定时器时一般用40kHz的典型值进行配置,但是误差比较大,可能影响程序正常运行,只能够保证看门狗独立工作,但不适用于对时间精度要求较高的场合。
可以考虑用外部定时器来代替单片机独立看门狗定时,但是需要增加芯片,在具备外部定时的前提下也是可可选择的方案。
发明内容
本发明所要解决的技术问题:解决独立看门狗定时不准确的问题。
为解决上述技术问题,本发明提供一种单片机独立看门狗定时校准方法,包括以下步骤:
步骤1):配置独立看门狗复位时间为n秒;
步骤2):配置内部定时器或外部器定时每1毫秒计数一次,计数变量为tim_count;
步骤3):在设定时间节点一,读取计数变量tim_count,或在设定时间节点二,读取独立看门狗计时,如果独立看门狗计时与设置的比较数据不相等,则根据比例纠正看门狗配置;所述设置的比较数据为计数变量tim_count或固定值。
前述的单片机独立看门狗定时校准方法,在看门狗计数器不可读的情况下,包括以下步骤:
在步骤1)中,配置独立看门狗复位时间为n秒,配置RTC模块计时寄存器计时数据为n秒;
在步骤2)中,配置内部定时器定时每1毫秒计数一次,计数变量为tim_count;
在步骤3)中,时间节点一为当RTC模块计时到n秒时;如果计数变量tim_count>n*1000,则说明RTC模块计时比内部定时器计时慢,由于RTC模块与独立看门狗是同源RC振荡器且没有分频,则独立看门狗定时也比内部定时器计时慢;如果tim_count 前述的单片机独立看门狗定时校准方法,在步骤3)中,根据比例纠正看门狗配置过程为:计数比例为(n*1000):tim_count,如果原独立看门狗需要定时时间为dog_time,则配置更改为dog_time*(tim_count/(n*1000))。 前述的单片机独立看门狗定时校准方法,在独立看门狗定时器可读的情况下,包括以下步骤: 在步骤1)中,配置独立看门狗复位时间为n秒; 在步骤2)中,配置内部定时器定时每1豪秒计数一次,计数变量为tim_count; 在步骤3)中,当内部定时器计数变量tim_count到达n*1000时,读取看门狗相应计时;如果看门狗计时>n秒,则说明内部RC振荡器计时比内部定时器计时快,如果看门狗计时 前述的单片机独立看门狗定时校准方法,在步骤4)中,根据比例纠正看门狗配置过程为:计数比例为(n*1000):tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/(n*1000))。 前述的单片机独立看门狗定时校准方法,在独立看门狗定时器可读的情况下,包括以下步骤: 在步骤1)中,配置独立看门狗复位时间为n秒; 在步骤2)中,配置外部定时器定时每1豪秒计数一次,计数变量为tim_count; 3)当外部定时器计数变量tim_count到达n*1000时,读取独立看门狗相应计时;如果独立看门狗计时>n秒,则说明内部RC振荡器计时比内部定时器计时快,如果看门狗计时 前述的单片机独立看门狗定时校准方法,在步骤4)中,根据比例纠正看门狗配置过程为:计数比例为(n*1000):tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/(n*1000))。 本发明所达到的有益效果:本发明的单片机独立看门狗定时校准方法,使用和独立看门狗同源内部RC振荡器的RTC模块(real-time clock,实时时钟)和一个单片机内部定时器,单片机内部定时器是准确的,利用准确的内部定时器测量不准确的定时器,得到具体偏差,并进行纠正,解决单片机内部独立看门狗定时不准确的问题,不需要增加硬件成本。同时,本发明也提出利用外部定时器与独立看门狗定时进行比较并校时的方法,在具备外部定时器的前提下也是同样可行的方案。 附图说明 图1为本发明的单片机独立看门狗定时校准方法的原理图; 图2为本发明实施例1中单片机独立看门狗定时校准方法的流程图; 图3为本发明实施例2中单片机独立看门狗定时校准方法的流程图; 图4为本发明实施例3中单片机独立看门狗定时校准方法的流程图。 具体实施方式 以下结合附图和具体实施例对本发明的技术方案作进一步说明。其中,秒表示秒,豪秒表示毫秒。 实施例1 如图1和图2所示,本发明提供单片机独立看门狗定时校准方法,包括以下步骤: 1)在看门狗计数器不可读的情况下,配置独立看门狗复位时间为2秒,配置RTC模块计时寄存器计时数据为2秒; 2)配置内部定时器定时每1豪秒计数一次,计数变量为tim_count; 3)当RTC模块计时到2秒时,读取计数变量tim_count,由于RTC模块计时不准,所以真实时间不是准确的2秒; 4)如果计数变量tim_count>2000,则说明RTC模块计时比内部定时器计时慢,根据比例纠正看门狗配置,步骤为: 求得计数比例为2000:tim_count,由于RTC模块与独立看门狗是同源RC振荡器且没有分频,说明独立看门狗定时也比内部定时器计时慢,计数比例也为2000:tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000);所述定时时间是指定时多长时间内不喂狗,看门狗就复位单片机; 如果tim_count<2000,则说明RTC模块比内部定时器计时快,根据比例纠正看门狗配置,方法为: 求得计数比例为2000:tim_count,由于RTC模块与独立看门狗是同源RC且没有分频,说明独立看门狗也比内部定时器计时快,计数比例也为2000:tim_count,如果原本独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000)。 本实施例的单片机独立看门狗定时校准方法,对于嵌入式设备来说,用单片机内现有的模块去解决了单片机内部独立看门狗定时不准确的工程技术问题,同时成本较低。 实施例2 如图3所示,本发明提供一种单片机独立看门狗定时校准方法,包括以下步骤: 1)在独立看门狗定时器可读的情况下,配置独立看门狗复位时间为2秒; 2)配置内部定时器定时每1豪秒计数一次,计数变量为tim_count; 3)当内部定时器计数变量tim_count到达2000时,读取看门狗相应计时; 4)如果看门狗计时>2秒,则说明内部RC振荡器计时比内部定时器计时快,根据比例纠正看门狗配置,具体为: 求得计数比例为2000:tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000); 如果看门狗计时<2秒,则说明内部RC振荡器计时比内部定时器计时慢,根据比例纠正看门狗配置,具体为: 求得计数比例为2000:tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000)。 本实施例的单片机独立看门狗定时校准方法,对于嵌入式设备来说,用单片机内现有的模块去解决了单片机内部独立看门狗定时不准确的工程技术问题,同时成本较低。 实施例3 如图4所示,本发明提供一种单片机独立看门狗定时校准方法,包括以下步骤: 1)独立看门狗定时器可读的情况下,配置独立看门狗复位时间为2秒; 2)配置外部定时器定时每1豪秒计数一次,计数变量为tim_count; 3)当外部定时器计数变量tim_count到达2000时,读取独立看门狗相应计时; 4)如果独立看门狗计时>2秒,则说明内部RC振荡器计时比内部定时器计时快,根据比例纠正看门狗配置,具体为: 求得计数比例为2000:tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000); 如果看门狗计时<2秒,则说明内部RC振荡器计时比外部定时器计时慢,根据比例纠正看门狗配置,具体为: 求得计数比例为2000:tim_count,如果原独立看门狗需要定时时间为dog_time,则需要配置更改为dog_time*(tim_count/2000)。 本实施例的单片机独立看门狗定时校准方法,对于嵌入式设备来说,用单片机内现有的模块去解决了单片机内部独立看门狗定时不准确的工程技术问题。 以上已以较佳实施例公布了本发明,然其并非用以限制本发明,凡采取等同替换或等效变换的方案所获得的技术方案,均落在本发明的保护范围内。