STM32-RCC内部总线时钟设置程序详讲


杨桃32学习笔记,本文图片文字皆为转述

RCC介绍

RCC时钟复位和设置功能的缩写,它可以设置单片机的时钟输入源,以及cpu和
内部总线的时钟频率。在我们之前学过的程序内开头都有rcc的设置程序,接下
来就讲解rcc设置函数的内容从而结束stm32核心板的内容。

在这里插入图片描述
在这里插入图片描述

回顾时钟复位和电源管理文章

在这里插入图片描述
内部时钟都是RC,外部时钟都是晶体,高速都是提供系统时钟。
在这里插入图片描述
8MHZ的高速内部时钟的通过多路选择器和倍频器达到不同频率的时钟提供给不同的外设流程图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时钟树详解

在这里插入图片描述
在这里插入图片描述

rcc程序详解以及涉及到的固件库函数

在这里插入图片描述
在这里插入图片描述
由于具体设计函数较多不一一列出请大家在之前的文章中找出固件库用户手册进行查看理解。继续看if语句中的第一个语句选择的就是绿色:第三条路线。需要注意区别pll选择器和sw选择器的区别。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二条语句是设置AHB时钟,因为AHB时钟是其他总线的前端,之后的总线频率都是由AHB分频而来,除了USB所需的时钟频率由图可以看出是通过直接分频后直接过来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第三四条语句是设置AHB1和AHB2总线时钟,他们也可以设置分频系数,如图所示:
在这里插入图片描述
这里设置APB1二分频,APB2不分频。
在这里插入图片描述
接下来是内部flash的相关设置,因为内部主频和相关功能的分频不同,flash读写速度也受到一定影响,所以对flash按照相应的评率来设置这里我们的系统主频是72Mhz所以按下图选择。
还有flash的预期缓存模式就是把要读取的数据提前从flash当中读出来到sram当中,当执行语句的时候SRAM中已经有了读取好了的数据。如果没有开启,就需要在命令执行时从flash读取从而拖慢系统运行速度。
在这里插入图片描述
此时我们已经配置好了频率,秉着先配置在使用的原则,接下来将选择器打开。
在这里插入图片描述
在这里插入图片描述
至此单片机的主频时钟源三大 内部总线的分频都已经设置好了,接下来单片机的内部功能就可以使用设置好的时钟了,但是在接下来的程序当中把这行时钟的开启函数都屏蔽掉了,是因为我们当时用到时再去开启例如led初始化程序中,这样的好处就是在不使用相关功能的时候就不会加载相关功能的.c文件也就不会开启相关时钟的rtc设置。
在这里插入图片描述
在这里插入图片描述
STM32核心板内容完结,继续更新扩展板视频内容。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
学习STM32 的CAN模块,最核心 的就是系统时钟的配置问题,代码如下: /**************************************************************/ //程 序 名: RCC_Config() //开 发 者: 火工头陀 //入口参数: 无 //功能说明: 系统时钟配置 //**************************************************************/ void RCC_Config(void) { ErrorStatus HSEStartUpStatus; //定义结构体 /* RCC system reset(for debug purpose)将外设 RCC寄存器重设为缺省值 */ RCC_DeInit(); ///* Enable HSE 设置外部高速晶振(HSE)*/ //RCC_HSEConfig(RCC_HSE_ON); /* Enable HSE 设置外部高速晶振(HSE)*/ //外部晶体振荡器被旁路,参照《数据手册》6.2.1 //这样设置是因为ufun学习板的原理图就是这样设计的 //RCC_HSEConfig(RCC_HSE_Bypass); RCC_HSEConfig(RCC_HSE_ON);//亚明小板设置方法 (最常用的无源晶振设置方法) /* Wait till HSE is ready 等待 HSE 起振*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { /* Enable Prefetch Buffer 预取指缓存使能*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Flash 2 wait state 设置代码延时值*/ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK 设置 AHB 时钟(HCLK)= 72 MHz*/ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK1 = HCLK/2 设置低速 AHB 时钟(PCLK1) = 72/2 = 36 MHz*/ RCC_PCLK1Config(RCC_HCLK_Div2); /* PCLK2 = HCLK 设置高速 AHB 时钟(PCLK2)= 72 MHz*/ RCC_PCLK2Config(RCC_HCLK_Div1); //根据外接晶振设置总线频率、PLL 时钟源、倍频系数 /* PLLCLK = 12MHz * 6 = 72 MHz 设置 PLL 时钟源及倍频系数*/ //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); /* PLLCLK = 8MHz * 9 = 72 MHz 设置 PLL 时钟源及倍频系数*/ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL 使能或者失能 PLL*/ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready 等待指定的 RCC 标志位设置成功 等待PLL初始化成功*/ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source 设置系统时钟(SYSCLK) 设置PLL为系统时钟源*/ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source 等待PLL成功用作于系统时钟时钟源*/ while(RCC_GetSYSCLKSource() != 0x08) { } } }
第1章ARM及Cortex-M3处理器概述 1.1ARM处理器系列 1.1.1命名规则 1.1.2ARM处理器系列 1.2ARMCortex-M3处理器 1.2.1处理器组件 1.2.2Cortex-M3的层次和实现选项 1.2.3处理器内核 1.2.4嵌套向量中断控制器(NVIC) 1.2.5总线矩阵 1.2.6集成调试 1.2.7可选组件 1.2.8Cortex-M3处理器应用 1.3ARMCortex-M3指令集 1.4ARMCortex-M3的优势 第2章STM32系列微控制器 2.1STM32系列微控制器简介 2.1.1STM32微控制器的主要优点 2.1.2STM32微控制器的应用 2.2STM32F101xx系列微控制器 2.2.1特点 2.2.2总体结构 2.3STM32F103xx系列微控制器 2.3.1特点 2.3.2总体结构 第3章STM32系列微控制器存储器与外设 3.1存储器和总线的结构 3.1.1系统结构 3.1.2存储器结构 3.1.3存储器映射 3.1.4启动配置 3.2电源控制 3.2.1电源供应 3.2.2电源供应管理 3.2.3低功耗模式 3.2.4电源控制寄存器 3.3复位和时钟控制 3.3.1复位 3.3.2时钟 3.3.3RCC寄存器描述 3.4通用I/O和复用I/O(GPIO和AFIO) 3.4.1GPIO功能描述 3.4.2GPIO寄存器描述 3.4.3复用功能I/O和调试配置(AFIO) 3.4.4AFIO寄存器描述 3.5中断和事件 3.5.1嵌套向量中断控制器(NVIC) 3.5.2外部中断/事件控制器(EXTI) 3.5.3EXTI寄存器 3.6DMA控制器 3.6.1简介 3.6.2主要特性 3.6.3功能描述 3.6.4DMA寄存器 3.7实时时钟(RTC) 3.7.1简介 3.7.2主要特性 3.7.3功能描述 3.7.4RTC寄存器描述 3.8备份寄存器(BKP) 3.8.1简介 3.8.2主要特性 3.8.3干扰检测 3.8.4RTC校验 3.8.5BKP寄存器描述 3.9独立的看门狗 3.9.1简介 3.9.2IWDG寄存器描述 3.10窗口看门狗(WWDG) 3.10.1简介 3.10.2主要特性 3.10.3功能描述 3.10.4如何编程看门狗的超时时间 3.10.5调试模式 3.10.6寄存器描述 3.11高级控制定时器 3.11.1简介 3.11.2主要特性 3.11.3框图 3.11.4功能描述 3.11.5TIMI寄存器描述 3.12通用定时器(TIMx) 3.12.1简介 3.12.2主要特性 3.12.3框图 3.12.4功能描述 3.12.5TIMx寄存器描述 3.13控制器局域网(bxCAN) 3.13.1简介 3.13.2主要特性 3.13.3总体描述 3.13.4运行模式 3.13.5功能描述 3.13.6中断 3.13.7寄存器访问保护 3.13.8CAN寄存器描述 3.14内部集成电路(I2C)接口 3.14.1简介 3.14.2主要特性 3.14.3总体描述 3.14.4功能描述 3.14.5中断请求 3.14.6I2C调试模式 3.14.7I2C寄存器描述 3.15串行外设接FI(SPI) 3.15.1简介 3.15.2主要特性 3.15.3功能描述 3.15.4SPI寄存器描述 3.16通用同步异步收发机(USART) 3.16.1简介 3.16.2主要特性 3.16.3总体描述 3.16.4中断请求 3.16.5USART寄存器描述 3.17USB全速设备接口 3.17.1概述 3.17.2主要特性 3.17.3结构框图 3.17.4功能描述 3.17.5编程中需要考虑的问题 3.17.6USB寄存器描述 3.18模/数转换器(ADC) 3.18.1概述 3.18.2主要特性 3.18.3引脚描述 3.18.4功能描述 3.18.5校准 3.18.6数据对齐 3.18.7基于通道的可编程的采样时间 3.18.8外部触发转换 3.18.9DMA请求 3.18.10双ADC模式 3.18.11温度传感器 3.18.12中断 3.18.13ADC寄存器描述 3.19调试支持(DBG) 3.19.1概述 3.19.2相关的ARM文档 3.19.3SWJ调试端口(串行线和JTAG) 3.19.4引脚分布和调试端口引脚 3.19.5STM32F10xJTAGTAP连接 3.19.6ID编码和锁定机制 3.19.7JTAG调试端口 3.19.8SW调试端口 第4章STM32固件库 4.1STM32固件库的定义规则 4.1.1固件库命名规则 4.1.2代码标准 4.2STM32库的层次结构 4.2.1固件包描述 4.2.2固件库文件描述 4.3STM32库的使用 第5章STM32系列微控制器开发工具与应用 5.1KeilMDK介绍 5.1.1开发过程及集成开发环境简介 5.1.2工程管理 5.1.3编写源程序 5.1.4编译程序 5.1.5调试程序 5.2IAREWARM介绍 5.2.1EWARM集成开发环境及配套仿真器 5.2.2在EWARM中生成一个新项目 5.2.3编译和链接应用程序 5.2.4用J-LINK调试应用程序 5.3STM32-SK仿真评估板 5.3.1评估板规格说明 5.3.2测试程序 5.3.3关于仿真评估板的几个问题 5.4STM32-DK开发板 5.4.1开发板规格说明 5.4.2开发板实例程序 5.4.3关于STARM的常见问题 5.5mx-Pro量产编程器使用简介 5.5.1编程文件管理 5.5.2芯片烧写 5.6应用实例:基于STM32的数据采集器 5.6.1硬件设计 5.6.2软件设计 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值