STM32F407系统时钟频率设置揭秘:HSI与HSE的较量
需积分: 50 113 浏览量
更新于2024-09-09
1
收藏 185KB DOC 举报
本文主要讨论的是STM32F407微控制器启动后系统时钟频率设定的问题。STM32F407是STM32系列中的一个型号,它通常配备有多种可选的时钟源,如HSE(High Speed External Oscillator,高速外部振荡器)和HSI(Internal High Speed RC Oscillator,内部高速RC振荡器)。在STM32的设计中,系统时钟频率的设置通常并不局限于启动文件中的SystemInit函数,尽管这个函数在早期版本中可能被用于基本的初始化,包括时钟源的选择。
文章作者指出,虽然传统的做法可能是认为在SystemInit中设置常用时钟频率(如72M或168M),但现代STM32项目中,这种设置可能已经转移到了更底层的配置或者硬件层面上,以利用HAL库(Hardware Abstraction Layer,硬件抽象层)提供的高级功能。HAL库允许开发者通过预定义的API进行配置,减少了直接操作寄存器的复杂性,但同时也可能导致对时钟频率设置的隐式处理。
在实际测试中,作者使用STM32F407的板子,HSE晶振为8M,HSI为16M,发现即使没有在SystemInit函数中显式设置时钟频率,程序仍然能够运行。这表明,在默认情况下,STM32F407会自动根据硬件配置选择合适的时钟源,比如HSI,作为启动时钟。然而,为了精确控制时钟频率,特别是当使用自定义配置或者需要特定性能时,用户需要深入理解硬件文档,可能涉及到MCU的数据手册中的时钟管理章节,以及HAL库的相关配置选项。
文章的测试部分分为两步:首先,确保程序可以正常运行,即使只设置了简单的变量fre1;然后,通过检查默认时钟源来确定系统时钟频率。通过这些测试,作者得出结论,虽然SystemInit函数不再直接负责时钟频率设置,但系统仍能基于硬件配置自动运行。对于高级开发者来说,深入理解时钟管理机制,无论是标准库还是HAL库,都是确保稳定性能和优化资源利用的关键。
本文主要关注的是STM32F407在启动后如何自动选择和配置时钟源,以及如何在不使用标准库的情况下,通过寄存器编程或者HAL库管理时钟频率。对于想要深入了解STM32硬件和底层编程的读者,这是一个很好的参考案例。
2012-05-24 上传
2019-05-13 上传
2022-09-21 上传
2021-10-04 上传
2022-09-23 上传
2021-10-16 上传
2022-07-15 上传
2023-07-29 上传
dengjsong
- 粉丝: 7
- 资源: 47
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍