《学习stm32笔记2如何配置时钟(精编版)》由会员分享,可在线阅读,更多相关《学习stm32笔记2如何配置时钟(精编版)(8页珍藏版)》请在金锄头文库上搜索。
1、学习 STM32笔记 2如何配置时钟*学习STM32笔记2如何配置时钟字号:大中原创笔记2009-09-20 19:56阅读116评论 0小/*该程序目的是用于测试核心板回来后是否能正常工作。包括两个按键、两个LED 现实。按键为PC4、PC5, LED 为 PA0PA1 。LED 为低电平时点亮。按键为低电平时触发。*/ i ncludestm32f10x_lib.hvoidRCC_Configuration(void);/设置系统主时钟 voidGPIO_Configuration(void);/设置邋邋IO 参数voidNVIC_Configuration(void);/设置中断表地址
2、voiddelay(void);/延时函数intmain(void)#ifdefDEBUG debug();#endifRCC_Configuration(); NVIC_Configuration();GPIO_Configuration(); while(1)delay();/ 设置指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_0);/设置指定的数据端口位delay(); GPIO_ResetBits(GPIOA,GPIO_Pin_0);/ 清除指定的数据端口位GPIO_SetBits(GPIOA,GPIO_Pin_1);delay();GPIO_ResetBit
3、s(GPIOA,GPIO_Pin_1); delay();/*使用setbits与 resetbits是比较简单,其实还是可以使用其它函数。例如可以使用GPIO_WriteBitGPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);对于好像流水灯呀这些一个整段IO ,可以使用GPIO_Write(GPIOA,0x1101);*/*系统时钟函数,要设置系统使用哪个晶振工作。*/ voidRCC_Configuration(void)RCC_DeInit();/将外设RCC寄存器重设为缺省
4、值RCC_HSEConfig(RCC_HSE_ON);/* 设置外部高速晶振(HSE)这里是设置高速晶振打开,其实一共有三种设置RCC_HSE_OFFHSE晶振OFF RCC_HSE_ONHSE 晶振ONRCC_HSE_BypassHSE 晶振使用外部时钟源。*/HSEStartUpStatus=RCC_WaitForHSEStartUp();/ 等待HSE起振if(HSEStartUpStatus=SUCCESS)/等主晶振起振成功起振后执行操作FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* 预取指缓存使能FLASH_Prefe
5、tchBuffer用来选择FLASH预取指缓存的模式。如果需关闭则使用FLASH_PrefetchBuffer_Disable*/FLASH_SetLatency(FLASH_Latency_2);/* 设置代码延时值FLASH_Latency用来设置FLASH 存储器延时时钟周期数。FLASH_Latency_22 为延时周期可以使用以下参数FLASH_Latency_00 延时周期FLASH_Latency_11 延时周期FLASH_Latency_22 延时周期*/ RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置AHB时钟( HCLK) RCC_SYSCLK_D
6、iv1AHB时钟=系统时钟RCC_SYSCLK_Div2AHB时钟=系统时钟/2 RCC_SYSCLK_Div4AHB时钟=系统时钟/4 RCC_SYSCLK_Div8AHB时钟=系统时钟/8 RCC_SYSCLK_Div16AHB时钟=系统时钟/16 RCC_SYSCLK_Div64AHB时钟=系统时钟/64 RCC_SYSCLK_Div128AHB时钟=系统时钟/128 RCC_SYSCLK_Div256AHB时钟=系统时钟/256 RCC_SYSCLK_Div512AHB时钟=系统时钟/512*/RCC_PCLK2Config(RCC_HCLK_Div2);/* 设置高速AHB时钟(PC
7、LK2) RCC_HCLK_Div2APB1时钟=HCLK/2RCC_HCLK_Div1APB2 时钟=HCLKRCC_HCLK_Div2APB2 时钟=HCLK/2RCC_HCLK_Div4APB2 时钟=HCLK/4RCC_HCLK_Div8APB2 时钟=HCLK/8 RCC_HCLK_Div16APB2 时钟=HCLK/16*/RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置低速AHB时 钟 ( PCLK1) RCC_HCLK_Div2APB1时钟=HCLK/2RCC_HCLK_Div1APB1 时钟=HCLKRCC_HCLK_Div2APB1 时钟=HCLK/
8、2RCC_HCLK_Div4APB1 时钟=HCLK/4RCC_HCLK_Div8APB1 时钟=HCLK/8 RCC_HCLK_Div16APB1 时钟=HCLK/16 用户可通过多个预分频器配置AHB、高速APB(APB2) 和低速APB(APB1) 域的频率。AHB和 APB2 域的最大频率是72MHZ?PB1 域的最大允许频率是36MHZ。SDIO 接口的时钟频率固定为HCLK/2 。RCC通过AHB时钟8 分频后供给Cortex系统定时器的 (SysTick)外部时钟。通过对SysTick控制与状态寄存器的设置,可选择上述时钟或CortexAHB 时钟作为SysTick时钟。 ADC
9、时钟由高速APB2 时钟经2 、 4、6 或 8 分频后获得。*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);/*PLLCLK=8MHz*9=72MHz设置PLL时钟源及倍频系数RCC_PLLSource描述RCC_PLLSource_HSI_Div2PLL 的输入时钟=HSI 时钟频率除以2 RCC_PLLSource_HSE_Div1PLL 的输入时钟=HSE时钟频率RCC_PLLSource_HSE_Div2PLL 的输入时钟RCC_PLLMul描述=HSE时钟频率除以2RCC_PLLMul_2PLL 输入时钟x2RCC_PLLM
10、ul_3PLL 输入时钟x3RCC_PLLMul_4PLL 输入时钟x4RCC_PLLMul_5PLL 输入时钟x5RCC_PLLMul_6PLL 输入时钟x6RCC_PLLMul_7PLL 输入时钟x7RCC_PLLMul_8PLL 输入时钟x8RCC_PLLMul_9PLL 输入时钟x9RCC_PLLMul_10PLL 输入时钟x10RCC_PLLMul_11PLL 输入时钟x11RCC_PLLMul_12PLL 输入时钟x12RCC_PLLMul_13PLL 输入时钟x13RCC_PLLMul_14PLL 输入时钟x14RCC_PLLMul_15PLL 输入时钟x15RCC_PLLMul
11、_16PLL 输入时钟x16警告:必须正确设置软件,使 PLL 输出时钟频率不超过72MHz当 HSI 被用于作为PLL 时钟的输入时,系统时钟的最大频率不得超过64MHz。*/ RCC_PLLCmd(ENABLE);/ 使能或者失能PLL, 关闭使用DISABLE while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)=RESET)/ 等待指定的RCC标志位设置成功等待PLL 初始化成功/*RCC_FLAG值RCC_FLAG描述RCC_FLAG_HSIRDYHSI 晶振就绪RCC_FLAG_HSERDYHSE晶振就绪RCC_FLAG_PLLRDYPLL 就绪RCC_
12、FLAG_LSERDYLSI 晶振就绪RCC_FLAG_LSIRDYLSE 晶振就绪RCC_FLAG_PINRST管脚复位RCC_FLAG_PORRSTPOR/PDR复位RCC_FLAG_SFTRST软件复位RCC_FLAG_IWDGRSTIWDG复位RCC_FLAG_WWDGRSTWWDG复位*/RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 设置系统时钟(SYSCLK)设置 PLL 为系统时钟? RCC_SYSCLKSource描述RCC_SYSCLKSource_HSI选择 HSI 作为系统时钟RCC_SYSCLKSource_HSE选择HSE 作为系统时钟RCC_SYSCLKSource_PLLCLK选择PLL 作为系统时钟?*/?while(RCC_GetSYSCLKSource()!=0x08)/* 等待 PLL 成功用作于系统时钟的时钟源返回用作系统时钟的时钟源0x00 : HSI 作为系统时钟0x04 : HSE 作为系统时钟0x08 : PLL 作为系统时钟*/else/如果晶振没有正常起振则输出错误。