R8_GLOB_RESET_KEEP无效

int main()

{

    SetSysClock( CLK_SOURCE_PLL_60MHz );

    GPIOA_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

    GPIOB_ModeCfg(GPIO_Pin_All,GPIO_ModeIN_Floating);

#ifdef DEBUG

    GPIOA_SetBits( bTXD1 );

    GPIOA_ModeCfg( bTXD1, GPIO_ModeOut_PP_5mA );

    UART1_DefInit( );


    GPIOB_ModeCfg( GPIO_Pin_15, GPIO_ModeOut_PP_5mA );

#endif

    PRINT("start.\n");

    {

        PRINT("%s\n",VER_LIB);

    }

    PRINT("R8_GLOB_RESET_KEEP:%d\n",R8_GLOB_RESET_KEEP);

    if(R8_GLOB_RESET_KEEP == 0){

        SYS_ResetKeepBuf(1);

        GPIOB_SetBits( GPIO_Pin_15 );

    }else{

        SYS_ResetKeepBuf(0);

        GPIOB_ResetBits( GPIO_Pin_15 );

    }

    /*CH57X_BLEInit( );

    RF_RoleInit( );

    rf_init();

    while(1){

        DelayMs( 200 );

        RF_Tx( TX_DATA,TX_DATA_SIZE, 0x02, 0xFF );

    }*/


    PRINT( "shut down mode sleep \n" );

    RTC_TMRFunCfg(Period_4_S);

    PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_RTC_WAKE, Edge_ShortDelay );

    DelayMs( 2 );

    LowPower_Shutdown( 0 );                          //全部断电,唤醒后复位


    return 0;

}

R8_GLOB_RESET_KEEP无效一直是0

忘记说了,是CH573


你对这个寄存器的用法理解错了。

看下描述,这个寄存你可以当成1个存储寄存器来用,他里面的值不受描述中状态的影响,默认值就是0.

image.png


我觉你想找的是复位状态寄存器,用来看上电状态的,你看下面这个寄存器
image.png


我没理解错,我就是把他当成一个变量,休眠唤醒后看上一次是什么值,来进行判断LED是亮还是暗


这个问题有人能解决一下吗


R8_GLOB_RESET_KEEP这个寄存器你有对其写入数据吗?看你贴的代码没有写操作仅仅是读,该寄存器复位值是0,如果不对其写操作,默认一直是0的。


 SYS_ResetKeepBuf(1);

这句就是写


请贴出工程或代码。


#define SYS_ResetKeepBuf( d )(R8_GLOB_RESET_KEEP = d)/* 不受手动复位、 软件复位、 看门狗复位或者普通唤醒复位的影响 */

这个是SDK里面的CH57X_SYS.H里面,工程就上面那么多代码


之前就发现这个寄存器没法用,我就写了上面这个最简单的工程测试,4S LED亮然后暗,通过R8_GLOB_RESET_KEEP 来判断,如果0那么暗同时写1,如果亮那么同时写0


icon_rar.gifCH573_Reg_ZPF.rar

附件测试LOG如下,每次复位都会改变,并不会出现一直保持不变:

image.png

操作事项:USB转串口工具的RX连接PA9,注意工具和测试板共地。

--end


多谢我测试一下


icon_rar.gifCH573_Reg_ZPF_修改.zip

不行,因为你没有加RTC唤醒,我进入掉电模式,然后RTC唤醒,这个值就不会变。手册是说除了上电复位,其他复位都不变的。


我猜测这个问题和我另外一个问题有点关系。另外一个问题是下电模式RTC无法唤醒,一开始不会,运行20来分钟就无法唤醒死机


icon_rar.gifCH573_Reg_ZPF_修改2.zip

上面工程没有使用内部LSI,这个工程我把他加上了


请参考CH573DS文档描述。

image.png


image.png

所以 R8_GLOB_RESET_KEEP一直保持为0,因为每次执行完LowPower_Shutdown( 0 ); 都是对芯片重新上电,上电复位RPOR,从而导致了R8_GLOB_RESET_KEEP复位。


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