CC2540 PWM
我在用CC2540PWM控制灯时发现打开低功耗PWM输出很不稳定,关闭时正常,但如果不打开低功耗模式时广播时的电流太大,这个怎么解决?
PWM需要时钟源,低功耗会关闭时钟,二选一
我想在广播的时候开启低功耗,当收到蓝牙数据的时候主动开启时钟源,这样做行不行?
hi,Tao Hong,
请问你的PWM是怎么设置的呢,能方便把代码贴出来吗
广播的时候默认应该是不会进入低功耗模式的
Hi TaoHong
我也遇到同样的情况,只不过你使用的是定时器的比较输出,而我使用的是定时器的输入捕获,我验证过,就算是一个简单的定时器溢出中断,没有捕获也没有比较,只要把POWER_SAVING这个宏打开,定时器的计数频率就会出现偏差,也就是与设定的频率不对应,我觉得是OSAL进入和退出休眠时,晶振间的频繁切换造成定时器的计数不正确,至今还没找到解决方法。
尝试一下不要这个函数
HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_ENABLE_CLK_divIDE_ON_HALT );
Hi WBJ 关闭了该函数后,依然不能实现在打开POWER_SAVING的情况下,使用定时器进行计数,请问还有什么方法吗?
void PWM_init()
{
// PERCFG = PERCFG | 0x03; // Select Timer 1 Alternative 0 location, set U1CFG and U0CFG to Alternative 1
PERCFG = (PERCFG & ~0x40) | 0x03; // Select Timer 1 Alternative 0 location, set U1CFG and U0CFG to Alternative 1
// PERCFG = PERCFG | 0x40;
P2DIR |= 0xc0; // Give priority to Timer 1
P0SEL |= 0x18; // Set P0.4, P0.5 and P0.6 to peripheral
T1CNTH = 0xff;
T1CNTL = 0xff;
T1CTL = 0x02;
T1CCTL1 = 0x1c;
T1CCTL2 = 0x1c;
T1CC0L = 0x00;
T1CC0H = 0x01;
T1CC1L = 0x00;
T1CC1H = 0x00;
T1CC2L = 0x00;
T1CC2H = 0x00;
}
你如果开了POWER_SAVING后如果要使用定时器,在使用前加上下面的代码输出的频率就稳定了
CLEAR_SLEEP_MODE();
HAL_BOARD_INIT();
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
Thx TaoHong
请问添加了 CLEAR_SLEEP_MODE(); HAL_BOARD_INIT(); osal_pwrmgr_device( PWRMGR_ALWAYS_ON ); 这三句代码后,您是在哪里再启动POWER_SAVING 的呢?
我PWM输出只需要一段时间,完了后在加上osal_pwrmgr_device(POWER_SAVING )这个