打印

stm32 IWDG的复位时间

[复制链接]
5957|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mousie|  楼主 | 2012-7-9 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初始化程序如下:
  IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);//必须首先使能命令
  IWDG_SetPrescaler(IWDG_Prescaler_128);//
  IWDG_SetReload(0xFFF);//最大的重装值
  IWDG_WriteAccessCmd(KR_KEY_Enable);//唤醒看门狗  
复位时间应该是13s左右吧
主循环程序如下:
  while (1)
  {
    SysTick_CounterCmd(SysTick_Counter_Clear);
   
    IWDG_WriteAccessCmd(KR_KEY_Reload);
//    PerameterThread();//参数设置
   
    GPIO_WriteBit(GPIOB, GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 , Bit_SET);
    GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_RESET);//开灯
   
    Delay(5);
   
//    Println("234");
   
    GPIO_WriteBit(GPIOB, GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 , Bit_RESET);
    GPIO_WriteBit(GPIOB, GPIO_Pin_5, Bit_SET);//关灯   
    Println("235");
   
    Delay(450);
  }

我的SysTick设置0.1ms中断,也就是说一个循环不到50ms,为什么IWDG就复位了呢?已经可以打印出一个235,然后等不到下一个234就复位。只要我把IWDG_WriteAccessCmd的函数内容注释掉变成空函数,程序就不回复位?这是为什么呢?
沙发
mousie|  楼主 | 2012-7-11 10:30 | 只看该作者
没人理我吗

使用特权

评论回复
板凳
21ID| | 2012-7-11 10:44 | 只看该作者
先确认一下复位时间是不是13s。还有你的delay函数时延时多少时间。

使用特权

评论回复
地板
IJK| | 2012-7-11 12:27 | 只看该作者
建议LZ用示波器,这样stm32 IWDG的复位时间、以及Delay的 时间都可以准确测量。问题就容易弄清楚了。

使用特权

评论回复
5
figo20042005| | 2012-7-11 12:55 | 只看该作者
看下你的狗复位时间是多少,还有你的程序是跑飞了

使用特权

评论回复
6
mousie|  楼主 | 2012-7-12 15:31 | 只看该作者
首先我的delay函数延时还是很准的这个是用示波器测过脉宽的
其次我编了个程序,初始化之后管脚拉高10ms然后再拉低,不喂狗,大概280ms之后电平变高,是否可以认为复位时间是280ms?
看门狗理论值我是这么算的:0xFFF*(40K/128)=13.104没算错吧?

使用特权

评论回复
7
mousie|  楼主 | 2012-7-24 16:26 | 只看该作者
沉了?

使用特权

评论回复
8
mousie|  楼主 | 2012-7-30 14:18 | 只看该作者
这个问题我初步找到原因了:因为我烧程序用的iap方式,在开始的bootload那块设置看门狗预分频=4,重装载=ff,然后正式程序里再设成128和fff,最后读了一下寄存器发现,好像这两个值没有写进去,程序还是按4和ff走的,所以复位时间总不对
现在的问题是,我已经在正式程序里加了两句
  while(IWDG_GetFlagStatus(IWDG_FLAG_PVU) == RESET);
  while(IWDG_GetFlagStatus(IWDG_FLAG_RVU) == RESET);
然后再写那两个寄存器,但是好像依然没写进去
请问在不改bootload的前提下,我要怎样做才能在正式程序里调整这两个寄存器呢

使用特权

评论回复
9
mousie|  楼主 | 2012-7-31 09:21 | 只看该作者
自己顶起

使用特权

评论回复
10
qzx0580| | 2012-7-31 09:23 | 只看该作者
stm32很稳定,不需要看门狗。

使用特权

评论回复
11
mousie|  楼主 | 2012-7-31 09:59 | 只看该作者
功能表里有这一条,看门狗肯定不能省的,不然以后会有麻烦

使用特权

评论回复
12
mousie|  楼主 | 2012-8-1 10:08 | 只看该作者
再顶一下吧

使用特权

评论回复
13
mousie|  楼主 | 2012-8-1 14:13 | 只看该作者
我又试了一下,在iap设置完看门狗之后,主程序如果看门狗不初始化的话是不起作用的,初始化之后,是按照iap设置的值来存储的。但是之后我又通过串口设置了一次,设置过程和初始化一样,这回就设置成功了,我也不知道是为什么,期待专家释疑

使用特权

评论回复
14
mickycao| | 2013-8-15 13:46 | 只看该作者
IWDG->KR = 0x55;    //解开PR和RLR写保护功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

63

帖子

1

粉丝