STC32G12K128的板子,看门狗(WDT)复位后,IIC(I2C)模块错误
用电源开关复位,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:复位相应的外设模块模块,需软件清零。” 这个话不太明白具体怎么做?请知道的大佬指教,谢谢!
那就是你的看门狗复位了,没有及时喂狗。看门狗没有溢出复位前,不会影响任何程序、不影响任何外设。
开发程序时,不要开看门狗,项目完成后,再在主循环中喂狗。否则,你这样的情况,就不知道是什么原因了。但很明显,是看门狗复位了,你没有及时喂狗。 梁工 发表于 2023-3-14 21:04
那就是你的看门狗复位了,没有及时喂狗。看门狗没有溢出复位前,不会影响任何程序、不影响任何外设。
开发 ...
是没有及时喂狗复位的,就是测试这种情况。现在的问题是,看门狗复位后,外设模块I2C工作不正常了。用关闭打开电源开关的方式复位I2C的复位方式I2C模块工作就是正常的。现在的问题,看门复位后外设模块I2C不能正常工作,这个肯定是有问题的,推测应该是有哪个地方的配置没有配置对?现在就不知道怎么配置让外设在看门狗复位后还能正常工作?
STC给的例子没有提供这方面的参考,只是很简单的看门狗不喂狗的复位代码,里面什么其它外设工作都没有。 看门狗复位后会重新跑程序,重新初始化外设(包括I2C),除非你的程序本来就不正常,否则不会存在重新初始化后不正常的问题,因为复位后与刚上电,执行的初始化都一样的。并且操作I2C居然导致不喂狗,说明程序有大问题。 STC32G12K128的 看门狗复位 = 复位脚复位
你测试下复位脚复位 梁工 发表于 2023-3-15 09:42
看门狗复位后会重新跑程序,重新初始化外设(包括I2C),除非你的程序本来就不正常,否则不会存在重新初始 ...
同一个程序,复位电源开关程序的I2C能正常工作,看门狗复位I2C不能正常工作。I2C导致不喂狗是特定的情况下触发I2C不工作的,比如让从I2C模块掉电,或者断开主从I2C之间的SCL/SDA连线,这个时候I2C工作异常,触发看门狗复位。现在的目的就是测试I2C工作异常后让看门狗复位,看看门狗复位后I2C能否正常工作?
这种测试方法和思路应该没什么问题吧?但是现在的结果就是看门狗复位后I2C不能正常工作。 梁工 发表于 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:2000error:0 itcounts:0
STC IIC W/R over:0 right:4000error:0 itcounts:0
C:\Users\teng\Documents\STC32G-2.jpg 神农鼎 发表于 2023-3-15 09:42
STC32G12K128的 看门狗复位 = 复位脚复位
你测试下复位脚复位
复位管脚/P5.4-NRST 复位, 是不是就是我说的PCB板上的电源开关?电源开关复位结果是正常的,但是现在看门狗复位就是不正常。 已联系梁工,稍等他回复您! 我不干技术十多年了,是否你外围 I2C 器件异常了,
如对方有受外部控制的复位管脚,你定期控制他复位
如没有,你加个电源控制电路控制你外围异常的I2C器件
页:
[1]
2