完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32有5个时钟源:
1.HSI高速内部时钟,RC振荡器,可作为系统时钟或者用作PLL时钟输入。16MHZ 2.HSE高速外部时钟。4-26MHZ 3.LSI是低速内部时钟,RC振荡器。频率为32KHZ,用于驱动独立看门狗。 4.LSE低速外部时钟。用于驱动RTC时钟(RTCCLK) 5.PLL为锁相环倍频输出。主PLL由HSI或HSE提供时钟信号。 一共有三个PLL,分别为主PLL、专用PLLI2S、专用PLLSAI。 1)主PLL有两个不同的输出时钟。一个作为高速系统时钟(最高达216MHZ),第二个输出用于为 USB OTG FS、SDMMC 和 RNG 生成 48 MHz 时钟。 2)另外两个专用时钟也是为其他模块提供时钟源的。 对于每个时钟源在未使用时都可以打开或关闭,以降低功耗。 其中,HSI、HSE、PLL可用来驱动系统时钟SYSCLK。 PLLCLK = HSE *N /(M *P) Stm32_Clock_Init函数讲解: 时钟系统配置的一般步骤: 1.使能PWR时钟:调用函数__HAL_RCC_PWR__CLK_ENABLE(); 2.设置调压器输出电压级别: 调用函数__HAL_PWR_VOLTAGESCALING_CONFIG(); 3.选择是否开启Over_Drive功能。调用函数:HAL_PWREx_EnableOverDrive(); 4。配置时钟源相关参数:调用函数HAL_RCC_OscConfig(); 5.配置系统时钟源以及AHB,APB1,APB2的分频系数 调用函数 HAL_RCC_ClockConfig(); PS: Fvco = Fs*N/M; // Fvco VCO频率 Fsys = Fvco/P ; // Fsys 系统时钟频率 Fu*** = Fvco/Q; // Fu*** USB、RNG、SDIO等的时钟频率 // Fs PLL输入时钟频率,可以为HSI 或 HSE 例子: 外部晶振为25MHZ时,若N = 432; M = 25; P = 2 ;Q= 9 则 : Fvco = 25*432/25 = 432MHZ; Fsys = 432/2 = 216MHZ; Fu*** = 432/9 = 48 MHZ; 时钟源配置函数: HAL_RCC_OscConfig(); HAL_RCC_OscConfig(&RCC_OscInitStructure) RCC _OscInitTypeDef* RCC_OscInitStructure typedef struct { uint32_t OsillatorType; uint32_t HSEState; uint32_t HSIState; uint32_t LSEState; uint32_t HSICalibration Value; uint32_t LSIState; RCC_PLLInitTypeDef PLL; } RCC _OscInitTypeDef typedef struct { uint32_t PLLState; uint32_t PLLSource; uint32_t PLLM; uint32_t PLLN; uint32_t PLLP; uint32_t PLLQ; } RCC _PLLInitTypeDef RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE; // 时钟源为HSE RCC_OscInitStructure.HSEState=RCC_HSE_ON; //打开HSE RCC_OscInitStructure.PLL.PLLState=RCC_PLL_ON; // 打开PLL RCC_OscInitStructure.PLL.PLLSource=RCC_PLLSOURCE_HSE; //PLL时钟源选择为HSE RCC_OscInitStructure.PLL.PLLM=pllm; // 分频系数 RCC_OscInitStructure.PLL.PLLN=plln; //分频系数 RCC_OscInitStructure.PLL.PLLP=pllp;//分频系数 RCC_OscInitStructure.PLL.PLLQ=pllq; //分频系数 HAL_RCC_OscConfi(&RCC_OscInitStructure);//初始化 时钟配置函数:HAL_RCC_ClockConfig(); typedef struct { uint32_t ClockType; uint32_t SYSCLKSource; uint32_t AHBCLKDivider; uint32_t APB1CLKDivider; uint32_t APB2CLKDivider; } RCC_ClkInitTypeDef; RCC_ClkInitStructure.ClockType=(RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2); RCC_ClkInitStructure.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK;// 系统时钟源 RCC_ClkInitStructure.AHBCLKDivider=RCC_SYSCLK_DIV1;//AHB分频系数 RCC_ClkInitStructure.APB1CLKDivider=RCC_HCLK_DIV4;//APB1分频系数 RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV2;//APB2分频系数 HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_7);//同时设置FLASH延时周期为7WS,也就是8个CPU周期。 配置调压器输出级别和开启Over-Drive 功能需要开启PWR时钟。 今天的学习就到这,欢迎批评指正或补充~ |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:59 , Processed in 0.776760 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号