打印
[STM32F1]

郁闷,加入喂狗后就不正常了,

[复制链接]
1299|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wang12zhe|  楼主 | 2014-6-24 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

全局变量 vu8 RX_OK=0;,这个变量在串口收到符合要求的数据后置1

局部变量
   vu8 update=1;
     u8 read_out=1;
     vu8 write_in=0;
     u16 reset_time;

//===============start  add wang 20140619=====
while(update==1){
   if(read_out==1){
      TxBuffer1[0]=0x01;
      TxBuffer1[1]=0x03;  ///读参数
      TxBuffer1[2] = 0X00;
      TxBuffer1[3] = 0x88;   //参数地址 0x008d   
      TxBuffer1[4]=0x00;  // 主机请求的参数,这个0x8d应该没有实际意义
      TxBuffer1[5]=0x00;  // 主机请求的参数,这个0x8d应该没有实际意义
     TxBuffer1[6]=GetCRC16(TxBuffer1,6);
     TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
     USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    read_out=0;   
            }

  
if(RX_OK==1){
reset_time = RxBuffer1[4]*256 +RxBuffer1[5];
reset_time++;
RX_OK=0;
write_in=1;
}


if(write_in==1){
      TxBuffer1[0]=0x01;
      TxBuffer1[1]=0x06;  ///写参数
      TxBuffer1[2] = 0X00;
      TxBuffer1[3] = 0x88;   //参数地址 0x008d   
      TxBuffer1[4]=reset_time>>8;  // 主机请求的参数,这个0x8d应该没有实际意义
      TxBuffer1[5]=reset_time&0xFF;  // 主机请求的参数,这个0x8d
应该没有实际意义
      TxBuffer1[6]=GetCRC16(TxBuffer1,6);
      TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    write_in=0;   
   update =0;
  }
}


上述程序执行正常,但是看门会复位



//===============start  add wang 20140619=====
while(update==1){
   IWDG_ReloadCounter();// ======加入喂狗,
   if(read_out==1){
      TxBuffer1[0]=0x01;
      TxBuffer1[1]=0x03;  ///读参数
      TxBuffer1[2] = 0X00;
      TxBuffer1[3] = 0x88;   //参数地址 0x008d   
      TxBuffer1[4]=0x00;  // 主机请求的参数,这个0x8d应该没有实际意义
      TxBuffer1[5]=0x00;  // 主机请求的参数,这个0x8d应该没有实际意义
     TxBuffer1[6]=GetCRC16(TxBuffer1,6);
     TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
     USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    read_out=0;   
            }
if(RX_OK==1){
reset_time = RxBuffer1[4]*256 +RxBuffer1[5];
reset_time++;
RX_OK=0;
write_in=1;
}

///加入喂狗后下边程序不 执行====
if(write_in==1){
      TxBuffer1[0]=0x01;
      TxBuffer1[1]=0x06;  ///写参数
      TxBuffer1[2] = 0X00;
      TxBuffer1[3] = 0x88;   //参数地址 0x008d   
      TxBuffer1[4]=reset_time>>8;  // 主机请求的参数,这个0x8d应该没有实际意义
      TxBuffer1[5]=reset_time&0xFF;  // 主机请求的参数,这个0x8d
应该没有实际意义
      TxBuffer1[6]=GetCRC16(TxBuffer1,6);
      TxBuffer1[7]=GetCRC16(TxBuffer1,6)>>8;
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
    write_in=0;   
   update =0;
  }
}



这个是怎么回事,在线运行的时候都是正常的,但是直接运行的话加入喂狗后就不正常了?
?
使用的是IAR编译器
沙发
mengzhi| | 2014-6-24 13:13 | 只看该作者
你的意思是,把这句去掉后就可以了???

使用特权

评论回复
板凳
wang12zhe|  楼主 | 2014-6-24 19:24 | 只看该作者
mengzhi 发表于 2014-6-24 13:13
你的意思是,把这句去掉后就可以了???

功能是能实现了,但是不是很满意,
因为



  
if(RX_OK==1){
reset_time = RxBuffer1[4]*256 +RxBuffer1[5];
reset_time++;
RX_OK=0;
write_in=1;
}是在等待一个条件,复位几次后跟这个MCU通信的模块有返回数据,等待的条件满足,就可以了,但是
我想避免这个“复位几次”

使用特权

评论回复
地板
SLHSu37| | 2014-6-25 08:37 | 只看该作者
MODBUS RTU?

使用特权

评论回复
5
wang12zhe|  楼主 | 2014-6-25 08:46 | 只看该作者
找到问题了,和我的单片机通信的MCU初始化慢,不喂狗的是否每次看门狗复位,直到另一个MCU初始化完成,才能正常通信,
喂狗的话……

使用特权

评论回复
6
wang12zhe|  楼主 | 2014-6-25 08:47 | 只看该作者
SLHSu37 发表于 2014-6-25 08:37
MODBUS RTU?

使用特权

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

本版积分规则

101

主题

205

帖子

1

粉丝