项目情况: STM8L051F3 用的内部晶振,3.3V电池供电。PB0\PB1\PB2\PB3引脚接4个按键,串口用PA2\PA3. 采用ACTIVE HALT低功耗模式。
用RTC和pb引脚的4个线中断来唤醒低功耗模式。 然后ADC采集电压,通过串口发送出去。
出现问题: 唤醒后串口波特率不对,发送数据不对。 电流一直在毫安级。
void main(void)
{
disableInterrupts(); //关闭系统总中断
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //内部时钟为1分频 = 16Mhz
RTC_CLOCK_Init();
PWR_FastWakeUpCmd(ENABLE); //快速唤醒使能
CLK_HaltConfig(CLK_Halt_FastWakeup, ENABLE);
IO_Config();
UART1_Init(9600);
USART_SendData8(USART1 , 0x55);
RTC_ITConfig(RTC_IT_WUT, ENABLE);//唤醒定时器中断使能
RTC_WakeUpCmd(ENABLE);//RTC唤醒使能
enableInterrupts(); //使能系统总中断
PWR_UltraLowPowerCmd(ENABLE);//超低功耗
while (1)
{
CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , DISABLE);
RTC_SetWakeUpCounter(9150);
RTC_WakeUpCmd(ENABLE);
CLK_PeripheralClockConfig (CLK_Peripheral_ADC1,DISABLE);//开启ADC时钟
ADC_Cmd(ADC1,DISABLE);//ADC1使能
CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , DISABLE); //使能USART1时钟
USART_Cmd (USART1,DISABLE);//使能USART
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
halt();
Delay(1000);
UART1_Init(9600);
IO_Config();
if(WAKRUP_flag>0X87)
{
Delay(1000);
key_number=GPIO_ReadInputData(GPIOB);
key_number=key_number&0x0F;
USART_SendData8(USART1 , WAKRUP_flag);
Delay(100);
USART_SendData8(USART1 , key_number&0x0F);
Delay(100);
WAKRUP_flag=0;
}
if(RTC_flag==0X44)
{
ADC_initc();
RTC_flag=0;
Delay(100);
key_number=GPIO_ReadInputData(GPIOB);
key_number=key_number&0x0F;
USART_SendData8(USART1 , 0xAA);
ADCdata_get();
Delay(100);
sendbyte(VoltageValue>>8);
Delay(100);
sendbyte(VoltageValue);
Delay(200);
sendbyte(key_number);
Delay(200);
USART_SendData8(USART1 , 0xEE);
Delay(200);
}
}
}
|