从时钟树中可以看出外接晶振可以接4-16Mhz,经过PLL倍频,最高可以达到16倍晶振的频率。笔者自己是外接的8Mhz晶振,所以说理论上可以达到8*16=128Mhz的频率。
所用芯片:stm32f103 编译工具:keil5
时钟配置子函数如下:
void HSE_Init(uint32_t RCC_PLLMul_x)//范围2-16
{
ErrorStatus HSEStatus;//定义
//重置RCC,否则不会有效果
RCC_DeInit();
//打开HSE
RCC_HSEConfig(RCC_HSE_ON);
HSEStatus=RCC_WaitForHSEStartUp();
//判断HSE的状态
if(HSEStatus==SUCCESS)
{
//库里面直接抄的,针对flash
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
//对AHB APB1APB2分频
RCC_HCLKConfig( RCC_SYSCLK_Div1 );
RCC_PCLK1Config( RCC_HCLK_Div2 );
RCC_PCLK2Config( RCC_HCLK_Div1 );
//设置PLL,官方库中声明要先设置后打开PLL
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
//使能PLL
RCC_PLLCmd(ENABLE);
//检测PLL状态,等待稳定跳出语句
while( RCC_GetFlagStatus( RCC_FLAG_PLLRDY) == RESET);
//系统时钟选为PLL
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK );
while(RCC_GetSYSCLKSource()!=0x08);
}
else
{
//如果配置失败,亮红灯。
LED_R_ON();
}
}
参考官方库中 static void SetSysClockTo72(void);
看出效果可以设置运算,延时亮灯,或者用示波器接PA8。
可以通过接PA8,配置MCO进行显示PLL,HSI,HSE以及系统时钟。
大概程序如下:
void MCO_Init()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
}
主程序中加一句
RCC_MCOConfig(RCC_MCO_SYSCLK);
选择输出系统时钟
可通过改变形参RCC_PLLMul_x(名字不要改,属于官方库中定义),改变系统时钟,sysclk=外接晶振频率*RCC_PLLMul_x.
笔者通过示波器测试如下:
官方推荐的72Mhz
16倍频后的频率128Mhz
超频测试中时间久会出现芯片发热,鉴于学习板贵重,没有继续试验。既然官方推荐72Mhz,还是老老实实用72Mhz。这里作为可作为时钟配置进行练习也是可以的。
上一篇:一个关于STM32内部USART的波特率配置话题
下一篇:STM32串口发送数据第一个字节丢失问题
推荐阅读最新更新时间:2024-11-11 12:23
设计资源 培训 开发板 精华推荐
- 使用 Analog Devices 的 LT1372HVCN8 的参考设计
- LTC2391-16 演示板,带有 LQFP-48 中的 LT6350 优化驱动器、5V 16 位 250ksps Int Ref 并行/串行 SAR ADC
- mx1616步进电机驱动
- FRDM33664BEVB: MC33664ATL隔离网络高速收发器评估板
- LTC1735 提供低成本、高效的移动 CPU 电源
- 用于远程控制的 470MHz 射频收发器
- 使用 Analog Devices 的 LTC3119HFE 的参考设计
- L7805C 固定输出稳压器的典型应用
- 使用 ROHM Semiconductor 的 BU4946 的参考设计
- TinySquare,PY32F030L1xD的最小开发板