項目情況: 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);
}
}
}
|