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

YunTu Forum

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

HA freertos 从powerdown模式下唤醒异常

已定时 已固定 已锁定 已移动 已解决 YTM32B1H系列
4 帖子 2 发布者 2.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
      在 回复了 major 最后由 编辑
      #4

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

      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 YunTu
          写于 最后由 编辑
          #3

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

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

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

            1 条回复 最后回复
            0
            • ,FrankieF Frankie 将这个主题转为问答主题
            • ,FrankieF Frankie 将这个主题标记为已解决

          • 云途开发生态介绍

            快速上手云途开发生态

          • 云途论坛规则/Yuntu Forum Rules

            发帖前请查看

          • YT CONFIG TOOL调查问卷

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

          • can
            25
            demo
            22
            lin stack
            13
            uds
            13
            md14
            6
            yt-link
            6
            fbl
            5
            adc模块
            4
            Online Users
            QQT-EthanQ
            QQT-Ethan
            嵌入式小康嵌
            嵌入式小康
            HAIYANGH
            HAIYANG
            bhhzyB
            bhhzy
            xiangyuX
            xiangyu
            swustS
            swust
            • 登录

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