STM32 时钟 系统时钟 配置 与 时钟树解析
2014-04-16 16:54
363 查看
复位与时钟控制器(Reset Clock Controller)缩写
转自:http://hi.baidu.com/acmbuguake/item/28561e0342303fc31ef04677
在STM32中,有五个时钟源,分别是为HSI、HSE、LSI、LSE、PLL。
HSI内部高速RC振荡时钟,8MHz;HSE,外部高速时钟,4M__16MHZ;LSI,内部低速RC 时钟,40KHZ;LSE外部低速时钟,32.768KHz;PLL锁相环倍频,由图可知,可以选择HSE/2、HSI/2、HSE,倍频系数可以是2——16,但是不要超过72MHz。
SYSCLK系统时钟,由图可知可以选择HSE、HSI、 PLLCLK的一种,最高72MHz,通过AHB分频器后送给各个模块,AHB分频可以选择1、2、4、8、16、 64、128、 256 、512,AHB分频后送给5大模块使用。
1 HCLK ,也就是AHB总线、内核、内存和DMA使用的HCLK时钟
2 通过8分频后送给Cortex的系统定时器时钟
3 直接送给Cortex的空闲运行时钟FCLK
4 送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路 定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用
5 送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频
注意定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口。
配上一个简单的自己的时钟配置程序,使用库函数。
void RCC_Configuration(void)//时钟配置
{
ErrorStatus HSEStartUpStatus;//判断标志变量
RCC_HSEConfig(RCC_HSE_ON);//使用外部时钟
HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部时钟稳定
if(HSEStartUpStatus== SUCCESS)//如果外部晶振启动成功
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK(AHB时钟)值等于系统时钟
RCC_PCLK1Config(RCC_HCLK_Div2);//PCLK1(APB1时钟)值等于HCLK的一半,最高不超过36MHz
RCC_PCLK2Config(RCC_HCLK_Div1);//PCLK2(APB2时钟)值等于HCLK,最高可是72MHz
FLASH_SetLatency(FLASH_Latency_2);//FLASH时序控制,SYSCLK0~24MHz Latency=0.SYSCLK25~48MHz Latency =1.SYSCLk 48~72MHz Latency=2
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启FLASH预取指功能
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//HSE提供系统时钟,9倍频,也就是72MHz
RCC_PLLCmd(ENABLE);//启动PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL稳定
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//系统时钟来自PLL输出
while(RCC_GetSYSCLKSource()!=0x08);//等待系统时钟稳定
}
}
转自:http://hi.baidu.com/acmbuguake/item/28561e0342303fc31ef04677
在STM32中,有五个时钟源,分别是为HSI、HSE、LSI、LSE、PLL。
HSI内部高速RC振荡时钟,8MHz;HSE,外部高速时钟,4M__16MHZ;LSI,内部低速RC 时钟,40KHZ;LSE外部低速时钟,32.768KHz;PLL锁相环倍频,由图可知,可以选择HSE/2、HSI/2、HSE,倍频系数可以是2——16,但是不要超过72MHz。
SYSCLK系统时钟,由图可知可以选择HSE、HSI、 PLLCLK的一种,最高72MHz,通过AHB分频器后送给各个模块,AHB分频可以选择1、2、4、8、16、 64、128、 256 、512,AHB分频后送给5大模块使用。
1 HCLK ,也就是AHB总线、内核、内存和DMA使用的HCLK时钟
2 通过8分频后送给Cortex的系统定时器时钟
3 直接送给Cortex的空闲运行时钟FCLK
4 送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路 定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用
5 送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频
注意定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口。
配上一个简单的自己的时钟配置程序,使用库函数。
void RCC_Configuration(void)//时钟配置
{
ErrorStatus HSEStartUpStatus;//判断标志变量
RCC_HSEConfig(RCC_HSE_ON);//使用外部时钟
HSEStartUpStatus = RCC_WaitForHSEStartUp();//等待外部时钟稳定
if(HSEStartUpStatus== SUCCESS)//如果外部晶振启动成功
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);//HCLK(AHB时钟)值等于系统时钟
RCC_PCLK1Config(RCC_HCLK_Div2);//PCLK1(APB1时钟)值等于HCLK的一半,最高不超过36MHz
RCC_PCLK2Config(RCC_HCLK_Div1);//PCLK2(APB2时钟)值等于HCLK,最高可是72MHz
FLASH_SetLatency(FLASH_Latency_2);//FLASH时序控制,SYSCLK0~24MHz Latency=0.SYSCLK25~48MHz Latency =1.SYSCLk 48~72MHz Latency=2
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//开启FLASH预取指功能
RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//HSE提供系统时钟,9倍频,也就是72MHz
RCC_PLLCmd(ENABLE);//启动PLL
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//等待PLL稳定
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//系统时钟来自PLL输出
while(RCC_GetSYSCLKSource()!=0x08);//等待系统时钟稳定
}
}
相关文章推荐
- mysql 删除行 删除列 清空表(delete\truncate\ alter drop )
- oracle实用工具:oradebug
- USTC 1280 / 携程决赛1004 最短路径的代价
- USTC 1280 / 携程决赛1004 最短路径的代价
- win7开机启动到欢迎界面时显示uxtheme.dll丢失怎么办
- Java基础:IO 流中的 flush
- 一个fork的面试题
- ASP.NET 缓存:方法和最佳实践
- ORACLE性能优化之SQL语句优化
- Hibernate连接池之ConnectionProvider
- android仿照网易新闻源代码
- COM_考试环境Oracle Linux5.4安装
- dedecms首页搜索 添加仿百度下拉框
- App开机动画
- J2EE的魅力(企业级开发)
- 实现分数类类中的运算符重载
- js中获取时间new Date()
- ios 防止按钮快速点击造成多次响应的避免方法。
- Linux中rpm、src.rpm、源码包软件的安装
- jquery:attr(),siblings(),find(),index(),$.each()