|
发表于 2014-10-30 12:58:07
|
显示全部楼层
本帖最后由 wicy001 于 2014-10-30 12:59 编辑
我目前正在用这个芯片diy个小东西,调试低功耗,关键在与GPIO的设置,其他设置LCD,RCT,也就影响几个uA。
在进入halt之前,最好每个引脚都设置一遍
1.无电气未连接的引脚可以设上拉输入或推挽输入
2.有电气连接的,就要非常小心地设置上拉或推挽,绝不能用开漏
3.对于通信引脚,也要特别注意。
比如:如果TX设为推挽输出高,或RX设为上拉输入,就可能将电流注入另一个IC
同样,I2C一般都外置上拉电阻,也有可能将电流注入另一个IC。测试I2C的时候,可以将上拉电阻去掉,引脚设为推挽输入低。
我找到一个官方测试低功耗的softdemo,
另外在附一个我用的低功耗设置(RTC+LCD+LDO,待机6UA)
------------------以下代码摘自官方demo-------------------------------------
/**
* @brief This function initializes in Ultra Low Power mode,
* disable the LCD, LSE and configures the unused IOs
* in output push-pull
* @caller main and ADC_Icc_Test
* @param None
* @retval None
*/
void Halt_Init(void)
{
/* Set STM8 in low power */
PWR->CSR2 = 0x2;
LCD_Cmd(DISABLE);
/* To wait LCD disable */
while ((LCD->CR3 & 0x40) != 0x00);
/* Set GPIO in low power*/
GPIO_LowPower_Config();
/* Stop RTC Source clock */
CLK_RTCClockConfig(CLK_RTCCLKSource_Off, CLK_RTCCLKDiv_1);
#ifdef USE_LSE
CLK_LSEConfig(CLK_LSE_OFF);
while ((CLK->ECKCR & 0x04) != 0x00);
#else
CLK_LSICmd(DISABLE);
while ((CLK->ICKCR & 0x04) != 0x00);
#endif
/* Stop clock RTC and LCD */
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);
}
/**
* @brief configure GPIOs before entering low power
* @caller Halt_Init and ADC_Icc_Test
* @param None
* @retval None
*/
void GPIO_LowPower_Config(void)
{
/* Port A in output push-pull 0 */
GPIO_Init(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 ,GPIO_Mode_Out_PP_Low_Slow);
/* Port B in output push-pull 0 */
GPIO_Init(GPIOB, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
/* Port C in output push-pull 0 except Button pins */
GPIO_Init(GPIOC, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Slow);
/* Port D in output push-pull 0 */
GPIO_Init(GPIOD, GPIO_Pin_All, GPIO_Mode_Out_PP_Low_Slow);
/* Port E in output push-pull 0 */
GPIO_Init(GPIOE, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5, GPIO_Mode_Out_PP_Low_Slow);
/* Port F in output push-pull 0 */
/* Not PF0 because Input for ICC measurement */
GPIO_Init(GPIOF,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 ,GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOC, GPIO_Pin_1, GPIO_Mode_Out_PP_High_Slow);
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|