精华内容
下载资源
问答
  • 时钟系统

    千次阅读 2016-07-19 22:31:41
    时钟系统需要理解其概念,然后会控制时钟系统即可。 时钟概念 时钟可以理解为一个根据同步节拍而进行同步工作的系统,Soc内部有CPU和一系列的内部和外部外设,这些都要同步的进行工作,需要有一个共同时钟系统...

    时钟系统需要理解其概念,然后会控制时钟系统即可。


    时钟概念

    时钟可以理解为一个根据同步节拍而进行同步工作的系统,Soc内部有CPU和一系列的内部和外部外设,这些都要同步的进行工作,需要有一个共同时钟系统来同步指挥,就Soc的时钟,时钟可以产生同步信号,来指挥CPU和外设进行同步工作。
    时钟可以从外部输入获得,例如通过引脚获得时钟频率,也可以通过外部晶振+内部时钟发生器,还可以添加内部PLL来产生高频时钟,添加内部分频器可以得到各种频率的时钟,S5PV210就是这种。
    一般情况下Soc的时钟频率是可以编程控制的,频率的高低对系统性能有很大影响,每个外设的工作都需要时钟,程序员可以为每个外设指定时钟来源和分频系数,从而配置该外设的时钟。
    Soc中设备工作时,时钟频率和发热,稳定性和功耗成正比,这些外设不用的时候最好关闭,以减小损耗和发热,而外设的开关就是控制其时钟的开断。

    S5PV210的时钟系统

    时钟域

    210内部的时钟分为三大块,MSYS域,DSYS域和PSYS域,由桥梁连接。

    MSYS

    主要包括CPU,MFD,3D,DMC,iRAM&iROM等时钟系统,工作在AXI200MHZ

    • ARMCLOCK,该时钟是给CPU内核工作的时钟,就是我们所说的主频
    • HCLOCK_MSYS,MSYS域的高频时钟,DMC使用
    • PCLOCK_MSYS,MSYS域的低频时钟
    • HCLOCK_IMEM,iROM和iRAM等iMemory使用的时钟

    DSYS

    主要包括FIMC,HDMI。JPEG等显示相关的外设时钟系统。

    • HCLOCK_DSYS,DSYS域的高频时钟
    • PCLOCK_DSYS,DSYS域的低频时钟

    PSYS

    主要包括各种内部外设,UART,LOWPOWER,MMC,I2C等

    • HCLOCK_PSYS,PSYS域的高频时钟
    • PCLOCK_PSYS,PSYS域的低频时钟
    • HCLOCK_ONENAND,

    210各个外设都是接在内部的AMBA总线上的,该总线由一条高频分支(AHB)和低频分支(APB),分别对应各个域的HCLOCK和PCLOCK,Soc内部每个外设是挂在总线上的,所以外设的时钟来自于所挂载的总线.

    时钟来源

    210外部有4个晶振接口,在USB处的晶振是最主要的时钟来源,结合内部的时钟发生器产生原始时钟,再经过PLL电路产生高频时钟,经过分频到达各个外设模块上。各模块内部还可以有分频器进行再次分频使用,比如串口。

    PLL

    • APLL:范围30MHG-1GHZ,MSYS域通常使用该PLL,
    • MPLL:范围50MHG-2GHZ,DSYS,PSYS和其他使用该PLL
    • EPLL:范围10MHG-600MHG,DSYS,PSYS和其他使用该PLL
    • VPLL:范围10MHG-600MHG,Video时钟使用该PLL

    各个时钟的默认值

    在iROM内部的BL0初始化PLL的时候,就是在设置各个时钟的默认值,所以210在上电时,是获得了24MHG的时钟,此时运行非常慢,BL0执行之后,由于初始化了PLL时钟系统,各个设备有了默认的时钟频率(由三星推荐的默认值),此时工作才会正常起来,210中典型默认值为:

    • freq(ARMCLK) = 1000 MHz
    • freq(HCLK_MSYS) = 200 MHz
    • freq(HCLK_IMEM) = 100 MHz
    • freq(PCLK_MSYS) = 100 MHz
    • freq(HCLK_DSYS) = 166 MHz
    • freq(PCLK_DSYS) = 83 MHz
    • freq(HCLK_PSYS) = 133 MHz
    • freq(PCLK_PSYS) = 66 MHz
    • freq(SCLK_ONENAND) = 133 MHz, 166 MHz

    时钟控制器

    时钟控制器控制图:
    时钟控制器控制图
    时钟详细分频图:
    时钟详细分频图
    MUX是时钟源控制器,由寄存器中的bit位来控制使用哪个来源的时钟,DIV是分频器,也是由寄存器中的bit位来控制,根据其分频系数范围,来将频率分为特定的值。

    控制器寄存器

    • xPLL_LOCK:控制PLL的锁定周期,
    • xPLL_CONn:控制PLL的开关,锁定状态获取以及设置PLL的倍频参数,
    • CLK_SRCn:设置时钟来源,对应图中的MUX开关,
    • CLK_MASKn:设置MUX开关对应的源的开关,
    • CLK_DIVn:分频参数设置
    • CLK_GATE_x:对时钟进行开关控制,控制最终输出时钟,
    • CLK_MUX/DIV_STATn:状态位,用于查看MUX和DIV的状态

    代码初始化时钟系统

    汇编实现

    // 时钟控制器基地址
    #define ELFIN_CLOCK_POWER_BASE      0xE0100000  
    
    // 时钟相关的寄存器相对时钟控制器基地址的偏移值
    #define APLL_LOCK_OFFSET        0x00        
    #define MPLL_LOCK_OFFSET        0x08
    
    #define APLL_CON0_OFFSET        0x100
    #define APLL_CON1_OFFSET        0x104
    #define MPLL_CON_OFFSET         0x108
    
    #define CLK_SRC0_OFFSET         0x200
    #define CLK_SRC1_OFFSET         0x204
    #define CLK_SRC2_OFFSET         0x208
    #define CLK_SRC3_OFFSET         0x20c
    #define CLK_SRC4_OFFSET         0x210
    #define CLK_SRC5_OFFSET         0x214
    #define CLK_SRC6_OFFSET         0x218
    #define CLK_SRC_MASK0_OFFSET    0x280
    #define CLK_SRC_MASK1_OFFSET    0x284
    
    #define CLK_DIV0_OFFSET         0x300
    #define CLK_DIV1_OFFSET         0x304
    #define CLK_DIV2_OFFSET         0x308
    #define CLK_DIV3_OFFSET         0x30c
    #define CLK_DIV4_OFFSET         0x310
    #define CLK_DIV5_OFFSET         0x314
    #define CLK_DIV6_OFFSET         0x318
    #define CLK_DIV7_OFFSET         0x31c
    
    #define CLK_DIV0_MASK           0x7fffffff
    
    // 这些M、P、S的配置值都是查数据手册中典型时钟配置值的推荐配置得来的。
    // 这些配置值是三星推荐的,因此工作最稳定。如果是自己随便瞎拼凑出来的那就要
    // 经过严格测试,才能保证一定对。
    #define APLL_MDIV               0x7d        // 125
    #define APLL_PDIV               0x3
    #define APLL_SDIV               0x1
    
    #define MPLL_MDIV               0x29b       // 667
    #define MPLL_PDIV               0xc
    #define MPLL_SDIV               0x1
    
    #define set_pll(mdiv, pdiv, sdiv)   (1<<31 | mdiv<<16 | pdiv<<8 | sdiv)
    #define APLL_VAL            set_pll(APLL_MDIV,APLL_PDIV,APLL_SDIV)
    #define MPLL_VAL            set_pll(MPLL_MDIV,MPLL_PDIV,MPLL_SDIV)
    
    
    .global clock_init
    clock_init:
        ldr r0, =ELFIN_CLOCK_POWER_BASE
    
        // 1 设置各种时钟开关,暂时不使用PLL
        ldr r1, =0x0
        // 芯片手册P378 寄存器CLK_SRC:Select clock source 0 (Main)
        str r1, [r0, #CLK_SRC0_OFFSET]              
    
        // 2 设置锁定时间,使用默认值即可
        // 设置PLL后,时钟从Fin提升到目标频率时,需要一定的时间,即锁定时间
        ldr r1, =0x0000FFFF                 
        str r1, [r0, #APLL_LOCK_OFFSET]             
        str r1, [r0, #MPLL_LOCK_OFFSET]                 
    
        // 3 设置分频
        // 清bit[0~31]
        ldr r1, [r0, #CLK_DIV0_OFFSET]                  
        ldr r2, =CLK_DIV0_MASK                  
        bic r1, r1, r2
        ldr r2, =0x14131440                     
        orr r1, r1, r2
        str r1, [r0, #CLK_DIV0_OFFSET]
    
        // 4 设置PLL
        // FOUT = MDIV*FIN/(PDIV*2^(SDIV-1))=0x7d*24/(0x3*2^(1-1))=1000 MHz
        ldr r1, =APLL_VAL                       
        str r1, [r0, #APLL_CON0_OFFSET]
        // FOUT = MDIV*FIN/(PDIV*2^SDIV)=0x29b*24/(0xc*2^1)= 667 MHz
        ldr r1, =MPLL_VAL                       
        str r1, [r0, #MPLL_CON_OFFSET]
    
        // 5 设置各种时钟开关,使用PLL
        ldr r1, [r0, #CLK_SRC0_OFFSET]
        ldr r2, =0x10001111
        orr r1, r1, r2
        str r1, [r0, #CLK_SRC0_OFFSET]
    
        mov pc, lr
    • 设置时钟开关,不使用PLL,这里先使用原始的24MHZ的原始时钟,来设置各个时钟的开关,这里设置了CLK_SRC0寄存器的bit0和bit4来达到作用
    • 设置锁定时间,设置为推荐的默认时间,设置CLK_LOCK寄存器,设置为0xFFFF就可以达到效果
    • 设置分频,分频系数决定由PLL出来的最高时钟由分频器来分频,设置CLK_DIV寄存器,值为0x14131440,
    • 设置PLL,设置PLL的倍频系数,决定由24MHZ可以得到多大的输出频率,默认主频是1GHZ,主要寄存器是xPLLCON,
    • 打开PLL,开启设定好的PLL,得到想要的频率,设置CLK_SRC,值设置为0x10001111就可以打开了
    展开全文
  • STM32时钟系统

    千次阅读 多人点赞 2021-04-16 09:38:57
    本章就将从时钟树开始分析STM32F103的时钟系统,其中包括内部高速/低速时钟源、外部高速/低速时钟源、PLL(锁相环)和系统滴答定时器。以高屋建瓴的形式让用户对STM32F103的时钟系统有一个整体的认识,并在后续的...

    9.1 关于时钟

    时钟对于一款芯片非常重要,其作用相当于人的心脏,人只有在心率正常稳定的情况下才能健康生活,同样的,芯片只有工作在合法正常的时钟频率下才能保证程序得到正常的运行。

    本章就将从时钟树开始分析STM32F103的时钟系统,其中包括内部高速/低速时钟源、外部高速/低速时钟源、PLL(锁相环)和系统滴答定时器。以高屋建瓴的形式让用户对STM32F103的时钟系统有一个整体的认识,并在后续的时钟配置实验中让用户进一步的了解HAL库下的时钟配置流程。

    首先读者要学会如何读STM32F103系列的时钟树,如图 9.1.1 所示,左侧的①HSI(内部高速时钟)、 ②HSE(外部高速时钟)、③LSE(外部低速时钟)、④LSI(内部低速时钟)为时钟源,右侧的各种片上外设。图中矩形框内用“/”加数字表示分频器, ,数字表示几分频;矩形框内用“X”加数字表示的为锁相环, ,数字表示几倍频;倒梯形表示选择器,长边表示多个输入,短边表示选择其中一个输出 。

    ⑥系统时钟SYSCLK最高为72MHz,从图中左侧的选择器SW可以看到来源有三个,分别是:①内部高速时钟HSI(绿色)、⑤锁相环时钟PLLCLK(紫色)和②外部高速时钟HSE(黄色),而锁相环时钟PLLCLK由内部高速时钟HSI和外部高速时钟HSE,经过分频和PLL锁相环倍频而来。

    内部高速时钟HSI可直接经过选择器SW给系统时钟SYSCLK,此时系统时钟SYSCLK为8MHz;内部高速时钟HSI先2分频,再经过选择器PLLSRC进入锁相环PLLMUL,最大倍频为16倍,得到64MHz的锁相环时钟PLLCLK给系统时钟SYSCLK;当外部高速时钟HSE(假设外接晶振为8MHz时)直接给选择器SW,则系统时钟SYSCLK为8MHz;当外部高速时钟HSE(假设外接晶振为8MHz时)直接经过选择器PLLXTPRE给 PLLSRC,再经过PLLMUL 9倍频,得到72MHz的PLLCLK给系统时钟SYSCLK。

    ⑩RTCCLK(实时时钟)的时钟源也有三个,分别是②外部高速时钟HSE的128倍分频(黄色)、③外 部低速时钟LSE的32.768kHz(蓝色)、④内部低速时钟LSI的40kHz(橙色)。

    11 IWDGCLK(独立看门狗)的时钟来源于④内部低速时钟LSI的40kHz(橙色)。

    理清各个时钟来源后,再来看各总线的时钟。⑦高速接口总线AHB由⑥SYSCLK系统时钟分频得到,最高是系统时钟的72MHz。⑧外设总线APB1和⑨外设总线APB2,来源于⑦高速接口总线AHB,APB1的输出时钟最高是36MHz,APB2的输出时钟最高是72MHz。APB1和APB2下有各种外设,比如GPIO、USART等。
    在这里插入图片描述

    9.2 硬件设计

    内部时钟HSI不涉及硬件,外部时钟HSE参考前面最小系统的时钟电路,“5.2.2 时钟电路”。

    9.3 软件设计

    9.3.1软件设计思路

    实验目的:分别使用内部时钟HSI和外部时钟HSE作为系统时钟。

    1. 使用内部时钟HSI配置系统时钟到最大值64Mhz;
    2. 调用库函数读取系统时钟值以验证;
    3. 使用外部时钟HSE配置系统时钟到最大值72Mhz;
    4. 调用库函数读取系统时钟值以验证;
      本实验配套代码位于“5_程序源码\3_基础重点—时钟系统”。

    9.3.2软件设计讲解

    1. 使用内部时钟源HSI作为PLL的时钟源,然后将PLL作为系统时钟源
      内部时钟HSI配置如代码段 9.3.1 所示,HAL库定义了两个结构体,只需要设置这两个结构体成员,就
      完成对时钟的设置。

    代码段 9.3.1 使用 HSI 作为系统时钟(stm32f1xx_clk.c)

    /**
    * @brief System Clock Configuration
    * The system Clock is configured as follow : * System Clock source = PLL (HSI)
    * SYSCLK(Hz) = 64000000
    * HCLK(Hz) = 64000000
    * AHB Prescaler = 1 * APB1 Prescaler = 2 * APB2 Prescaler = 1 * PLLMUL = 16
    * Flash Latency(WS) = 2 * @param None
    * @retval None
    */
    void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.HSEState = RCC_HSE_OFF;
    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
    RCC_OscInitStruct.HSIState = RCC_HSI_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    while(1);
    }
    /** Initializes the CPU, AHB and APB busses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
    | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
    {
    while(1);
    } }
    
    • 17行:定义RCC_OscInitTypeDef结构体变量,该结构体主要是选择时钟源、设置时钟开关状态、PLL倍频;
    • -20行:设置时钟来源为内部高速时钟HSI;
    • 21行:不使用外部高速时钟,则HSE关闭;
    • 22行:设置HSE预分频,这里没用上HSE,默认为1分频即可;
    • 23行:内部高速时钟HSI打开;
    • 24行:锁相环PLL打开;
    • 25行:选择PLL时钟源,为HSI的二分频;
    • 26行:PLL的倍频为16倍频;
    • 27行:使用“HAL_RCC_ClockConfig()”函数设置RCC_OscInitStruct;
    • 18行:定义RCC_ClkInitTypeDef结构体变量,该结构体主要是配置系统时钟、AHB、APB1、APB2的分频;
    • 34-35行:设置哪些时钟将被设置;
    • 36行:设置系统时钟SYSCLK的来源为PLLCLK;
    • 37行:设置HCLK时钟(AHB Clock)为1分频(不能超过最大72MHz);
    • 38行:设置PCLK1时钟(APB1 Clock)为2分频(不能超过最大36MHz);
    • 39行:设置PCLK2时钟(APB2 Clock)为1分频(不能超过最大72MHz);
    • 41行:用“HAL_RCC_ClockConfig()”函数设置RCC_ClkInitStruct;

    将代码和时钟树进行对照,如图 9.3.1 所示,红色数字为对应代码行号,蓝色数字为时钟频率,红色线段为时钟走向。内部高速时钟HSI经过二分频为4MHz,再经过PLL 16倍频为64MHz,作为系统时钟SYSCLK, 再1分频给AHB,AHB再2分频给APB1,1分频给APB2。
    图 9.3.1 设置 HSI 和时钟树对照示意图
    2) 获取系统时钟的函数
    主函数里调用HAL库提供的“HAL_RCC_GetSysClockFreq()”函数获取系统时钟验证。
    代码段 9.3.2 获取系统时钟(main.c)

    // 此处定义全局变量以便在 debug 的时候可以看到这个变量的值
    uint32_t sys_clk = 0;
    int main(void) {
    // 初始化 HAL 库函数必须要调用此函数
    HAL_Init();
    /*
    * 系统时钟即 AHB/APB 时钟配置
    * 当使用内部高速时钟 HSI(8MHz)配置系统时钟时,使用 PLL 前会默认先二分频得到 4MHz 的 PLL 分频输入频率
    * 然后经过锁相环放大,最大放大倍数为 16,即 4*16=64MHz 是能配置的最大系统频率,F103 的最大系统频率为 72MHz,64MHz 显然是合法
    的系统频率
    */
    SystemClock_Config();
    // 调用库函数来检验自己的配置是否成功配置为系统频率 64MHz
    sys_clk = HAL_RCC_GetSysClockFreq();
    while(1);
    }
    
    1. 使用外部时钟源HSE作为PLL的时钟源,然后将PLL作为系统时钟源
      与前面类似,这里设置外部高速时钟HSE作为系统时钟,仍是设置两个结构体。
      代码段 9.3.3 使用 HSE 作为系统时钟(stm32f1xx_clk.c)
    /**
    * @brief System Clock Configuration
    * The system Clock is configured as follow : * System Clock source = PLL (HSE) * SYSCLK(Hz) = 72000000
    * HCLK(Hz) = 72000000
    * AHB Prescaler = 1 * APB1 Prescaler = 2 * APB2 Prescaler = 1 * PLLMUL = 9 * Flash Latency(WS) = 2 * @param None
    * @retval None
    */
    void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
    RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
    {
    while(1);
    }
    /** Initializes the CPU, AHB and APB busses clocks
    */
    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
    | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
    {
    while(1);
    } }
    
    • 17行:定义RCC_OscInitTypeDef结构体变量,该结构体主要是选择时钟源、设置时钟开关状态、PLL倍频;
    • 20行:设置时钟来源为外部高速时钟HSE;
    • 21行:内部高速时钟HSE打开;
    • 22行:设置HSE预分频,设置为1分频;
    • 23行:不使用内部高速时钟,则HSI关闭;
    • 24行:锁相环PLL打开;
    • 25行:选择PLL时钟源,为HSE;
    • 26行:PLL的倍频为9倍频;
    • 27行:使用“HAL_RCC_ClockConfig()”函数设置RCC_OscInitStruct;
    • 18行:定义RCC_ClkInitTypeDef结构体变量,该结构体主要是配置系统时钟、AHB、APB1、APB2的分频;
    • 34-35行:设置哪些时钟将被设置;
    • 36行:设置系统时钟SYSCLK的来源为PLLCLK;
    • 37行:设置HCLK时钟(AHB Clock)为1分频(不能超过最大72MHz);
    • 38行:设置PCLK1时钟(APB1 Clock)为2分频(不能超过最大36MHz);
    • 39行:设置PCLK2时钟(APB2 Clock)为1分频(不能超过最大72MHz);
    • 41行:用“HAL_RCC_ClockConfig()”函数设置RCC_ClkInitStruct;

    将代码和时钟树进行对照,如图 9.3.2 所示,红色数字为对应代码行号,蓝色数字为时钟频率,红色线段为时钟走向。外部高速时钟HSE不分频,通过选择器PLLXTPRE和选择器PLLRC,再PLL 9倍频为72MHz,作为系统时钟SYSCLK,再1分频给AHB,AHB再2分频给APB1,1分频给APB2。当前状态,为MCU全速工作状态。
    在这里插入图片描述
    4) 获取系统时钟的函数
    与前面类似,主函数里调用HAL库提供的“HAL_RCC_GetSysClockFreq()”函数获取系统时钟验证。
    代码段 9.3.4 获取系统时钟(main.c)

    uint32_t sys_clk = 0;
    int main(void) {
    // 初始化 HAL 库函数必须要调用此函数
    HAL_Init();
    /*
    * 系统时钟即 AHB/APB 时钟配置
    * 当使用外部高速时钟 HSE(8MHz)配置系统时钟时,使用 PLL 前可以选择不分频或者二分频,我们要配置到最大 72MHz 的系统频率此处当
    然是不分频
    * 然后经过锁相环放大,最大放大倍数为 16,我们要想得到 72MHz,此处选择 9 倍放大系数,即 8*9=72MHz 即可达到目标
    */
    SystemClock_Config();
    // 调用库函数来检验自己的配置是否成功配置为系统频率 64MHz
    sys_clk = HAL_RCC_GetSysClockFreq();
    while(1);
    }
    

    9.4 实验效果

    本实验对应配套资料的“5_程序源码\3_基础重点—时钟系统\”下的“3.1_HSI配置系统时钟64M”和
    “3.2_HSE配置系统时钟72M”。打开工程后,参考前面“4.4 下载程序和调试”进入调试模式,在代码中找到“sys_clk”选中,右键选择“Add ‘sys_clk’ to …”->“Watch 1”,即可在右下角显示该变量查看窗口,可以看到当前“sys_clk”为0,如图 9.4.1 所示。
    在这里插入图片描述
    在“while(1);”处加上断点,运行程序,可以看到“sys_clk”分别为64000000和72000000,如图 9.4.3 和 图 9.4.4 所示,与代码设计吻合。如果显示16进制,可选中该数字,右键去掉勾选“Hexadecimal Dispaly”,如图 9.4.2 所示。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    百问网技术论坛:
    http://bbs.100ask.net/

    百问网嵌入式视频官网:
    https://www.100ask.net/index

    百问网开发板:
    淘宝:https://100ask.taobao.com/
    天猫:https://weidongshan.tmall.com/

    技术交流群(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
    QQ群:869222007(已满)752871361

    单片机-嵌入式Linux交流群:
    QQ群:536785813

    展开全文
  • soc时钟系统

    千次阅读 2017-04-23 19:38:24
    一、SOC(systern on chip 系统级芯片)时钟系统简介 1.1什么时钟?SOC为什么需要时钟 (1)时钟是同步工作系统的同步节拍。 (2)SOC内部有很多器件,譬如CPU、串口、DRAM控制器、GPIO等内部外设,这些东西要...

    一、SOC(systern on chip 系统级芯片)时钟系统简介

    1.1什么时钟?SOC为什么需要时钟

    (1)时钟是同步工作系统的同步节拍。

    (2)SOC内部有很多器件,譬如CPU、串口、DRAM控制器、GPIO等内部外设,这些东西要彼此工作,需要一个同步时钟系统来指挥,这个就是SOC的时钟。

    1.2时钟一般如何获得?

    (1)SOC的时钟获得一般有:

    *外部直接输入时钟信号,SOC有个引脚用来外部时钟信号,用的很少

    *外部晶振+内部时钟发生器,大部分低频单片机都是这么工作的。

    *外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器得到各种频率的时钟,210属于这种。

    1.3s5pv210属于第三种,为什么这么设计?

    (1)为什么不用外部高频晶振产生高频信号直接给CPU?

    因为芯片外部电路不适合使用高频率,传导辐射比较难控制,高频率的晶振比较贵。

    (2)为什么要内部先高频然后在分频?

    因为SOC内部有很多不见需要时钟,而且各自需要的时钟频率不同,没法统一供应,因此设计思路是PLL后得到一个高的频率

    (1GHZ、1.2GHZ),然后再各外设都有自己的分频器再来分频得到自己想要的频率。

    1.4时钟和系统性能的关系、超频、稳定性

    (1)一般的SOC时钟频率都是可以人为编程控制的,频率的高低对系统性能有很大关系。

    (2)S5PV210建议工作频率是800HZ-1.2GHZ,一般我们都是设置1GHZ主频。如果设置到1.2GHZ就叫超频。超频的时候系统性能会提升,但是发热会增大,

    系统不稳定,需要的散热条件越苛刻。

    1.5时钟和外设编程的关联

    每个外设工作需要一定频率的时钟,这些时钟都是由时钟系统提供的,时钟系统可以编程控制工作模式,因此我们程序员可以为每个外设制定时钟来源、时钟分频系统、从而制定这个外设的工作时钟。

    1.6时钟和功耗控制的关系

    (1)SOC中各种设备工作时,时钟频率越高其功耗越大,发热越大,越容易不稳定,需要外设的散热条件越苛刻。

    (2)SOC内部有很多外设,这些外设不用的时候最好关掉(不关掉会一定程度浪费电),开关外设不是通过开关,而是通过时钟。也就是我们给某个外设断掉时钟,这个外设就不工作了。

    展开全文
  • 什么是时钟系统? A:通常所说的系统时钟就是指时钟系统,它是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。 2.Q:时钟系统有什么作用? A:时钟是嵌入式系统的脉搏,...

    1.Q:什么是系统时钟?什么是时钟系统?

    A:通常所说的系统时钟就是指时钟系统,它是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。

    2.Q:时钟系统有什么作用?

    A:时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作.外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等等。因此时钟对于计算机系统是至关重要的,通常时钟系统出现问题也是致命的,比如振荡器不起振、振荡不稳、停振等。

    如下图1所示,ARM的时钟系统包括4部分,分为晶体振荡器、唤醒定时器、锁相环(PLL)和VPB分频器。其中晶体振荡器为系统提供基本的时钟信号(频率为Fosc)。当复位或者处理器从掉电模式唤醒时,“唤醒定时器”要对输入的时钟信号做计数延时,使芯片内部的部件有时间进行初始化。然后Fosc被PLL提高到一个符合用户需要的频率Fcclk,Fcclk用于CPU内核。因为CPU内核通常比外设部件的工作速度要快,用户可以通过设置VPB分频器,把Fcclk信号降低到一个合适的值Fpclk,该信号用于外设部件。以下是对各个部件和常见概念的介绍。


    展开全文
  • Linux操作系统的时钟系统

    千次阅读 2018-05-04 14:33:53
    1 硬件时钟系:该时钟系统的运行独立于任何系统控制程序,在 CPU 内部运行,既使系统断电,该时钟系统仍然保持运行,此时钟系统常常被称为实时时钟系统 (RTC),BIOS时钟系统或CMOS时钟系统。2 系统时间:该时间为 ...
  • 标准时钟系统(体育场馆时钟同步系统)京准电子 第一部分 GPS子母钟系统概述: 体育场馆GPS子母钟系统是由高精度GPS(北斗)母钟、高稳定性NTP网络时间服务器、高品质系统子钟、智能化控制设备及其它配套设备组成的计时...
  • STM32时钟系统与时钟启动顺序详解

    千次阅读 2018-01-20 10:55:56
    概念基础:STM32时钟系统基本一致,不同系列之间有细微差别。此文档主要针对STM32F446的时钟系统进行介绍。1. 时钟树概述 为何不是采用一个系统时钟?如51 因为STM32本身非常复杂,外设非常多,但是并非所有外设都...
  • s5pv210时钟系统详解

    千次阅读 多人点赞 2020-01-03 17:25:49
    S5PV210时钟系统1、什么是时钟系统时钟系统的作用? 时钟系统指的由固有频率来控制的系统。作用:有了一定的频率,工作才能有序,有节奏的进行着。 2、S5PV210的时钟系统是怎么样的? S5PV210:外部晶振+...
  • STM32F207时钟系统解析

    千次阅读 2020-06-18 09:20:44
    在前几天的文章《晶振原理解析》中介绍了晶振如何产生时钟的,板子使用的是25M无源晶振,下文将介绍STM32F207的时钟系统如何将25M晶振时钟转换为120M系统主频时钟的。 01、时钟系统介绍 ▲时钟系统专业名词缩写...
  • KEA128时钟系统

    千次阅读 2018-12-03 14:10:49
    一,KEA128时钟系统示意图。   二,时钟定义。   三,关键时钟配置(内核时钟,总线时钟)。 内核时钟、平台时钟、系统时钟相同。 总线时钟、FLASH时钟相同。 外部时钟配置如下 SIM-&gt;...
  • 轨道交通重要组成部分网络时钟系统(子母钟系统) 轨道交通重要组成部分网络时钟系统(子母钟系统) 地铁时钟系统是轨道交通系统的重要组成部份之一,其主要作用是为控制中心调度员、车站值班员、各部门工作人员及...
  • 【STM32】时钟系统RCC

    千次阅读 多人点赞 2020-07-13 18:34:24
    本文以STM32F103为例,将本人所知的关于STM32的时钟系统的知识点展示出来。 先贴上STM32F1系列的时钟树 1、时钟源 由时钟树可以,对于STM32来说,时钟源一共有四个,分别为LSI、LSE、HSE、HSI。另外一种说法为...
  • STM32——时钟系统

    千次阅读 2016-04-12 09:01:05
    STM32——时钟系统 宗旨:技术的学习是有限的,分享的精神的无限的。 一、时钟树  普通的MCU,一般只要配置好GPIO 的寄存器,就可以使用了。STM32为了实现低功耗,设计了非常复杂的时钟系统,必须开启外设时钟...
  • AM3352时钟系统分析

    2019-08-09 20:01:19
    时钟系统的流程图 通常情况下,系统的时钟流向为:外部晶振 -> 内部PLL锁相环 -> 内部分频器 -> PRCM 总体结构 时钟系统有多个模块组成:外部晶振,内部PLL锁相环,内部分频器,时钟管理PRCM。 振荡器:...
  • STM32开发 -- 时钟系统详解

    万次阅读 多人点赞 2018-08-10 10:24:34
    上一篇文章讲了RTC,里面其实已经包含了时钟系统的介绍了。这篇文章将再详细的讲一下。 一、时钟系统框图 二、时钟系统 STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部...
  • 北斗时钟同步系统(北斗时钟系统-北斗授时系统) 北斗时钟同步系统(北斗时钟系统-北斗授时系统) 技术交流-岳峰-15901092122;yf_cs@163.com;Q-522508213; 时钟同步系统是针对计算机、自动化装置等进行校时而...
  • /sbin/hwclock 用于同步硬件时钟系统的时间与 Linux操作系统时间. 查看当前硬件时钟系统时间的命令为 /sbin/hwclock --show 将硬件时钟系统时间同步到 Linux操作系统时间的命令为 /sbin/hwclock --...
  • GPS时钟系统,GPS同步时钟系统

    千次阅读 2009-09-24 16:46:00
    GPS卫星同步时钟系统本系统安装两台GPS时钟,作为主机。这两台主机可以接受GPS卫星定时信号,作为主时钟的外部时间基准。同时,主机内部具有高达7*10-8精度的自保持时钟,当无GPS接收并且外部时钟源消失的状况下,...
  • 4.3 STM32 时钟系统

    千次阅读 2017-12-22 18:47:56
    STM32 STM32的 时钟系统
  • STM32 时钟系统

    千次阅读 2015-03-21 11:14:55
    众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是...
  • 时钟系统概述

    千次阅读 2012-06-20 23:51:09
    统一时钟系统(UCS)支持低功耗和超低功耗。使用三个内部时钟信号,用户可以在性能和低功耗间做出最好的权衡。统一时钟系统模块可以被设置为操作不带任何外部器件、带一或两个外部晶振、陶瓷振荡器,其完全在软件...
  • STM32F103时钟系统:系统时钟配置为56M,有哪些配置方法 (1)前提:HSE外部晶振为:8M (2)题目目的:加深大家对STM32F1时钟系统配置的理解。 附上时钟系统框图 图片1副本.png (233.96 KB, 下载次数...
  • 物联网之STM32开发五(时钟系统

    千次阅读 2018-08-03 00:48:19
    STM32-时钟系统 内容概要: STM32时钟系统概述 SysTick定时器讲解 HAL_Delay()函数的实现 STM32通用定时器介绍 STM32通用定时器实例 STM32时钟系统概述 内容概要: 时钟系统的概念及意义 常见振荡器介绍 ...
  • MSP432P401R时钟系统

    2020-09-13 15:12:19
    MSP432P401R时钟系统 MSP432的时钟模块(CS),个人理解msp432最特色的功能应该是超低功耗和高性能的组合。432系列的时钟系统主要有三个方面: 1、硬件时钟–时钟源; 基础 2、时钟映射–控制转换; 转换 3...
  • MSP430F5438时钟系统

    千次阅读 2014-11-19 16:08:02
    MSP430F5438时钟系统 要了解一款芯片,最直观的就是官方给的芯片的特点(FEATURES);要用好一款芯片,就必须从数据手册了解芯片的各个功能;要开发一款芯片,我们就不许从最基本的时钟系统出发。本文着重介绍下MSP...
  • stm32l0xx系列低功耗新增MSI内部多频率可选时钟源,代码配置方面基于HAL库,与f系列相比存在一定的区别,本文以datasheet中的时钟树图为基础对时钟系统进行学习总结。时钟树如下图1所示: 1、LSI
  • 【STM32】STM32时钟系统和SystemInit函数解读

    万次阅读 多人点赞 2018-04-05 16:33:56
    时钟系统就是CPU的脉搏,像人的心跳一样,重要性不言而喻。由于STM32本身十分复杂,外设非常多,但并不是所有的外设都需要系统时钟那么高的频率,比如看门狗以及RTC只需要几十k的时钟即可。并且,同一个电路,时钟越...
  • ISE FPGA时钟系统

    千次阅读 2016-05-29 17:46:28
    在使用QuartusII设计Altera的FPGA时,对于时钟的考虑一般很少。...可是若将FPGA换为Xilinx系列,在ISE环境中设计时,时钟的使用就没那么简单了,尤其是在设计复杂工程时,全局时钟系统的设计显得尤为重要。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 244,893
精华内容 97,957
关键字:

时钟系统