你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32库函数翻译,每个函数说明及示例-RCC(时钟)篇(上)  

[复制链接]
bb123 发布时间:2016-8-23 14:00
STM32库函数说明及示例(版本V1.4.0
----第二篇:RCC库(上)
文档说明和约定:
该文档主要是对STM32F4各个模块的库进行翻译和说明。文档中加入了作者的一些理解,建议和小贴士。并且在文档最后,加入了一些使用该库模块的案例。希望大家通过对该文档的阅读,可以更好的使用STM32的库函数进行学习和项目开发。之所以选用1.4.0版本进行翻译和说明,因为该版本群众基础较好,有大量的使用者和相关资料。后续也会推出新版本库和CubeMX库的翻译和说明,希望大家喜欢和支持。如果大家觉得文档有什么问题,麻烦请提出,如果确认问题存在,作者会及时修改。
文档约定:
Ø  小贴士:蓝色字体
Ø  宏定义:土红色字体
本库模块相关术语说明:
RCCstm32的时钟控制器
HSE:外部高速时钟
HSI:内部高速时钟
LSE:外部低速时钟
LSI:内部低速时钟
PLL:锁相环,主要用作倍频
CSS:系统安全时钟
MCO1:微控制器时钟输出1
MCO2:微控制器时钟输出2
注意:RCC库因为内容太多,因此分为上中下三篇
1      RCC库说明
库文件名:stm32f4xx_rcc.c
库函数注释部分翻译:
RCC的特性
TIPS:建议大家在看RCC特性的时候 配合时钟树图进行理解,以下附上时钟树图,完整的时钟树图请参考STM32F4XX英文参考手册7.2章 212页
(注意 帖子里面图片显示不出,大家可以下载附件中的PDF文档,里面有图片)
以下为翻译库函数注释部分:
(1)            复位以后,设备使用内部高速时钟(HSI)开始运行,以下单元包括Flash 0 wait state, Flash prefetch buffer, D-Cache被禁用,并且除了内部SRAM,FLSAH和JTAG的所有控制器均被禁用。
l  这个时候,所有的低速和高速总线没有被分频,所有映射在这些总线上的控制器以HIS时钟速度运行。(即16MHZ)
l  除了SRAM和FLASH,所有控制器的时钟选择被关闭
l  除了用作下载和调试目的的JTAG接口外,所有的IO处于浮空状态,
(2)            一旦设备从复位状态启动,用户需要做以下事情:
l  配置系统时钟使用的时钟源(如果你的应用需要更高的频率或者性能)
l  配置系统时钟频率和设置FLASH
l  配置AHB和APB总线的分频
l  为要使用的控制器使能时钟
l  为不是从系统时钟产生时钟源的控制器配置时钟源(如I2S,RTC,USB OTG FS/SDIO/RNG)
2      具体函数说明
(1)   内部和外部时钟,PLLCSSMCO配置函数
这个部分提供的函数允许去配置内部和外部时钟,PLLCSSMCO管脚,以下进行说明
l  HSI(内部高速时钟),芯片自带的16MHZ高精度RC振荡器,该时钟可以直接或者通过PLL作为系统时钟源。
l  LSI(内部低速时钟),芯片自带的32KHZ低功耗的RC振荡器,主要用于IWDG和RTC时钟源
l  HSE(外部高速时钟),4---26MHZ的振荡器,可以直接作为系统时钟源,或者通过PLL用作系统时钟源。也可以作为RTC的时钟源。
l  LSE(外部低速时钟),用作RTC时钟源的32K振荡器。
l  PLL(由HSI或者HSE提供时钟),提供两种不同的输出时钟
Ø  第一种时钟是用来产生高速系统时钟的(最高可达168MHZ(不超频))
Ø  第二种是用于产生USB OTG FS(48MHZ),随机模拟发生器(小于等于48MHZ),SDIO(小于等于48MHZ)的时钟,
Tips:PLL解释
PLL(Phase Locked Loop): 为锁相回路或锁相环, 用来统一整合时脉讯号,使高频器件正常工作,如内存的存取资料等。PLL用于振荡器中的反馈技术。 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,有相应的 器件VCO,实现转成高频,但并不稳定,故利用锁相环路就可以实现稳定且高频的时脉冲讯号。
l  PLLI2S(由HSI或者HSE提供时钟),用于产生精准的时钟,该时钟用于基于I2S接口的高保真音频或者STM32F429x/439x设备的SAI接口。
l  PLLSAI(由HSI或者HSE提供时钟),用于产生精准的时钟,该时钟用于SAI接口和STM32F429x/439x设备的LCD控制器接口。
l  CSS(系统安全时钟),一旦使能,并且如果一个HSE时钟发生失败(把HSE直接用于产生系统时钟或者通过PLL产生系统时钟),系统时钟会自动切换到HIS并且会产生一个中断。这个中断连接与Cortex-M4的NMI(不可屏蔽中断)异常向量。
l  MCO1(微控制器时钟输出),通过PA8管脚经过一个可配置的分频器输出HSI,LSE,HSE或者PLL时钟。
l  MCO2(微控制器时钟输出),通过PC9管脚经过一个可配置的分频器输出HSE,PLL,系统时钟或者PLLI2S时钟。
1.  void RCC_DeInit(void)
函数解释RCC的反初始化函数,该函数的作用是把RCC相关的寄存器配置成上电复位后的默认状态,在第一次初始化RCC前可以调用该函数。复位后时钟的默认状态如下(所以大家要注意,如果不配置RCC的话,是有一个默认状态的):
Ø  HIS打开并且作为系统时钟源
Ø  HSE,PLL和PLLI2S关闭
Ø  AHB,APB1和APB2的分频器设置为1
Ø  CSS,MCO1和MCO2关闭
Ø  所有的中断关闭
注意,该函数不能修改如下配置:
Ø  外设控制器的时钟
Ø  LSI,LSE和RTC的时钟
函数参数说明:
2.  void RCC_HSEConfig(uint8_t RCC_HSE)
函数解释HSE的配置函数。
注意1:在使能HSE以后(RCC_HSE_ON 或者 RCC_HSE_Bypass),软件必须等待HSERDY标志置位,以确保HSE时钟稳定并且可以被用于PLL或者系统时钟。(这一点请大家尤其注意,尤其是没有硬件编程的同学,因为HSE时钟使能后,需要一定的时间才能稳定下来)。
注意2:当HSE直接的或者通过PLL间接的用于系统时钟时,HSE是不能被改变的。因此,在你改变HSE之前,你必须选择使用另一个时钟源,然后改变HSE的状态(比如,禁止使用HSE)。
注意3:当进入停止或者待机模式时,HSE停止。
注意4:这个函数会复位CSSON位,因此如果之前使能了时钟安全系统(CSS),你就必须在调用这个函数后重新使能CSS
函数参数说明:RCC_HSE:指定HSE的新状态,这个参数可以选择使用如下三个宏定义之一
RCC_HSE_OFF:关闭HSE振荡器,在6个HSE振荡器时钟周期后,HSERDY标志位会变低。
RCC_HSE_ON:打开HSE振荡器
RCC_HSE_Bypass:使用外部时钟旁路HSE振荡器(就是直接使用外部时钟源作为HSE时钟)
3.  ErrorStatus RCC_WaitForHSEStartUp(void)
函数解释:等待HSE稳定。
注意:该函数等待HSERDY标志位置位,当该标志位置位后会返回SUCCESS。如果时间超时并且标志位没有置位,则会返回ERROR。超时时间的值由一个定义在stm32f4xx.h头文件中的常量HSE_STARTUP_TIMEOUT来进行配置,你可以根据你系统中的HSE振荡器来调整这个值。该函数配合RCC_HSEConfig函数使用。
函数参数说明:
函数返回值说明:
SUCCESSHSE启动成功,状态稳定。
ERRORHSE启动失败。
4.  void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
函数解释:调整内部高速时钟的校准值。
注意:该校准值主要用于补偿不同的电压和温度对内部HSIRC频率的影响。
函数参数说明:HSICalibrationValue:需要调整的校准值
函数返回值说明:无
5.  void RCC_HSICmd(FunctionalState NewState)
函数解释:使能或者禁止内部高速时钟HSI
注意1:当进入停止(STOP)或者待机(STANDBY)模式,HSI会停止。在从复位启动,从STOPSTANDBY模块唤醒或者使用HSE直接或者间接作为系统时钟失败后(如果使能安全系统时钟),使用HSI时钟(由硬件使能)。
注意2:当HSI作为系统时钟源,HSI是不能被停止的。因此,你必须选择另外一个时钟源,然后停止HSI
注意3:使能HSI以后,软件必须等待HSIRDY标志位置位,以确保HSI时钟稳定,并且可以作为系统时钟源使用。
函数参数说明:NewStateHSI新的状态,这个参数有以下两个宏定义
ENABLE:使能HSI
DISABLE:禁止使用HSI
注意:当HSI停止,在6HSI振荡器周期后,HSIRDY变低。
函数返回值说明:无
6.  void RCC_LSEConfig(uint8_t RCC_LSE)
函数解释:配置外部低速振荡器。
注意1:由于LSE在备份区域,并且在复位以后的写访问依赖于这个区域,因此在配置LSE前,你必须使用函数PWR_BackupAccessCmd(ENABLE)(复位后即操作一次)来使能写访问。
注意2:使能LSE后(RCC_LSE_ON或者RCC_LSE_Bypass,软件必须等待LSERDY标志位置位,来表明LSE时钟稳定并且可以用于RTC时钟。
函数参数说明:RCC_LSE:指定LSE的新状态
这个参数可以是以下三个值之一:
RCC_LSE_OFF:关闭LSE振荡器,在6个振荡器周期后,LSERDY标志会变成0
RCC_LSE_ON:打开LSE振荡器
RCC_LSE_Bypass:使用外部时钟旁路LSE振荡器
函数返回值说明:无
7.  void RCC_LSICmd(FunctionalState NewState)
函数解释:使能或者禁止内部低速时钟振荡器。注意1:使能LSI以后,软件必须等待LSIRDY标志位置位,确保LSI稳定,并且可以用于IWDG或者RTC时钟.注意2:如果IWDG(独立看门狗)运行,LSI是不能被禁用的。函数参数说明:NewState:LSI新的状态这个参数可以是ENABLE 或者 DISABLE 注意:LSI停止后,在6个LSI的振荡器周期后,LSIRDY标志位变成0函数返回值说明:无
8.  void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t PLLM, uint32_tPLLN, uint32_t PLLP, uint32_t PLLQ)
字数超限  请大家下载PDF文档观看该函数详细解释

9.  void RCC_PLLI2SConfig(uint32_t PLLI2SN, uint32_t PLLI2SR)
字数超限  请大家下载PDF文档观看该函数详细解释
更多物联网和智能硬件开发精彩内容和免费试学课程,请访问

STM32库函数说明及示例-RCC篇-麦子原创(上).pdf

下载

547.57 KB, 下载次数: 350

RCC篇(上部)

1 收藏 3 评论27 发布时间:2016-8-23 14:00

举报

27个回答
bb123 回答时间:2016-8-23 14:33:36
开新帖了  STM32库函数说明的RCC篇  因为RCC内容很多  因此分成了上中下 三篇  这是上篇哦
上一篇 GPIO篇请见  https://www.stmcu.org.cn/module/forum/thread-607584-1-1.html
beebird 回答时间:2016-8-23 15:11:26
额,不错不错不错
stary666 回答时间:2016-8-23 15:57:26
gameng 回答时间:2016-8-23 16:54:37
感谢分享!收藏学习...
bb123 回答时间:2016-8-24 09:35:23
今天开始写库函数之RCC库---中篇  欢迎大家一起学习哦
beebird 回答时间:2016-8-24 11:33:35
坐等中篇哦,哈哈
cos12a-21701 回答时间:2016-8-25 12:24:45
大力支持。每天一点点,坚持就能。。。
xxxevery 回答时间:2017-2-6 01:55:20
谢谢分享,仔细拜读
ylxhao 回答时间:2017-2-21 11:13:57
谢谢分享
123下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版