为了做个低功耗项目,从最便宜的STM8S003切换到低功耗系列里较便宜的STM8L051;
在STM8S003上调通了HALT休眠处理后,最低待机电流是67uA;用了STM8L051后,实测能到2uA;
但是后来遇到个诡异的问题,TIMER4莫名其妙不动作,好像不计时了。开关中断,改初始化配置,都没用,很奇怪。
。
。
。
。
。
最后发现,是init'初始化的时候,没有给TIMER4配置CLK时钟源,导致的,
原来的代码并没有写TIM4,
[cpp] view plain copy
- CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_4);
- CLK_SYSCLKSourceSwitchCmd(ENABLE);
- CLK_HSEConfig(CLK_HSE_ON);
- //-----------
- CLK_PeripheralClockConfig(CLK_Peripheral_TIM2,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_TIM3,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_I2C1,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_SPI1,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_USART1,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_BEEP,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_TIM1,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_RTC,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_LCD,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_BOOTROM,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_AES,DISABLE);
- CLK_PeripheralClockConfig(CLK_Peripheral_SPI2,DISABLE);
- //-----------
后来加上了TIM4的ENABLE就好了。
[cpp] view plain copy
- TIM4_DeInit();//复位定时器4寄存器
- CLK_PeripheralClockConfig(CLK_Peripheral_TIM4,ENABLE);
- TIM4_TimeBaseInit(TIM4_Prescaler_64,124);
- //TIM4_PrescalerConfig(TIM4_Prescaler_64, TIM4_PSCReloadMode_Immediate);
可见如果你用库函数配置了其他外设的CLK时钟源,而没有配置TIM4的话,系统默认是不会打开TIM4的CLK时钟分配的!!!!
也就是说要用一个外设,得先开启一个对应的CLK分配才行,这是跟STM8S很大的不同,,,,,,,,,2333333
|