跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. HA freertos 从powerdown模式下唤醒异常

HA freertos 从powerdown模式下唤醒异常

已定时 已固定 已锁定 已移动 YTM32B1H系列
4 帖子 2 发布者 57 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • gaoShengG 离线
    gaoShengG 离线
    gaoSheng
    写于 最后由 编辑
    #1

    使用YCT的生成的HA freertos增加gpio wku唤醒powerdown,发现程序并没有进入复位流程重新执行main程序.没有打印Build信息
    8d8e709e-3c19-481a-aa18-7b206a6ab0b8-image.png
    8f87509c-6739-4b34-8827-f7c4aa7e2fdc-image.png

    void prvPrintTaskB(void *pvParameters)
    {
        (void)pvParameters;
        while (1)
        {
            PRINTF("POWERDOWN_MODE \r\n");
    
    	POWER_SYS_SetMode(POWERDOWN_MODE, POWER_MANAGER_POLICY_AGREEMENT);
    
            vTaskDelay(2000UL);
        }
    }
    
    int main(void)
    {
        /* USER CODE BEGIN 1 */
        status_t status = STATUS_SUCCESS;
    	  volatile uint32_t temp = 0xFFFFFF;
        /* USER CODE END 1 */ 
        Board_Init();
        PRINTF("1\r\n");
        /* USER CODE BEGIN 2 */
        PRINTF("main Build %s %s\r\n", __DATE__, __TIME__);
        WKU_DRV_SetPinIsolation(false);	
        WKU_DRV_InitReset(WKU_INST, &wkup_resetConfig0);
        WKU_DRV_InitPinWakeup(WKU_INST, WKP_PIN_CH_NUM0, wkup_pinsConfig0);
      	PRINTF("2\r\n");
        while(temp--);
    		WKU_DRV_SetPinIsolation(true);
      	PRINTF("Freertos GPIO wku form pd Demo!\r\n");
      	PRINTF("3\r\n");
        xTaskCreate(prvPrintTaskA, "TaskA", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_RECEIVE_TASK_PRIORITY, NULL);
        xTaskCreate(prvPrintTaskB, "TaskB", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL);
    
        /* Create the software timer that is responsible for turning off the LED
      if the button is not pushed within 5000ms, as described at the top of
      this file. */
        xPrintTimer = xTimerCreate("PrintTimer",         /* A text name, purely to help debugging. */
                                   5000UL,               /* The timer period, in this case 5000ms (5s). */
                                   pdTRUE,               /* This is a one shot timer, so xAutoReload is set to pdFALSE. */
                                   (void *)0,            /* The ID is not used, so can be set to anything. */
                                   prvPrintTimerCallback /* The callback function that switches the LED off. */
        );
        xTimerStart(xPrintTimer, 0);
        /* Start the tasks and timer running. */
        vTaskStartScheduler();
        /* USER CODE END 2 */
    
        /* Infinite loop */
        /* USER CODE BEGIN WHILE */
        while (1)
        {
            if (status != STATUS_SUCCESS)
            {
                break;
            }
            /* USER CODE END WHILE */
            /* USER CODE BEGIN 3 */
        }
        return status;
        /* USER CODE END 3 */
    }
    

    后面测试发现如果我注释掉WKU_DRV_SetPinIsolation的两句配置后能正常从main进入,如果我把WKU_DRV_SetPinIsolation(true); 加到 POWER_SYS_SetMode前面现象同上

        //WKU_DRV_SetPinIsolation(false);	
    
        //WKU_DRV_SetPinIsolation(true);	
    

    ca49963a-7d5e-4819-837c-6fe64368472c-image.png
    07073679-42d4-4547-896b-be8fd330a052-image.png
    看到Power_Pin_Wakeup_From_Powerdown_Mode_Demo也有这个操作
    c4f78f70-d72b-4231-8087-2cce5ed65182-image.png

    WKU_DRV_SetPinIsolation API我的理解是保持引脚状态,为啥会影响从PD唤醒的程序的执行的位置

    gaoShengG 1 条回复 最后回复
    0
    • gaoShengG 离线
      gaoShengG 离线
      gaoSheng
      在 回复了 gaoSheng 最后由 编辑
      #2

      gaoSheng 下面是我的工程,在HA EVB Q176 Rev.B上面也能复现08e41432-d06e-40fa-9891-e77f6dfa5638-Freertos_powerdown_wku_Demo (2).zip

      1 条回复 最后回复
      0
      • majorM 离线
        majorM 离线
        major
        写于 最后由 编辑
        #3

        WKU_DRV_SetPinIsolation API确实是用来保持引脚状态的,并不会影响程序执行,测试效果上影响程序执行是因为UART的引脚在隔离状态并不会输出,也就表现为没有打印状态,因为处于唤醒隔离状态IO是保持原有状态的,必须解除隔离才能有正常的功能。

        gaoShengG 1 条回复 最后回复
        1
        • gaoShengG 离线
          gaoShengG 离线
          gaoSheng
          在 回复了 major 最后由 编辑
          #4

          major 感谢您的回复,我调整了一下 WKU_DRV_SetPinIsolation(false); 的位置(放到打印之前),程序运行确实与预期相符了

          1 条回复 最后回复
          0

        • 云途论坛规则/Yuntu Forum Rules

          发帖前请查看

        • YCT离线License申请流程

          帮助没办法联网的电脑使用YCT

        • YT CONFIG TOOL调查问卷

          帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

        • demo
          12
          can
          9
          lin stack
          6
          yt-link
          5
          vscode
          3
          adc模块
          2
          i2c
          2
          uuid
          2
          Online Users
          • 登录

          • 登录或注册以进行搜索。
          • 第一个帖子
            最后一个帖子
          0
          • 版块
          • 最新
          • 标签
          • 热门