完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
项目需要在调试STM32时遇到外部晶振,查看RCC_CR芯片的时刻时刻总是出现0次,表示外部振发生第一个状态:
HSE当开启时,HSERDY出现,则芯片会启动内部16Mhz晶振,但此时PLL分频注入,整个系统降到16Mhz,无法持续,立即启动内部的HSI为系统,同时通过配置PLL,将系统配置到 168Mhz, 因为系统设置源是在系统启动厚,主之前设置的,在SetSysClock(),首先需要自己设置HSI为系统函数源,代码如下: /** * @brief 将 HSI 配置为系统时钟源 **/ void HSI_SetSysClock() { __IO uint32_t HSIStartUpStatus = 0; RCC_DeInit(); //设置恒指 RCC_HSICmd(启用); HSIStartUpStatus = RCC-》CR & RCC_CR_HSIRDY; 如果(HSIStartUpStatus == RCC_CR_HSIRDY) { /* 选择稳压器电压输出 Scale 1 模式 */ RCC-》APB1ENR |= RCC_APB1ENR_PWREN; PWR-》CR |= PWR_CR_VOS; // HCLK = SYSCLK / 1 RCC_HCLKConfig(RCC_SYSCLK_Div1); /* HCLK = SYSCLK / 1*/ RCC-》CFGR |= RCC_CFGR_HPRE_DIV1; #if 定义(STM32F40_41xxx) || 定义(STM32F427_437xx) || 定义(STM32F429_439xx) || 定义(STM32F412xG) || 定义(STM32F446xx) || 定义(STM32F469_479xx) /* PCLK2 = HCLK / 2*/ RCC-》CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/ RCC-》CFGR |= RCC_CFGR_PPRE1_DIV4; #endif /* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx || STM32F412xG || STM32F446xx || STM32F469_479xx */ #if 已定义(STM32F401xx) || 定义(STM32F413_423xx) /* PCLK2 = HCLK / 1*/ RCC-》CFGR |= RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK / 2*/ RCC-》CFGR |= RCC_CFGR_PPRE1_DIV2; #endif /* STM32F401xx || STM32F413_423xx */ #if 定义(STM32F40_41xxx) || 定义(STM32F427_437xx) || 定义(STM32F429_439xx) || 定义(STM32F401xx) || 定义(STM32F469_479xx) /* 配置主锁相环 */ RCC-》PLLCFGR = HSI_PLL_M | (PLL_N 《《 6》) | (((PLL_P 》》 1) -1) 《《 16》 | (RCC_PLLCFGR_PLLSRC_HSI) | (PLL_Q 《《 24》); #endif /* STM32F40_41xxx || STM32F401xx || STM32F427_437x || STM32F429_439xx || STM32F469_479xx */ #if 定义(STM32F412xG) || 定义(STM32F413_423xx) || 定义(STM32F446xx) /* 配置主锁相环 */ RCC-》PLLCFGR = HSI_PLL_M | (PLL_N 《《 6》) | (((PLL_P 》》 1) -1) 《《 16》 | (RCC_PLLCFGR_PLLSRC_HSI) | (PLL_Q 《《 24》) | (PLL_R 《《 28》); #endif /* STM32F412xG || STM32F413_423xx || STM32F446xx */ /* 启用主 PLL */ RCC-》CR |= RCC_CR_PLLON; /* 等到主 PLL 准备就绪 */ 而(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } #if 定义(STM32F427_437xx) || 定义(STM32F429_439xx) || 定义(STM32F446xx) || 定义(STM32F469_479xx) /* 启用 Over-drive 将时钟频率扩展到 180 Mhz */ PWR-》CR |= PWR_CR_ODEN; 而((PWR-》CSR & PWR_CSR_ODRDY) == 0) { } PWR-》CR |= PWR_CR_ODSWEN; 而((PWR-》CSR & PWR_CSR_ODSWRDY) == 0) { } /* 配置Flash预取、指令缓存、数据缓存和等待状态*/ FLASH-》ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; #endif /* STM32F427_437x || STM32F429_439xx || STM32F446xx || STM32F469_479xx */ #if 定义(STM32F40_41xxx) || 定义(STM32F412xG) /* 配置Flash预取、指令缓存、数据缓存和等待状态*/ FLASH-》ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; #endif /* STM32F40_41xxx || STM32F412xG */ #if 定义(STM32F413_423xx) /* 配置Flash预取、指令缓存、数据缓存和等待状态*/ FLASH-》ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_3WS; #endif /* STM32F413_423xx */ #if 定义(STM32F401xx) /* 配置Flash预取、指令缓存、数据缓存和等待状态*/ FLASH-》ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_2WS; #endif /* STM32F401xx */ /* 选择主 PLL 作为系统时钟源 */ RCC-》CFGR &=(uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC-》CFGR |= RCC_CFGR_SW_PLL; /* 等到主 PLL 用作系统时钟源 */ 而((RCC-》CFGR & (uint32_t)RCC_CFGR_SWS )!= RCC_CFGR_SWS_PLL); { } } } 将上述代码添加到,设置外部时钟源失败异常处理流程SetSysClock()函数中: 系统恢复如初,系统时钟源恢复到168Mhz,很开心。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 11:18 , Processed in 0.773534 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号