1、Stm32 学习笔记1—时钟 1、5个时钟源HSI、HSE、LSI、LSE、PLL HIS:内部高速时钟 HSE:外部高速时钟 LSI:内部低速时钟 LSE:低速外部时钟 PLL:锁相环输出 2、AMBA总线 AHB:系统总线 APB:外设总线,其总APB2为高速外设总线,APB1为低速外设总线 外设时钟使能函数:NewState取值:ENABLE或DISABLE void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState) void RCC_AP
2、B1PeriphClockCmd(u32 RCC_APB1Periph, FunctionalState NewState) 系统时钟使能函数:NewState取值:ENABLE或DISABLE void RCC_AHBPeriphClockCmd(u32 RCC_AHBPeriph, FunctionalState NewState) RCC_AHBPeriph 描述 RCC_AHBPeriph_DMA DMA时钟 RCC_AHBPeriph_SRAM SRAM时钟 RCC_AHBPeriph_FLITF FLITF时钟 需要使用某一或多个外设时需打开相对应
3、的时钟,多个时钟用“|”分隔 3、RCC相关寄存器 3.1寄存器名称和功能描述 ①一个32位的时钟控制寄存器(RCC_CR) ②一个32位的时钟配置寄存器(RCC_CFGR) ③一个32位的时钟中断寄存器 (RCC_CIR) ④一个32位的APB2外设复位寄存器 (RCC_APB2RSTR) ⑤一个32位的APB1外设复位寄存器 (RCC_APB1RSTR) ⑥一个32位的AHB外设时钟使能寄存器 (RCC_AHBENR) ⑦一个32位的APB2外设时钟使能寄存器(RCC_APB2ENR) ⑧一个32位的APB1外设时钟使能寄存器(RCC_APB1ENR) ⑨
4、一个32位的备份域控制寄存器 (RCC_BDCR) ⑩一个32位的控制/状态寄存器 (RCC_CSR) 3.2结构定义和访问方法 typedef struct { vu32 CR; vu32 CFGR; vu32 CIR; vu32 APB2RSTR; vu32 APB1RSTR; vu32 AHBENR; vu32 APB2ENR; vu32 APB1ENR; vu32 BDCR; vu32 CSR; } RCC_TypeDef; #define RCC_BASE (AHBPERIPH_
5、BASE + 0x1000) #ifdef _RCC #define RCC ((RCC_TypeDef *) RCC_BASE) #endif /*_RCC */ 其中AHBPERIPH_BASE=(u32)0x40020000,那么RCC指向0x40021000 3.3RCC配置方法: void RCC_Configuration(void) { RCC_DeInit();/*RCC复位*/ RCC_HSEConfig(RCC_HSE_ON); /*打开外部高速时钟晶振HSE ,Enable HSE */
6、 HSEStartUpStatus = RCC_WaitForHSEStartUp();/*等待直到晶振准备好*/ if(HSEStartUpStatus == SUCCESS)/*晶振准备好*/ { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* 使能FLASH半周期访问*/ FLASH_SetLatency(FLASH_Latency_2);/* 设置代码延时值*/ /************************************************************
7、 ************************************************************************/ RCC_HCLKConfig(RCC_SYSCLK_Div1);/*置AHB时钟(HCLK), AHB时钟 = 系统时钟/1*/ RCC_PCLK2Config(RCC_HCLK_Div1); /* 高速时钟APB2时钟 = HCLK */ RCC_PCLK1Config(RCC_HCLK_Div2);/* 低速时钟APB1时钟 = HCLK / 2 */ RCC_PLLConfi
8、g(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 设置PLL时钟源及倍频系数,外部时钟8M,倍频数9*/ /***************************************************************************** 原型:void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul) *********************************************************************************/
9、 RCC_PLLCmd(ENABLE);/*PLL使能*/ /*等待 锁相环 输出稳定 */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* 选择系统时钟源 */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /************************************************************************** **************************************************************************/ /* 返回当前系统时钟源0x00:HSI,0x04:HSE,0x08:PLL */ while(RCC_GetSYSCLKSource() != 0x08) { } } /* 以后内容设置外部设备时钟使能*/ ………. }






