资源描述
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_APB1PeriphClockCmd(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、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)
⑨一个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_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 */
HSEStartUpStatus = RCC_WaitForHSEStartUp();/*等待直到晶振准备好*/
if(HSEStartUpStatus == SUCCESS)/*晶振准备好*/
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* 使能FLASH半周期访问*/
FLASH_SetLatency(FLASH_Latency_2);/* 设置代码延时值*/
/*********************************************************************
************************************************************************/
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_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 设置PLL时钟源及倍频系数,外部时钟8M,倍频数9*/
/*****************************************************************************
原型:void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul)
*********************************************************************************/
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)
{
}
}
/* 以后内容设置外部设备时钟使能*/
……….
}
展开阅读全文