STM8L使用Active-halt mode 模式,配置成100ms唤醒一次采集数据,功耗大概在20ua一下,已经能满足要求了,现在想测试下采集到的数据,通过串口发送出去,主时钟用HSI 2M,RTC用LSE 32.768K,唤醒后还是这样的配置,唤醒程序里面先初始化了UART,在将组织好的数据发送出去,现在问题是最后两个字节老是错的。
程序架构大致这样
int main( void )
{
LSE_CLK(); //LSE 用作RTC时钟
HSI_CLK(0x03);//主时钟用内部16M 8分频 2M
PowerDownIO();
Init_WWDG();
Init_SpiPort();
Powerdown_RTC();
Lis3dh_Init();
asm("rim"); // 允许CPU全局中断
while (1)
{
if(gs_SysRunSt.wakeup_F)//RTC唤醒处理
{
gs_SysRunSt.wakeup_F=0;
GetAccAxesRaw(&data); //获取加速度数据
Init_USART1();
int_to_str(&data); //组织数据
for(i=0;i<21;i++)
{
USART1_sendchar(Com_3dh[i]);
}
}
if(gs_SysRunSt.wakeup_K)
{
gs_SysRunSt.wakeup_K = 0;//外中断唤醒,暂时没用
//LED_PORT=~LED_PORT;
}
ReadTime();
Free_WWDG();
asm("halt");
}
}
问题:
1:这种情况下最后两个字节老是错的,不知道什么原因?
2:另外现在还要外挂一个串口设备,会1s钟给我的单片机发送一次数据,在halt模式下UART不能唤醒,这块怎么怎么处理好呢? |