
使用STM32F103,从停止模式唤醒时调用以下函数进行时钟初始化,外部晶振故障的情况下,单片机多次唤醒后会有死机情况,怀疑是在外部晶振故障的情况下启动外部晶振,会有导致单片机死机的概率。请问有没有遇到这个问题或者清楚这个问题的老铁???????? void sysclocksetback(void) { __IO uint32_t StartUpCounter = 0,time_out=0x500,HES_status=0; /*根据标志状态选择启动外部时钟*/ RCC_HSEConfig(RCC_HSE_ON); while((HES_status==0)&&(StartUpCounter <= time_out)) { HES_status=RCC_GetFlagStatus(RCC_FLAG_HSERDY); StartUpCounter++; } if(HES_status) { /*使能时钟故障监测*/ RCC_ClockSecuritySystemCmd(ENABLE); /*!< PLLCLK = 8MHz(HSE) * 6 = 48 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_6); /*使能pll*/ RCC_PLLCmd(ENABLE); StartUpCounter=0; while((RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==0)&&(StartUpCounter <= time_out)) { StartUpCounter++; } /*选择pll做时钟源*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); StartUpCounter=0; while((RCC_GetSYSCLKSource()!=0x08)&&(StartUpCounter <= time_out)) { StartUpCounter++; } } else { /*禁能时钟故障监测*/ RCC_ClockSecuritySystemCmd(DISABLE); /*!< PLLCLK = 8MHz(HSI)/2 * 6 = 48 MHz */ RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_12); /*使能pll*/ RCC_PLLCmd(ENABLE); StartUpCounter=0; while((RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==0)&&(StartUpCounter <= time_out)) { StartUpCounter++; } /*选择pll做时钟源*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); StartUpCounter=0; while((RCC_GetSYSCLKSource()!=0x08)&&(StartUpCounter <= time_out)) { StartUpCounter++; } } } |
STM32F103C8出現找不到'STM32100B_EVAL/stm32100b_eval.h' file not found
STM32的DCode bus是连接到bus matrix的吗?参考手册描述和图片是不符吗?
stm32f407无法配置定时器2为全部dma
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
楼主,time_out是多长时间。RCC_HSEConfig(RCC_HSE_ON);失败以后再关闭一下HSE时钟。
1. 如果HSE之前能正常工作的话,通常再次启动很少会启动不了的。当然启动是要一点时间。楼主的软件timeout很难估算多长时间。建议延长这个值。 另外楼主怀疑晶振启动故障,不妨只用HSI 试试,看看会不会还出现故障。
2. 可以在时钟配置处增加跟踪代码,看看是不是此处引起的。
感谢
感谢