各位专家,目前用stm32做一个低功耗的项目,遇到一些问题向各位求教。
目前需求:
1、休眠1秒,唤醒工作一次,周而复始。
2、工作时,需要ns级的delay来支撑IIC通信,从而与外围芯片建立IIC连接。
目前现象是:
1、在不初始化systick的情况下,系统可进入stop模式,并在1s后由rtc唤醒,但不基于systick没想到办法实现ns级delay来支持iic。(唤醒后功耗46ma,休眠后功耗300ua)
2、在初始化systick的情况下,系统进入stop模式后,瞬间会被systick中断唤醒(关闭sysick中断休眠正常),失去休眠效果。
需要请教的是:
1、如何解决systick唤醒stop的问题
2、若不用systick,如何实现ns级delay从而支撑iic通信
3、stop模式下,如何进一步降低功耗(stop配置代码下附)
4、正常工作状态下,有何降低功耗的办法。
5、为降低功耗,如何将jtag设为普通io,且如何实现程序烧写
问题有点多,多谢大家
附 stop代码:
void Sys_Stop(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphResetCmd(0X01FC,DISABLE); //复位所有IO
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
//GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1|
RCC_APB2Periph_ADC1|RCC_APB2Periph_ADC2,
DISABLE); // RCC_APB1Periph_SPI1
RCC_APB1PeriphClockCmd( RCC_APB1Periph_SPI2|RCC_APB1Periph_TIM2|RCC_APB1Periph_USART3,
DISABLE);
NVIC_SystemLPConfig(NVIC_LP_SLEEPDEEP,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //使能PWR和BKP外设时钟
// RTC_ITConfig(RTC_IT_ALR, ENABLE);
// RTC_WaitForLastTask();
SetAlarm(RTC_GetCounter() + 950);
RTC_WaitForLastTask();
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
RCC_Configurationb();
// SysTick_Configuration();
} |