完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
该文档主要是对STM32F4各个模块的库进行翻译和说明。文档中加入了作者的一些理解,建议和小贴士。并且在文档最后,加入了一些使用该库模块的案例。希望大家通过对该文档的阅读,可以更好的使用STM32的库函数进行学习和项目开发。之所以选用1.4.0版本进行翻译和说明,因为该版本群众基础较好,有大量的使用者和相关资料。后续也会推出新版本库和CubeMX库的翻译和说明,希望大家喜欢和支持。如果大家觉得文档有什么问题,麻烦请提出,如果确认问题存在,作者会及时修改。 文档约定: Ø 小贴士:蓝色字体 Ø 宏定义:土红色字体 本库模块相关术语说明: RCC:stm32的时钟控制器 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) 内部和外部时钟,PLL,CSS和MCO配置函数 这个部分提供的函数允许去配置内部和外部时钟,PLL,CSS和MCO管脚,以下进行说明 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函数使用。 函数参数说明:无 函数返回值说明: SUCCESS:HSE启动成功,状态稳定。 ERROR:HSE启动失败。 4. void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue) 函数解释:调整内部高速时钟的校准值。 注意:该校准值主要用于补偿不同的电压和温度对内部HSIRC频率的影响。 函数参数说明:HSICalibrationValue:需要调整的校准值 函数返回值说明:无 5. void RCC_HSICmd(FunctionalState NewState) 函数解释:使能或者禁止内部高速时钟HSI。 注意1:当进入停止(STOP)或者待机(STANDBY)模式,HSI会停止。在从复位启动,从STOP和STANDBY模块唤醒或者使用HSE直接或者间接作为系统时钟失败后(如果使能安全系统时钟),使用HSI时钟(由硬件使能)。 注意2:当HSI作为系统时钟源,HSI是不能被停止的。因此,你必须选择另外一个时钟源,然后停止HSI。 注意3:使能HSI以后,软件必须等待HSIRDY标志位置位,以确保HSI时钟稳定,并且可以作为系统时钟源使用。 函数参数说明:NewState:HSI新的状态,这个参数有以下两个宏定义 ENABLE:使能HSI DISABLE:禁止使用HSI 注意:当HSI停止,在6个HSI振荡器周期后,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) |
|
相关推荐
|
|
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11982 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 00:19 , Processed in 0.575554 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号