时钟寄存器配置

STM32F103XX时钟

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

  • HSI振荡器时钟:系统时钟;由内部8MHz的RC振荡器产生,启动时间比HSE晶体振荡器短。即使在校准之后它的时钟频率精度仍较差。

  • HSE振荡器时钟:3~25Mz外部振荡器可为系统提供非常精确的主时钟。

  • PLL时钟主PLL以下述时钟源之一为输入,产生倍频的输出:

    • HSI时钟除以2

    • HSE或通过一个可配置分频器的PLL2时钟

这些设备有以下2种二级时钟源:

● 40kHz低速内部RC(LSI RC)振荡器,可以用于驱动独立看门狗,或通过程序选择驱动RTC,用于从停机/待机模式下自动唤醒系统。

● 也可以通过程序选择32.768kHz低速外部晶体(LSE晶体)用来驱动RTC(RTCCLK)。 当不被使用时,任一个时钟源都可被独立地启动或关闭,由此优化系统功耗。

时钟树

在这里插入图片描述

初始时钟:

​ 系统复位后,HSI振荡器被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止。 只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),从一个时钟源到另一个时钟源的切换才会发生。在被选择时钟源没有就绪时,系统时钟的切换不会发生。直至目标时钟源就绪,才发生切换。 在时钟控制寄存器(RCC_CR)里的状态位指示哪个时钟已经准备好了,哪个时钟目前被用作系统时钟。

多工程协作,赋值给变量用位或,防止其他位数据被篡改。

配置72MHZ

  • 1.配置振荡器类型 HSE打开(8MHz时钟源,检查是否稳定)HSEON,HSE预分频;打开PLL,PLL的时钟源设置为HSE(检查是否切换成功),PLL倍频值为9。

  • 配置系统时钟源SYSCLK(设置PLL作为系统时钟源(检查时钟源是否切换成功,作为系统时钟源是否已经稳定))、 AHB、 APB1和 APB2的分频设置。物理连接,C13连接F103C8T6的灯,时钟切换成功,代码执行速度变快,灯闪烁会变快。

    #define RCC_BASE_addr    0X40021000
    #define GPIOB_BASE_addr  0X40010C00 
    #define GPIOC_BASE_addr  0X40011000  
    #define GPIOE_BASE_addr  0X40011800  
    #define FLASH_BASE_addr  0X40022000
    
    #define flash  (*(unsigned int *)(FLASH_BASE_addr))
    
    typedef struct{
    
        volatile unsigned int CR;
        volatile unsigned int CFGR;
        volatile unsigned int CIR;
        volatile unsigned int APB2RSTR;
        volatile unsigned int APB1RSTR;
        volatile unsigned int AHBENR;
        volatile unsigned int APB2ENR;
        volatile unsigned int APB1ENR;
        volatile unsigned int BDCR;
        volatile unsigned int CSR;
    }RCC; 
     
    RCC *RCC72=(RCC*)(RCC_BASE_addr);
    //        
    //        RCC72->CR|=1<<16;//打开HSE时钟
    //        int a=0;
    //        
    //        do//检测HSE工作状态
    //        {
    //            a=0;
    //            a=((RCC72->CR>>17)&1);            
    //        }while(!a);
    //        GPIO_B->ODR|=(1<<5); 
    //        //delayus(10);
    //      
    //        RCC72->CFGR|=1<<1;//PLL输出作为系统时钟;
              do//检测切换成功
            {
                //a=0;
                a=((RCC72->CFGR>>2)&0x2);
                
                if(a==0x2)
                {
                    break;
                }
            }while(1);
    //        
    //        delayus(10);
    //        
    //        RCC72->CFGR&=~(1<<7);   //AHB预分频 (AHB Prescaler)置0SYSCLK不分频
    //        RCC72->CFGR|=(4<<8);    //低速APB预分频(APB1)HCLK不分频
    //        RCC72->CFGR&=~(1<<13);  //高速APB预分频(APB2) (APB high-speed prescaler (APB2))
    //        RCC72->CFGR|=(1<<16);   //置1HSE时钟作为PLL输入时钟。
    //        RCC72->CFGR&=~(1<<17);  //置零HSE不分频
    //        RCC72->CFGR|=(7<<18);   //PLL倍频系数PLL 9倍频输出
    //        RCC72->CFGR|=(7<<24);   //微控制器时钟输出 (Microcontroller clock output)PLL时钟2分频后输出。
    //        RCC72->CR|=1<<24;       //PLL使能
    //        flash=0x2;
    
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值