This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2540:关于 HAL_SYSTEM_RESET();

Guru**** 2557590 points
Other Parts Discussed in Thread: CC2540

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/573272/cc2540-about-hal_system_reset

器件型号:CC2540

当发生 GAPROLE_WAITING_FACT_TIMEOUT 状态时、我希望系统复位。

案例 GAPROLE_WAITING_FACT_TIMEOUT:

HAL_SYSTEM_RESET(); //<----------------
#ifdef PLUS_Broadcaster
//重置下一个连接的标志。
FIRST_CONn_FLAG = 0;
#endif  

但系统不会复位??

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否在其上设置了断点以查看它是否命中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我在它上设置了一个断点。 并实现它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何判断它没有复位?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是我的代码:
    静态空 peripheralStateNotificationCB( gaprole_states_t newState )

    switch (newState)

    案例 GAPROLE_Started:

    uint8 ownAddress[B_ADDR_LEN];
    uint8 systemId[DevInfo_system_ID_LEN];

    GAPRole_GetParameter (GAPROLE_BD_ADDR、ownAddress);

    //将6个字节的设备地址用于8个字节的系统 ID 值
    SystemID[0]= ownAddress[0];
    SystemID[1]= ownAddress[1];
    SystemID[2]= ownAddress[2];

    //将中间字节设置为零
    SystemID[4]= 0x00;
    SystemID[3]= 0x00;

    //向上移动三个字节
    SystemID[7]= ownAddress[5];
    SystemID[6]= ownAddress[4];
    SystemID[5]= ownAddress[3];

    DevInfo_SetParameter (DevInfo_system_ID、DevInfo_system_ID_LEN、systemId);

    中断;

    案例 GAPROLE_advertising:
    HalLedSet (HAL_LED_1、HAL_LED_MODE_ON);
    中断;

    案例 GAPROLE_Connected:
    HalLedSet (HAL_LED_1、HAL_LED_MODE_OFF);
    中断;

    案例 GAPROLE_WAITING_FACT_TIMEOUT:
    //特意终止链路:重置所有传感器
    SystemReset();
    中断;

    默认值:
    中断;


    gapProfileState = newState;


    如果系统复位、我可以使用 LightBlue 应用找到它。
    但我找不到 CC2540。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在 main 函数中设置一个断点、以查看它是否在您调用复位宏之后命中?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在复位函数中、是否可以添加 while (1)循环:

    while (1)
    HAL_SYSTEM_RESET();

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >>您能否在 main 函数中设置一个断点、以查看它在您调用复位宏后是否命中?

    否、在我调用复位宏之后、主函数断点不会命中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在代码中添加了"while (1)"、但系统也无法复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只需使用 BLE Stack v1.4.2中的密钥卡示例测试 HAL_SYSTEM_RESET、它会按预期复位。 检查您的 HAL_SYSTEM_RESET 是否按如下方式定义:

    #define WD_EN BV (3)
    #define WD_MODE BV (2)
    #define WD_INT_1900_USEC (BV (0)| BV (1))
    #define WD_RESET1 (0xA0 | WD_EN | WD_INT_1900_USEC)
    #define WD_RESET2 (0x50 | WD_EN | WD_INT_1900_USEC)
    #define WD_KICK () ST (halIntState_t _s;HAL_ENTER_CRITICAL_SECTION (_s);WDCTL =(0xA0 | WDCTL & 0x0F);WDCTL =(0x50 | WDCTL & 0x0F);HAL_EXIT_CRITICE_SECTION (_s);)

    /*禁用中断、设置看门狗计时器、等待复位*/
    #define HAL_SYSTEM_RESET() st (HAL_DISABLE_INTERRUPTS ();WDCTL = WD_RESET1;WDCTL = WD_RESET2;for (;););)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复、非常感谢您为解决问题提供的帮助。
    我已经尝试了这个函数。

    此功能可复位系统。

    静态空 hidappHandleKeys (uint8密钥,uint8状态)

    //未使用的参数
    (无效)州;
    IF (键和 HAL_KEY_SW_1)

    SystemReset();

    IF (键和 HAL_KEY_SW_2)






    我不知道为什么在'Case GAPROLE_WAITING_FACT_TIMEOUT'中无法重置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何使 GAPROLE_WAITING_FACT_TIMEOUT 情况发生?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为供参考,我在"案例 GAPROLE_WAITYing:"中放置了"HAL_SYSTEM_RESET();",它仍然可以正确复位。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、我很困惑、现在可以正常工作、我真的很抱歉给您带来不便。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让它现在工作是很好的。