近期,有客户向我们定制了一款枪支资产监控设备,可以对资产进行定位跟踪监控,便于资产的管理。我们在对这款资产监控设备进行研发测试时,经常会遇到设备睡眠后唤醒,服务器数据下发接收错误的问题,笔者在进行各种方法尝试解决之后,发现了问题出现的原因:是设备从睡眠后唤醒,时钟未同步导致的。相信很多产品研发人员都会遇到相似的问题。下面笔者将解决方法记录在下面。设备睡眠后唤醒,导致服务器数据下发接收错误解决方法//系统时钟配置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,和系统刚睡眠唤醒时,时钟一样,避免了数据错误。
本文出自快速备案,转载时请注明出处及相应链接。