你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L031独立看门狗切换时间慢,影响实时性,ST的技术支持...

[复制链接]
农夫水0533 提问时间:2018-4-2 10:45 /
   目前在做一个项目时候遇到一个非常棘手的问题,希望在这和大家讨论一下,如果有人有什么好的建议请给在下指条路子。
   一、产品的具体流程如下:1、在run 模式工作75ms 左右,此时设置独立看门狗时间是3S,完事以后进入stop模式
                                        2、在进入stop模式之前,独立看门狗时间修改成28S,开启RTC,RTC 15S中断一次,中断一次喂一次狗。
                                        3、唤醒事件把MCU从 stop模式唤醒,然后重新初始化时钟,重新设置看门狗为3S,然后进入run.

   二、具体问题描述:        1、在从run模式到STOP模式切换看门狗时间,看门狗切换时间过长达到了30ms(具体代码在下边)
                                       2、唤醒以后切换看门狗时间也达到了30ms,直接影响到了实时性。
                                       3、目前ST的技术支持说原因是:run时候用的HSI,stop 用的LSI,两个时钟是异步的,导致时间过长,
                                            他需要和原厂确认。
  二、1、整体代码如下
            int main(void)
            {
                 //系统初始化
                 SysInit();
                //大循环
                 while(1)
                {
                    //判断唤醒源执行操作
                     while(WakeSource)
                     {
                              if(WakeSource==1)
                              {
                              }
                              else if(WakeSource==0)
                              {
                               }

                      }
                     STOP();//进入休眠
                 }
                 return 0;
            }
        2 、独立看门狗程序如下
             stop模式:LPWDGIint(void)
                            {
                              RCC->CSR |=RCC_CSR_LSION;
                              while((RCC->CSR&RCC_CSR_LSIRDY)==0);
                              IWDG->KR = KR_KEY_ENABLE;
                              IWDG->KR = KR_KEY_EWA;
                              IWDG->PR = IWDG_PRESCALER_256;
                              IWDG->RLR = 4094;
                               while(IWDG->SR);
                              IWDG->KR = KR_KEY_RELOAD;       
                            }
                           时间都是耗在了  while(IWDG->SR);这句话上。
                           run模式之前修改只是修改了时间,其他和以上完全一样。


   不知道各位有什么建议或者对该问题的看法。
收藏 评论13 发布时间:2018-4-2 10:45

举报

13个回答
wenyangzeng 回答时间:2018-4-2 14:02:18
唤醒事件把MCU从 stop模式唤醒,建议不要重新初始化时钟,而只是改变IWDG的定时参数。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

butterflyspring 回答时间:2018-4-2 15:17:02
LSI不是一直都打开吗?你又没切换,为什么要这么做呢?只要更新一下IWDG就好了.

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

农夫水0533 回答时间:2018-4-2 17:19:13
wenyangzeng 发表于 2018-4-2 14:02
唤醒事件把MCU从 stop模式唤醒,建议不要重新初始化时钟,而只是改变IWDG的定时参数。 ...

不初始化时钟,确切的说不初始化HSI,程序起不来
农夫水0533 回答时间:2018-4-2 17:21:15
butterflyspring 发表于 2018-4-2 15:17
LSI不是一直都打开吗?你又没切换,为什么要这么做呢?只要更新一下IWDG就好了. ...

打开LSI这两句基本不会耗时间,时间是微秒级别,时间主要消耗在等待IWDG->SR为0这里。
wenyangzeng 回答时间:2018-4-2 19:10:49
农夫水0533 发表于 2018-4-2 17:19
不初始化时钟,确切的说不初始化HSI,程序起不来

都用LSI不行吗?
feixiang20 回答时间:2018-4-2 23:29:45
你代码语句确定都是正确的吗,逐步检查下参数运行中的变化,尝试改变30ms看看

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

toofree 回答时间:2018-4-2 23:54:27
农夫水0533 发表于 2018-4-2 17:21
打开LSI这两句基本不会耗时间,时间是微秒级别,时间主要消耗在等待IWDG->SR为0这里。 ...

比较诡异,即便是LSI,也不至于用30ms呀。
那要是从run模式到STOP模式时先设置IWDG,然后再切换时钟呢?相应的唤醒以后,先切换HSI时钟,再设置IWDG。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

农夫水0533 回答时间:2018-4-4 14:32:22

在run模式使用LSI运行比较慢,IWGD一直使用的是LSI
农夫水0533 回答时间:2018-4-4 14:33:28
feixiang20 发表于 2018-4-2 23:29
你代码语句确定都是正确的吗,逐步检查下参数运行中的变化,尝试改变30ms看看 ...

语句是正确的,对比DEMO没问题,和ST的计数支持也联调过。目前看时间就是卡在等待SR寄存器清0这语句。
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版