STM32学习和实践笔记(6):自己进行时钟配置的思路

在《STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (d)-CSDN博客

中,我了解到,在程序执行我们写的main函数之前,实际上先执行了一个汇编语言所写的启动文件,以完成相应的初始化。

在这个启动文件中,就会执行这个SystemInit()来配置时钟。

这个SystemInit()在system_stm32f10x.c和system_stm32f10x.h中可以看到其详细定义。

启动文件执行完这个函数后,时钟的配置结果就是如下所示状态:

换言之,就算我不进行配 置,就像前面的点亮LED程序一样,启动文件也会通过SystemInit()来配置时钟进行以上配置。它默认使用外部的高速晶振作为时钟源,但是如果安排外部晶振,它就自动使用内部的8M晶振作为时钟源。

而如果自己想要更改和配置时钟,就调用下面这些RCC库函数。

这些函数都在stm32f10x_rcc.c和stm32f10x_rcc.h里,在前面点亮LED的库函数模板里都已经包含了。

对于开发板上使用8M的外部晶振,具体方法,就是自己创建一个时钟设置函数void RCC_HSE_Config(u32 div,u32 pllm) (注意这个函数不是库函数里的RCC_HSEConfig,虽然名字看起来很像),调用上面的那些已定义好的关于时钟设置的库函数,来进行配置。

如下:

void RCC_HSE_Config(u32 div,u32 pllm) //自定义系统时间(可以修改时钟)
{
    RCC_DeInit(); //将外设RCC寄存器重设为缺省值
    RCC_HSEConfig(RCC_HSE_ON);//设置为使用外部高速晶振(HSE)
    if(RCC_WaitForHSEStartUp()==SUCCESS) //等待HSE起振
    {
        RCC_HCLKConfig(RCC_SYSCLK_Div1);//设置AHB时钟(HCLK)
        RCC_PCLK1Config(RCC_HCLK_Div2);//设置低速AHB时钟(PCLK1)
        RCC_PCLK2Config(RCC_HCLK_Div1);//设置高速AHB时钟(PCLK2)
        RCC_PLLConfig(div,pllm);//设置PLL时钟源及倍频系数
        RCC_PLLCmd(ENABLE); //使能或者失能PLL
        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET);//检查指定的RCC标志位设置与否,PLL就绪
        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//设置系统时钟(SYSCLK)
        while(RCC_GetSYSCLKSource()!=0x08);//返回用作系统时钟的时钟源,0x08:PLL作为系统时钟
    }
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-10 10:42:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-10 10:42:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-10 10:42:04       87 阅读
  4. Python语言-面向对象

    2024-04-10 10:42:04       96 阅读

热门阅读

  1. 未来AI技术创业机会

    2024-04-10 10:42:04       41 阅读
  2. CentOS 7详细介绍。

    2024-04-10 10:42:04       39 阅读
  3. 文心一言和GPT-4全面比较

    2024-04-10 10:42:04       40 阅读
  4. 三种芯片:ASIC、FPGA、SoC

    2024-04-10 10:42:04       38 阅读
  5. Vue将iconfont封装成全局组件,自定义类名

    2024-04-10 10:42:04       38 阅读
  6. List接口(1) | ArrayList

    2024-04-10 10:42:04       42 阅读
  7. 关于yolov8x-p2.yaml

    2024-04-10 10:42:04       38 阅读
  8. 链表,栈,队列的区别及其应用

    2024-04-10 10:42:04       34 阅读
  9. 如何生成 ssh 秘钥?

    2024-04-10 10:42:04       35 阅读
  10. 7-11完全二叉树的层序遍历

    2024-04-10 10:42:04       37 阅读