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

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

查看全部评分

七哥 回答时间: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这语句。
农夫水0533 回答时间:2018-4-4 14:35:17
toofree 发表于 2018-4-2 23:54
比较诡异,即便是LSI,也不至于用30ms呀。
那要是从run模式到STOP模式时先设置IWDG,然后再切换时钟呢? ...

根据ST的说法是,HSI和LSI是异步时钟,在HSI运行时候配置使用LSI的IWDT,需要等待这么久;他们认为这个时间是正确的的,但是我有点怀疑,问一下大家有没有遇到过。
qq1450963225 回答时间:2018-7-25 16:49:22
大佬 可以教教我怎么用L031么 或者给我份基础代码文档   QQ:1450963225  万分感谢

点评

可以去这边看资料 https://www.stmcu.org.cn/document/list/index/category-681  发表于 2018-7-26 14:37
农夫水0533 回答时间:2018-7-26 19:10:19
qq1450963225 发表于 2018-7-25 16:49
大佬 可以教教我怎么用L031么 或者给我份基础代码文档   QQ:1450963225  万分感谢 ...

直接下载他们的demo就行,这个片子主要用于低功耗的产品。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版