当前位置:文档之家› 学习STM32笔记2如何配置时钟

学习STM32笔记2如何配置时钟

学习STM32笔记2 如何配置时钟*学习STM32笔记2 如何配置时钟原创笔记2009-09-20 19:56 阅读116 评论0字号:大中小/*************************************************************该程序目的是用于测试核心板回来后是否能正常工作。

包括两个按键、两个LED现实。

按键为PC4、PC5,LED为PA0\PA1。

LED为低电平时点亮。

按键为低电平时触发。

************************************************************/#i nclude "stm32f10x_lib.h"void RCC_Configuration(void);//设置系统主时钟void GPIO_Configuration(void);//设置邋邋IO参数void NVIC_Configuration(void);//设置中断表地址void delay(void);//延时函数int main(void){#ifdef DEBUGdebug();#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_ResetBits(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);*********************************************/}}/******************************************************************************* 系统时钟函数,要设置系统使用哪个晶振工作。

*******************************************************************************/ void RCC_Configuration(void){RCC_DeInit();//将外设RCC寄存器重设为缺省值RCC_HSEConfig(RCC_HSE_ON);/*设置外部高速晶振(HSE)这里是设置高速晶振打开,其实一共有三种设置RCC_HSE_OFF HSE晶振OFFRCC_HSE_ON HSE晶振ONRCC_HSE_Bypass HSE晶振使用外部时钟源。

*/HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待HSE 起振if(HSEStartUpStatus == SUCCESS)//等主晶振起振成功起振后执行操作{FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/*预取指缓存使能FLASH_PrefetchBuffer用来选择FLASH预取指缓存的模式。

如果需关闭则使用FLASH_PrefetchBuffer_Disable*/ FLASH_SetLatency(FLASH_Latency_2);/*设置代码延时值FLASH_Latency用来设置FLASH存储器延时时钟周期数。

FLASH_Latency_2 2为延时周期可以使用以下参数FLASH_Latency_0 0延时周期FLASH_Latency_1 1延时周期FLASH_Latency_2 2延时周期*/RCC_HCLKConfig(RCC_SYSCLK_Div1);/*设置AHB时钟(HCLK)RCC_SYSCLK_Div1AHB时钟= 系统时钟RCC_SYSCLK_Div2AHB时钟= 系统时钟/ 2RCC_SYSCLK_Div4AHB时钟= 系统时钟/ 4RCC_SYSCLK_Div8AHB时钟= 系统时钟/ 8RCC_SYSCLK_Div16AHB时钟= 系统时钟/ 16RCC_SYSCLK_Div64AHB时钟= 系统时钟/ 64RCC_SYSCLK_Div128AHB时钟= 系统时钟/ 128RCC_SYSCLK_Div256AHB时钟= 系统时钟/ 256RCC_SYSCLK_Div512AHB时钟= 系统时钟/ 512*/RCC_PCLK2Config(RCC_HCLK_Div2);/*设置高速AHB 时钟(PCLK2)RCC_HCLK_Div2 APB1 时钟= HCLK / 2 RCC_HCLK_Div1APB2时钟= HCLKRCC_HCLK_Div2APB2时钟= HCLK / 2RCC_HCLK_Div4APB2时钟= HCLK / 4RCC_HCLK_Div8APB2时钟= HCLK / 8RCC_HCLK_Div16APB2时钟= HCLK / 16*/ RCC_PCLK1Config(RCC_HCLK_Div2);/*设置低速AHB 时钟(PCLK1)RCC_HCLK_Div2 APB1 时钟= HCLK / 2 RCC_HCLK_Div1APB1时钟= HCLKRCC_HCLK_Div2APB1时钟= HCLK / 2RCC_HCLK_Div4APB1时钟= HCLK / 4RCC_HCLK_Div8APB1时钟= HCLK / 8RCC_HCLK_Div16APB1时钟= HCLK / 16用户可通过多个预分频器配置AHB、高速APB(APB2)和低速APB(APB1)域的频率。

AHB和APB2域的最大频率是72MHZ?PB1域的最大允许频率是36MHZ。

SDIO接口的时钟频率固定为HCLK/2。

RCC通过AHB时钟8分频后供给Cortex系统定时器的(SysTick)外部时钟。

通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex AHB时钟作为SysTick时钟。

ADC时钟由高速APB2时钟经2、4、6或8分频后获得。

*/RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* PLLCLK = 8MHz * 9 = 72 MHz设置PLL 时钟源及倍频系数RCC_PLLSource 描述RCC_PLLSource_HSI_Div2PLL的输入时钟= HSI时钟频率除以2RCC_PLLSource_HSE_Div1PLL的输入时钟= HSE 时钟频率RCC_PLLSource_HSE_Div2PLL的输入时钟= HSE 时钟频率除以2RCC_PLLMul描述RCC_PLLMul_2 PLL输入时钟x 2RCC_PLLMul_3 PLL输入时钟x 3RCC_PLLMul_4 PLL输入时钟x 4RCC_PLLMul_5 PLL输入时钟x 5RCC_PLLMul_6 PLL输入时钟x 6RCC_PLLMul_7 PLL输入时钟x 7RCC_PLLMul_8 PLL输入时钟x 8RCC_PLLMul_9 PLL输入时钟x 9RCC_PLLMul_10 PLL输入时钟x 10RCC_PLLMul_11 PLL输入时钟x 11RCC_PLLMul_12 PLL输入时钟x 12RCC_PLLMul_13 PLL输入时钟x 13RCC_PLLMul_14 PLL输入时钟x 14RCC_PLLMul_15 PLL输入时钟x 15RCC_PLLMul_16 PLL输入时钟x 16警告:必须正确设置软件,使PLL输出时钟频率不超过72 MHz当HSI被用于作为PLL时钟的输入时,系统时钟的最大频率不得超过64MHz。

*/RCC_PLLCmd(ENABLE);//使能或者失能PLL,关闭使用DISABLEwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}//等待指定的RCC 标志位设置成功等待PLL初始化成功/*RCC_FLAG值RCC_FLAG 描述RCC_FLAG_HSIRDY HSI晶振就绪RCC_FLAG_HSERDY HSE晶振就绪RCC_FLAG_PLLRDY PLL就绪RCC_FLAG_LSERDY LSI晶振就绪RCC_FLAG_LSIRDY LSE晶振就绪RCC_FLAG_PINRST 管脚复位RCC_FLAG_PORRST POR/PDR复位RCC_FLAG_SFTRST 软件复位RCC_FLAG_IWDGRST IWDG复位RCC_FLAG_WWDGRST WWDG复位*/ 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 {}//如果晶振没有正常起振则输出错误。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能或者失能APB2 外设时钟/*RCC_AHB2Periph 描述RCC_APB2Periph_AFIO 功能复用IO时钟RCC_APB2Periph_GPIOA GPIOA时钟RCC_APB2Periph_GPIOB GPIOB时钟RCC_APB2Periph_GPIOC GPIOC时钟RCC_APB2Periph_GPIOD GPIOD时钟RCC_APB2Periph_GPIOE GPIOE时钟RCC_APB2Periph_ADC1 ADC1时钟RCC_APB2Periph_ADC2 ADC2时钟RCC_APB2Periph_TIM1 TIM1时钟RCC_APB2Periph_SPI1 SPI1时钟RCC_APB2Periph_USART1 USART1时钟RCC_APB2Periph_ALL 全部APB2外设时钟*/}/*对于时钟设置的总结一共有4种时钟1、HSE振荡器时钟(外部8M时钟)2、HSI振荡器时钟(内部8M时钟)3、LSE时钟(外部32.768kHz时钟)4、LSI时钟(内部40kHz时钟)HSE振荡器时钟就是外部主要时钟就是8 M晶振。

相关主题