HSI基本知识 

  HSI是8MRC震荡电路,精度1%。

  PLL的设置必须在其被激活前完成,输出必须被设置温48M或者72M

  LSE:通过在备份域控制寄存器(RCC_BDCR)里的LSEON位启动和关闭。

  如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。

  否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍

  HSI + PLL  最高为64M(HSI / 2   *  16)。

寄存器的作用

  时钟控制寄存器RCC_CR:HSI/HSE/PLL使能和就绪,HSI时钟校准。

  时钟配置寄存器(RCC_CFGR):时钟切换和切换状态标志,各种分频器

  时钟中断寄存器 (RCC_CIR):各种时钟中断和时钟中断标志。

  APB2 外设复位寄存器 (RCC_APB2RSTR);APB1 外设复位寄存器 (RCC_APB1RSTR):各个外设接口的复位

  AHB外设时钟使能寄存器 (RCC_AHBENR);APB2 外设时钟使能寄存器(RCC_APB2ENR);APB1 外设时钟使能寄存器(RCC_APB1ENR):各个外设的使能。


HSI的配置,我这里用的是原库,直接将  system_stm32f10x.c 中的  void SystemInit (void) 函数改成下边的就可以了

void SystemInit (void){

 RCC_DeInit();//将外设 RCC寄存器重设为缺省值  
    RCC_HSICmd(ENABLE);//使能HSI    
    while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);//等待HSI使能成功  
    
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);      //使能或者失能预取指缓存(参数里是使能)    -----加上这两句才能到64M
    FLASH_SetLatency(FLASH_Latency_2); //设置代码延时值(参数里的是指2延时周期)
     
    RCC_HCLKConfig(RCC_SYSCLK_Div1);   //设置AHB时钟 HCLK = SYSCLK/1      
    RCC_PCLK1Config(RCC_HCLK_Div4);      //设置低速速AHB时钟        -----这里频率是48/4 = 12M     定时器2~7频率是24M
    RCC_PCLK2Config(RCC_HCLK_Div1);      //设置高速AHB时钟        -----这里频率是48/1 = 48M
      
    //设置 PLL 时钟源及倍频系数  
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);//使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE   
    RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能  
    //等待指定的 RCC 标志位设置成功 等待PLL初始化成功  
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  
 
    //设置系统时钟(SYSCLK) 设置PLL为系统时钟源  
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//选择想要的系统时钟   
    //等待PLL成功用作于系统时钟的时钟源  
    //  0x00:HSI 作为系统时钟   
    //  0x04:HSE作为系统时钟   
    //  0x08:PLL作为系统时钟    
    while(RCC_GetSYSCLKSource() != 0x08);//需与被选择的系统时钟对应起来,RCC_SYSCLKSource_PLL

} 


 配置之后,不确定是否配置成功,可以只用库函数中的时钟频率结构体,来查看系统各个时钟频率,在主函数中使用

int main( void ){

  RCC_ClocksTypeDef  RCC_Clocks; //时钟频率结构体

RCC_GetClocksFreq(&RCC_Clocks); //获取各个时钟频率
    printf("SYSCLK_Frequency  is %d \r\n",RCC_Clocks.SYSCLK_Frequency);    //SYSCLK_Frequency  is 48000000
    printf("HCLK_Frequency is %d \r\n",RCC_Clocks.HCLK_Frequency);        //HCLK_Frequency is 48000000
    printf("PCLK1_Frequency   is %d \r\n",RCC_Clocks.PCLK1_Frequency);    //PCLK1_Frequency   is 12000000
    printf("PCLK2_Frequency is %d \r\n",RCC_Clocks.PCLK2_Frequency);    //PCLK2_Frequency is 48000000
    printf("ADCCLK_Frequency is %d \r\n",RCC_Clocks.ADCCLK_Frequency);    //ADCCLK_Frequency is 24000000

}

stm32f103的HSI设置的更多相关文章

  1. 第15章 RCC—使用HSE/HSI配置时钟

    第15章     RCC—使用HSE/HSI配置时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  2. 第15章 RCC—使用HSE/HSI配置时钟—零死角玩转STM32-F429系列

    第15章     RCC—使用HSE/HSI配置时钟 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku. ...

  3. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

  4. STM时钟

    一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...

  5. STM32—时钟树(结合系统时钟函数理解)

    时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处.心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来 ...

  6. stm32F429启动时钟配置

    STM32f429在启动时会在startup_stm32f429_439xx.s中调用static void SetSysClock(void)函数.默认使用的是25M晶振,把系统时钟设置为180M. ...

  7. STM32 晶振 系统时钟8MHZ和72Mhz的原因

    首先问题描述: 1.自己画的板子和淘宝买的最小系统板 系统时钟不一致,自己画的是8Mhz,HSE失败:最小系统板72Mhz 2.最小系统板在程序1运行仿真的时候,查看peripherals->P ...

  8. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...

  9. 关于STM32F103+ESP8266+阿里云过程之环境搭建和阿里云数据格式设置及注意点(一)

    计划实现功能:将STM32F103采集到的温湿度,PM2.5等数值,通过UART与ESP8266通讯,使得ESP8266对外仅充当串口功能的黑盒.ESP8266通过MTQQ发布订阅数据,设备上传.接收 ...

随机推荐

  1. 文献阅读 - Genome-wide consequences of deleting any single gene

    现在在做单基因敲除后的转录组数据分析,一个显而易见却又百思不得其解的问题出现了: 为什么敲掉一个基因会导致其他那么多基因的表达发生了变化,甚至是其他很多调控基因(转录因子)? 我敲掉的只是一个普通基因 ...

  2. [java.lang.NoSuchMethodError: org.hibernate.Session.createQuery(Ljava/lang/String;)Lorg/hibernate/query/Query;]

    jar包冲突 maven导入的jar包和自己将lib目录的jar同时加入了项目里面了

  3. JVM 类加载器ClassLoader源码学习笔记

    类加载 在Java代码中,类型的加载.连接与初始化过程都是在程序运行期间完成的. 类型可以是Class,Interface, 枚举等. Java虚拟机与程序的生命周期 在如下几种情况下,Java虚拟机 ...

  4. Linux下用jar命令替换war包中的文件【转】

    问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...

  5. 【转载】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)

    原文链接:https://www.cnblogs.com/lixinjie/p/10811219.html 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使 ...

  6. 【JDBC】使用properties连Oracle数据库,使用DatabaseMetaData获取字段的注释

    简单的打铁代码如下: package com.hy.propertyConn; import java.sql.Connection; import java.sql.DatabaseMetaData ...

  7. idea创建类,接口,枚举等如何设置注释

    进入设置: File -> Settings   依次选择: Editor -> File and Code Templates -> Files -> Class (根据需要 ...

  8. 【转载】 我的Machine Learning学习之路

    原文地址: https://www.cnblogs.com/steven-yang/p/5857964.html ------------------------------------------- ...

  9. 004-行为型-01-策略模式(Strategy)

    一.概述 定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户.需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口,设计一个抽象类(可有可 ...

  10. opencv4 mask_rcnn模型调(c++)

    昨天有人问我关于调用mask_rcnn模型的问题,忽然想到最近三个月都没用opencv调用训练好的mask_rcnn模型了,今晚做个尝试,所以重新编译了 opencv4,跑个案例试试 #include ...