使用的MCU是ch32f103c8t6,开启独立看门狗后主函数不运行了,在定时器里面喂狗,10ms.。试了很久都没用。

void iwdg_init(void)

{

//第一种方式


//    //使能独立看门狗的寄存器能够被修改

//    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

//

//    //配置独立看门狗的计数器

//    //独立看门狗的硬件时钟 = 40KHz / 256 = 156Hz

//    IWDG_SetPrescaler(IWDG_Prescaler_256);

//

//    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

//    //设置独立看门狗的重载值,

//    IWDG_SetReload(150-1); //大概1秒

//

//    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

//    //重载计数器值

//    IWDG_ReloadCounter();

//

//    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

//    //使能看门狗

//    IWDG_Enable();






//第2种方式


        RCC->RSTSCKR = RCC_LSION;

        while((RCC->RSTSCKR & RCC_LSIRDY) == 0);


        IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );


        IWDG_SetPrescaler(IWDG_Prescaler_32);


        IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );

        IWDG_SetReload(4000);


        IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );

        IWDG_Enable();


        IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );

        IWDG_ReloadCounter();


}


我也想知道,后续想直接USB-CDC和上位机通讯,一旦喂狗异常直接初始化USB代码,自动保持通讯顺畅.


您好,在CH32F103 EVT中有独立看门狗的例程,可以参考一下例程看门狗的初始化以及喂狗。此外注意一下定时器的喂狗时间是否在要求时间内。EVT下载链接如下。后续若有问题,可邮箱(lzs@wch.cn)沟通。

/downloads/CH32F103EVT_ZIP.html

 


image.png

image.png

我用的开发环境是rounriver,在这个软件建立的工程。

找到原因是外设库函数的使能看门狗用了“|”,按照数据手册,当LSI稳定后硬件置1,要用“&”


只有登录才能回复,可以选择微信账号登录