|
項(xiàng)目情況: STM8L051F3 用的內(nèi)部晶振,3.3V電池供電。PB0\PB1\PB2\PB3引腳接4個(gè)按鍵,串口用PA2\PA3. 采用ACTIVE HALT低功耗模式。
用RTC和pb引腳的4個(gè)線中斷來(lái)喚醒低功耗模式。 然后ADC采集電壓,通過(guò)串口發(fā)送出去。
出現(xiàn)問(wèn)題: 喚醒后串口波特率不對(duì),發(fā)送數(shù)據(jù)不對(duì)。 電流一直在毫安級(jí)。
void main(void)
{
disableInterrupts(); //關(guān)閉系統(tǒng)總中斷
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1); //內(nèi)部時(shí)鐘為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);//喚醒定時(shí)器中斷使能
RTC_WakeUpCmd(ENABLE);//RTC喚醒使能
enableInterrupts(); //使能系統(tǒng)總中斷
PWR_UltraLowPowerCmd(ENABLE);//超低功耗
while (1)
{
CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , DISABLE);
RTC_SetWakeUpCounter(9150);
RTC_WakeUpCmd(ENABLE);
CLK_PeripheralClockConfig (CLK_Peripheral_ADC1,DISABLE);//開(kāi)啟ADC時(shí)鐘
ADC_Cmd(ADC1,DISABLE);//ADC1使能
CLK_PeripheralClockConfig(CLK_Peripheral_USART1 , DISABLE); //使能USART1時(shí)鐘
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);
}
}
}
|
|