低功耗设备
1.低功耗设备频繁的进入和退出休眠,是不是因为软件定时器触发的
2.频繁的进入和退出休眠这样会不会对低功耗的要求产生影响,
3.如果是软件定时器触发的,可否把这个触发条件关闭,只保留中断触发
4.tkl_gpio_output_use_wakeup_mode返回true的引脚为什么没有一直保持推挽输出
5.退出和进入休眠的轮询时间如何修改
1.低功耗设备频繁的进入和退出休眠,是不是因为软件定时器触发的
2.频繁的进入和退出休眠这样会不会对低功耗的要求产生影响,
3.如果是软件定时器触发的,可否把这个触发条件关闭,只保留中断触发
4.tkl_gpio_output_use_wakeup_mode返回true的引脚为什么没有一直保持推挽输出
5.退出和进入休眠的轮询时间如何修改
1.进入休眠是sdk控制的,当没有任务需要执行且满足休眠条件时会自动进入休眠
2.进入和退出休眠 是可以控制的 tal_cpu_allow_sleep 和 tal_cpu_force_wakeup 是允许和禁止进入休眠
3.定时器是你自己控制的,不需要可以stop
4.telink由于硬件原因进入休眠无法保持推挽输出
5.同2,可应用自己控制,唤醒最长2min,否则sdk会强制重启防止一直唤醒导致急速耗电
pwm驱动蜂鸣器,路由设备就可以,为什么低功耗的就不可以,需要怎么处理,下面是代码
Code: Select all
OPERATE_RET v_ret = OPRT_COM_ERROR;
tkl_pwm_mapping_to_gpio((UINT32_T)TUYA_PWM_NUM_0, USER_PWM_CH0_PIN); // PC3
TUYA_PWM_BASE_CFG_T v_cfg = {
.duty = 1000,
.frequency = 500,
.polarity = pwm_polarity,
};
tkl_pwm_idle_level_set(TUYA_PWM_NUM_0, 0);
v_ret = tal_pwm_init(TUYA_PWM_NUM_0, &v_cfg);
tal_pwm_start(TUYA_PWM_NUM_0);
TAL_PR_DEBUG("pwm init ok!");
Code: Select all
tkl_pwm_mapping_to_gpio((UINT32_T)TUYA_PWM_NUM_0, TUYA_GPIO_NUM_13); // PB5
TUYA_PWM_BASE_CFG_T v_cfg = {
.duty = 1000,
.frequency = 500,
.polarity = TUYA_PWM_POSITIVE,
};
tkl_pwm_idle_level_set(TUYA_PWM_NUM_0, 0);
tal_pwm_init(TUYA_PWM_NUM_0, &v_cfg);
tal_pwm_start(TUYA_PWM_NUM_0);
1.这是我在 3.8.0 tuya_init_last中添加的函数,实际测试PB5管脚可以正常输出pwm波
2.请确认在你的程序中 USER_PWM_CH0_PIN 这个管脚是否被别的功能占用?
3.请在demo中添加我的上述程序在你的环境中进行验证
现在的情况是:在OPERATE_RET tuya_init_first(VOID_T)里面调用,可以正常输出,初始化之后,在软件定时器里面 tal_pwm_start(TUYA_PWM_NUM_0);就不可以了,这种情况你们遇到过吗
1.该开发框架低功耗设备进入休眠后,gpio 功能会被重置,你可以在 tal_pwm_start 前调用 gpio_set_func 进行配置,比如 gpio_set_func(GPIO_PB5, AS_PWM5)。
2.调用pwm start后设备将强制唤醒不会进入休眠,最长保持2min sdk会有兜底重启;tal_pwm_stop 可以停止pwm输出并可进入休眠。
3.进入休眠时sys clk会进行切换,为了保持pwm精准输出,建议每次使用pwm输出时都进行一次配置。
huanghuan 2024年 Feb 5日 11:171.该开发框架低功耗设备进入休眠后,gpio 功能会被重置,你可以在 tal_pwm_start 前调用 gpio_set_func 进行配置,比如 gpio_set_func(GPIO_PB5, AS_PWM5)。
2.调用pwm start后设备将强制唤醒不会进入休眠,最长保持2min sdk会有兜底重启;tal_pwm_stop 可以停止pwm输出并可进入休眠。
3.进入休眠时sys clk会进行切换,为了保持pwm精准输出,建议每次使用pwm输出时都进行一次配置。
你好,我在调用tal_cpu_force_wakeup();之后,再次调用
OPERATE_RET app_pwm_init(UINT_T fre, UINT_T du)
{
// tal_cpu_force_wakeup();
OPERATE_RET v_ret = OPRT_COM_ERROR;
/* TUYA_GPIO_BASE_CFG_T pwm_cfg = {
.direct = TUYA_GPIO_OUTPUT,
.mode = TUYA_GPIO_PUSH_PULL,
//.level = TUYA_GPIO_LEVEL_HIGH,
};
tal_gpio_init(USER_PWM_CH0_PIN, &pwm_cfg);*/
Code: Select all
tkl_pwm_mapping_to_gpio((UINT32_T)TUYA_PWM_NUM_0, USER_PWM_CH0_PIN); // PC3
TUYA_PWM_BASE_CFG_T v_cfg = {
.duty = du,
.frequency = fre,
.polarity = pwm_polarity,
};
tkl_pwm_idle_level_set(TUYA_PWM_NUM_0, 0);
v_ret = tal_pwm_init(TUYA_PWM_NUM_0, &v_cfg);
// gpio_set_func(USER_PWM_CH0_PIN, AS_PWM0);
TAL_PR_DEBUG("pwm init ok!");
// tal_mutex_create_init(&mutex);
return v_ret;
}
然后 tal_pwm_start(TUYA_PWM_NUM_0);
发现还是不能正常输出PWM能帮忙看一下怎么回事吗
1.你之前调用 gpio_set_func 函数解决了问题吗?
2.你现在是修改了什么导致的问题?
还是之前的问题,调用gpio_set_func 这个之后,程序就不正常了,而且也没有输出PWM
我看调用tkl_pwm_init里面有这个
if(g_firt_in[ch_id] == 0){
g_firt_in[ch_id] = 1;
gpio_set_func(g_io_pwm_table.gpio, g_io_pwm_table.func);
}
调用tkl_pwm_init初始化,但还是没有解决