库函数 SystemInit()与自己写的void RCC_Configuration(void)的区别
void RCC_Configuration(void)
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); //时钟管理重置 /* RCC system reset(for debug purpose) */
RCC_HSEConfig(RCC_HSE_ON); //打开外部晶振 //Enable HSE
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待外部晶振就绪 //Wait till HSE is ready
if(HSEStartUpStatus == SUCCESS)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB使用系统时钟 //HCLK = SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1); //APB2为HCLK/1 //PCLK2 = HCLK/1
RCC_PCLK1Config(RCC_HCLK_Div2); //APB1为HCLK/2 //PCLK1 = HCLK/2
RCC_ADCCLKConfig(RCC_PCLK2_Div4); //设置ADC时钟频率
//注:AHB主要负责外部存储器时钟。PB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
FLASH_SetLatency(FLASH_Latency_2); //flash操作的延时 //Flash 2 wait state
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //flash读取缓冲,加速 //Enable Prefetch Buffer
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLLCLK = 8MHz * 9 = 72MHz
RCC_PLLCmd(ENABLE); //启动PLL //Enable PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) //等待PLL启动 /* Wait till PLL is ready */
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //将PLL设置为系统时钟源 /* Select PLL as system clock source */
while(RCC_GetSYSCLKSource() != 0x08) //等待系统时钟源的启动 /* Wait till PLL is used as system clock source */
{
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我的实现:
//系统时钟初始化函数
//pll:选择的倍频数,从2开始,最大值为16
void Stm32_Clock_Init(u8 LL)
{
unsigned char temp=0;
MYRCC_DeInit(); //复位并配置向量表
RCC->CR|=0x00010000; //外部高速时钟使能HSEON
while(!(RCC->CR>>17));//等待外部时钟就绪
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=2;//抵消2个单位
RCC->CFGR|=PLL<<18; //设置PLL值 2~16
RCC->CFGR|=1<<16; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2个延时周期
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>25));//等待PLL锁定
RCC->CFGR|=0x00000002;//PLL作为系统时钟
while(temp!=0x02) //等待PLL作为系统时钟设置成功
{
temp=RCC->CFGR>>2;
temp&=0x03;
}
}
---------------------------------
原子兄,你好,3.5的库文件里没有这个Stm32_Clock_Init(),只有个System_Init()。这个怎么用啊
---------------------------------
那你就用System_Init()
 ROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
那么这个System_Init()到底使用的是内部晶振还是外部晶振啊 ,我看聊下他会好些定义的是内部晶振啊 要用外部晶振怎么定呀 ‘
一周热门 更多>