请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册
查看: 1012|回复: 14

STC32G12K128的板子,看门狗(WDT)复位后,IIC(I2C)模块错误

[复制链接]

该用户从未签到

1

主题

7

回帖

25

积分

新手上路

积分
25
发表于 2023-3-14 19:49:36 | 显示全部楼层 |阅读模式
用电源开关复位,I2C模块的读写是正常的,如果WDT复位起来后,I2C模块就无法正常读写了,导致程序反复的WDT复位。

大致代码如下:

int main(void)
{
        WTST = 0;                 
        WDT_Init();
        RSTFLAG |= 0x04;
       
        LED_config();
        I2c_Init();                        
        Uart2_Init();                              
        EA = 1;                                      
        delay_ms(10);                                

       printf("\r\n STC IIC start \n\r");
       
     while(1)
     {...
         WDG_Feed();
     }
}


void WDT_Init(void)
{       
        WDT_InitTypeDef        WDT_InitStructure;
       
        //WDT_InitStructure.WDT_PS = WDT_SCALE_16;         
        WDT_InitStructure.WDT_PS = WDT_SCALE_256;
        WDT_InitStructure.WDT_IDLE_Mode = WDT_IDLE_STOP;  
        WDT_InitStructure.WDT_Enable = ENABLE;           
        WDT_Inilize(&WDT_InitStructure);
//        NVIC_INT0_Init(ENABLE, Priority_0);         
}

void WDG_Feed(void)
{       
        WDT_Clear();                    //CLR_WDTλÖÃ1£¬¿´ÃŹ·¶¨Ê±Æ÷ÖØмÆÊý
}


文档里面有段话“写1:复位相应的外设模块模块,需软件清零。” 这个话不太明白具体怎么做?请知道的大佬指教,谢谢!



                       

STC32G.jpg
回复 送花

使用道具 举报

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-14 21:04:36 | 显示全部楼层
那就是你的看门狗复位了,没有及时喂狗。看门狗没有溢出复位前,不会影响任何程序、不影响任何外设。
开发程序时,不要开看门狗,项目完成后,再在主循环中喂狗。否则,你这样的情况,就不知道是什么原因了。但很明显,是看门狗复位了,你没有及时喂狗。

该用户从未签到

1

主题

7

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2023-3-15 09:36:35 | 显示全部楼层
梁工 发表于 2023-3-14 21:04
那就是你的看门狗复位了,没有及时喂狗。看门狗没有溢出复位前,不会影响任何程序、不影响任何外设。
开发 ...

是没有及时喂狗复位的,就是测试这种情况。现在的问题是,看门狗复位后,外设模块I2C工作不正常了。用关闭打开电源开关的方式复位I2C的复位方式I2C模块工作就是正常的。现在的问题,看门复位后外设模块I2C不能正常工作,这个肯定是有问题的,推测应该是有哪个地方的配置没有配置对?现在就不知道怎么配置让外设在看门狗复位后还能正常工作?
STC给的例子没有提供这方面的参考,只是很简单的看门狗不喂狗的复位代码,里面什么其它外设工作都没有。

该用户从未签到

45

主题

2743

回帖

6130

积分

超级版主

积分
6130
发表于 2023-3-15 09:42:42 | 显示全部楼层
看门狗复位后会重新跑程序,重新初始化外设(包括I2C),除非你的程序本来就不正常,否则不会存在重新初始化后不正常的问题,因为复位后与刚上电,执行的初始化都一样的。并且操作I2C居然导致不喂狗,说明程序有大问题。

该用户从未签到

538

主题

8729

回帖

1万

积分

管理员

积分
14201
发表于 2023-3-15 09:42:45 | 显示全部楼层
STC32G12K128的 看门狗复位 = 复位脚复位
你测试下复位脚复位

该用户从未签到

1

主题

7

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2023-3-15 09:53:59 | 显示全部楼层
梁工 发表于 2023-3-15 09:42
看门狗复位后会重新跑程序,重新初始化外设(包括I2C),除非你的程序本来就不正常,否则不会存在重新初始 ...

同一个程序,复位电源开关程序的I2C能正常工作,看门狗复位I2C不能正常工作。I2C导致不喂狗是特定的情况下触发I2C不工作的,比如让从I2C模块掉电,或者断开主从I2C之间的SCL/SDA连线,这个时候I2C工作异常,触发看门狗复位。现在的目的就是测试I2C工作异常后让看门狗复位,看看门狗复位后I2C能否正常工作?
这种测试方法和思路应该没什么问题吧?但是现在的结果就是看门狗复位后I2C不能正常工作。

该用户从未签到

1

主题

7

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2023-3-15 10:00:46 | 显示全部楼层
梁工 发表于 2023-3-15 09:42
看门狗复位后会重新跑程序,重新初始化外设(包括I2C),除非你的程序本来就不正常,否则不会存在重新初始 ...

STC IIC start RSTFLAG:0x1c

STC IIC start RSTFLAG:0x1c

STC IIC start RSTFLAG:0x1c

STC IIC start RSTFLAG:0x1c

STC IIC start RSTFLAG:0x1c

STC IIC start RSTFLAG:0x1c   //这种情况是看门狗复位,I2C不能正常工作。

STC IIC start RSTFLAG:0x14   //这种情况是开关电源复位,I2C正常工作。

STC IIC W/R over:0 right:2000  error:0 itcounts:0
STC IIC W/R over:0 right:4000  error:0 itcounts:0
C:\Users\teng\Documents\STC32G-2.jpg
STC32G-2.jpg

该用户从未签到

1

主题

7

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2023-3-15 10:08:24 | 显示全部楼层
神农鼎 发表于 2023-3-15 09:42
STC32G12K128的 看门狗复位 = 复位脚复位
你测试下复位脚复位

复位管脚/P5.4-NRST 复位, 是不是就是我说的PCB板上的电源开关?电源开关复位结果是正常的,但是现在看门狗复位就是不正常。
  • TA的每日心情
    开心
    昨天 09:01
  • 签到天数: 58 天

    [LV.5]常住居民I

    9

    主题

    164

    回帖

    1577

    积分

    版主

    积分
    1577
    发表于 2023-3-15 10:36:15 | 显示全部楼层
    已联系梁工,稍等他回复您!

    该用户从未签到

    538

    主题

    8729

    回帖

    1万

    积分

    管理员

    积分
    14201
    发表于 2023-3-15 10:39:33 | 显示全部楼层
    我不干技术十多年了,是否你外围 I2C 器件异常了,
    如对方有受外部控制的复位管脚,你定期控制他复位
    如没有,你加个电源控制电路控制你外围异常的I2C器件
    1.png
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-3-29 00:13 , Processed in 0.068454 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表