STM32学习和实践笔记(7):改变系统时钟的实验

今天完成了这个改变系统时钟的实验。实验是成功的。

#include "stm32f10x.h"
#include "led.h"

void delay(u32 i)
{
	while(i--);
}

void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟)
{
	RCC_DeInit(); //将外设RCC寄存器重设为缺省值
	RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE)
	if(RCC_WaitForHSEStartUp()==SUCCESS) //等待HSE起振
	{
		RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
		RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
		RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
		RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数
		RCC_PLLCmd(ENABLE); //使能或者失能PLL
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位设置与否,PLL就绪
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟(SYSCLK)
		while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08:PLL作为系统时钟
	}
}
int main()
{
	RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);//36M的系统时钟
	LED_Init();
	while(1)
	{
		GPIO_ResetBits(LED_PORT, GPIO_Pin_0 );
		delay(6000000);//当系统时钟改变时,同样的延时参数,时间就会明显不同,体现到LED上闪灭的速度就不一样了。
		GPIO_SetBits(LED_PORT, GPIO_Pin_0 );
		delay(6000000);
	}
}


代码中的延时函数,其实就是CPU什么都不做而根据传进来的数值来计数。比如上面写的6000000,那就是根据时钟来计数600000.

所以当系统时钟频率改变时,同样的延时参数,完成计数的时间就会明显不同,体现到LED上闪灭的速度就不一样了。

以上的代码,可以说是完全理解了,配置不同的时钟没有任何问题。

上一篇:使用uniapp实现小程序获取wifi并连接


下一篇:安卓四大组件——ContentProvider