资产监控设备睡眠后唤醒,导致服务器数据下发接收错误,怎么办?

近期,有客户向我们定制了一款枪支资产监控设备,可以对资产进行定位跟踪监控,便于资产的管理。我们在对这款资产监控设备进行研发测试时,经常会遇到设备睡眠后唤醒,服务器数据下发接收错误的问题,笔者在进行各种方法尝试解决之后,发现了问题出现的原因:是设备从睡眠后唤醒,时钟未同步导致的。相信很多产品研发人员都会遇到相似的问题。下面笔者将解决方法记录在下面。
资产监控设备睡眠后唤醒,导致服务器数据下发接收错误,怎么办?
设备睡眠后唤醒,导致服务器数据下发接收错误解决方法
//系统时钟配置

void RCCConfig(void)

{

uint32_t runtime = 0;

//关闭外部高、低速时钟

RCC_HSEConfig(RCC_HSE_OFF);

RCC_LSEConfig(RCC_LSE_OFF);

//启动内部

RCC_HSICmd(ENABLE);

runtime=0;

while((RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET) && (runtime < 500))

{

SoftDelay();

runtime++;

}

RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2);//8M时钟

RCC_PLLCmd(ENABLE);

runtime=0;

while((RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)&& (runtime < 500))

{

SoftDelay();

runtime++;

}

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

RCC_LSICmd(ENABLE);

runtime=0;

while((RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET) && (runtime < 500))

{

SoftDelay();

runtime++;

}

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div1);

RCC_PCLK2Config(RCC_HCLK_Div1);

}
资产监控设备睡眠后唤醒,导致服务器数据下发接收错误,怎么办?
时钟配置函数

由于我们主板上面未使用外部高速晶振,因此配置采用门内部高速晶振,在唤醒时,进行内部晶振配置,当内部晶振刚唤醒时,时钟不准,因此默认采用了8M时钟进行工作。

因此在后续睡眠后,把时钟配置成8M,采用内部晶振2分频后在进行2倍频,达到8M,和系统刚睡眠唤醒时,时钟一样,避免了数据错误。

上一篇:Go 语言垃圾收集器的原理


下一篇:高德Serverless平台建设及实践