STM32怎么选择内部晶振
STM32怎么选择内部晶振
更多
在 STM32 微控制器中选择和使用内部晶振(时钟源)主要涉及配置时钟系统,使其使用内部生成的时钟信号(HSI, MSI, LSI)作为系统时钟源或其他外设的时钟源。以下是详细步骤和注意事项:
核心步骤:
-
了解内部时钟源类型:
- HSI (High-Speed Internal oscillator): 高速内部RC振荡器。
- 频率:通常是 8 MHz (某些型号可能不同,如16MHz或精度可调)。
- 精度:相对较低(典型值 +/-1%,受温度和电压影响)。
- 用途:可作为系统时钟源、PLL输入源等。
- MSI (Multi-Speed Internal oscillator): 多速内部RC振荡器(主要存在于STM32L/L4/WB/WL等低功耗系列)。
- 频率:可在多个档位间切换(例如从100kHz到48MHz)。
- 精度:不同档位精度不同,通常比HSI更灵活但精度也有限。
- 用途:低功耗应用的核心时钟源,可动态调整速度和功耗。
- LSI (Low-Speed Internal oscillator): 低速内部RC振荡器。
- 频率:通常是 32 kHz 或 40 kHz (具体看型号)。
- 精度:很低。
- 用途:主要用于独立看门狗、RTC(实时时钟)或低功耗模式下的唤醒时钟源。一般不用作系统主时钟(SYSCLK)。
- HSI (High-Speed Internal oscillator): 高速内部RC振荡器。
-
配置时钟树: 这是关键步骤。你需要配置系统选择哪个内部时钟源作为 系统时钟 (SYSCLK) 的来源。这通常通过配置 RCC (Reset and Clock Control) 相关的寄存器来实现。
- 使用STM32CubeMX (推荐):
- 打开STM32CubeMX,创建对应你芯片型号的新工程。
- 在图形界面中,导航到 "Clock Configuration" 标签页。
- 找到标注着 "System Clock Mux" 或类似名字的选择框(通常在时钟树图的顶部)。
- 点击这个选择框,在下拉菜单中选择
HSI或MSI(取决于你的芯片和需求)。- 如果选择
MSI,通常还需要在下面的 MSI Range 设置中选择你需要的具体频率。
- 如果选择
- 配置其他必要的分频器(AHB Prescaler, APB1 Prescaler, APB2 Prescaler)以获得所需的外设时钟频率。
- 配置
LSI:通常在 Pinout & Configuration -> System Core -> RCC 页面里,找到 Low Speed Clock (LSE/LSI) Source,选择LSI。这个配置主要是为了启用LSI供看门狗或RTC使用。 - 生成初始化代码(Project -> Generate Code)。生成的代码(主要在
SystemClock_Config()函数中)会自动配置好RCC寄存器,将系统时钟切换到选择的内部时钟源。
- 使用标准外设库/HAL/LL库:
- 在主程序初始化阶段(
main()函数开始处,或专门的时钟配置函数中),调用库函数配置RCC。 - 启用目标内部振荡器:
- HSI:
__HAL_RCC_HSI_ENABLE()(HAL) 或RCC_HSICmd(ENABLE)(StdPeriph) 或设置RCC_CR寄存器中的HSION位。 - MSI:
__HAL_RCC_MSI_ENABLE()(HAL) 或设置RCC_CR寄存器中的MSION位,并配置RCC_CR中的MSIRANGE选择频率(需查手册)。 - LSI:
__HAL_RCC_LSI_ENABLE()(HAL) 或RCC_LSICmd(ENABLE)(StdPeriph) 或设置RCC_CSR寄存器中的LSION位。
- HSI:
- 等待振荡器稳定:
- HSI: 使用
__HAL_RCC_HSI_GET_FLAG()或轮询RCC_CR中的HSIRDY位。 - MSI: 轮询
RCC_CR中的MSIRDY位。 - LSI: 轮询
RCC_CSR中的LSIRDY位。
- HSI: 使用
- 切换系统时钟源:
- 设置
RCC_CFGR寄存器中的SW位选择源:00: HSI selected as system clock01: HSE selected as system clock10: PLL selected as system clock11(对于带有MSI的型号): MSI selected as system clock (注意:标准F1/F4等没有MSI,这个位可能保留或用于其他含义)。
- 使用库函数:
__HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_HSI)(切换到HSI) 或__HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_MSI)(切换到MSI)。
- 设置
- 等待时钟源切换完成: 轮询
RCC_CFGR中的SWS位,直到它显示当前系统时钟源确实是你选择的HSI或MSI。 - 配置其他分频器(
RCC_CFGR中的 HPRE, PPRE1, PPRE2 等位)。
- 在主程序初始化阶段(
- 使用STM32CubeMX (推荐):
-
验证时钟配置:
- 使用调试器(如ST-Link)读取
RCC_CFGR寄存器,检查SWS位确认当前系统时钟源。 - 如果开启了MCO(微控制器时钟输出)功能,用示波器测量MCO引脚输出的频率是否与预期相符。
- 在代码中读取
SystemCoreClock变量(这个变量通常在时钟配置后由库函数更新)或HAL_RCC_GetSysClockFreq()函数获取系统时钟频率。 - 观察依赖时钟的外设(如UART波特率、定时器计数等)是否工作正常。
- 使用调试器(如ST-Link)读取
重要注意事项:
- 精度限制: 内部RC振荡器(HSI, MSI, LSI)的频率精度显著低于外部晶振(HSE)。HSI/MSI可能在±1%到±3%甚至更高范围漂移(受温度、电压、批次影响)。如果你的应用对时钟精度要求很高(如高速USB、高精度定时、精确UART波特率没有自动波特率检测、特定通信协议),强烈建议使用外部晶振(HSE)。
- 启动默认: 大多数STM32芯片复位后默认使用HSI作为系统时钟源(频率可能经过内部预分频,如F1默认是8MHz HSI经过2分频得到4MHz SYSCLK)。你的初始化流程通常就是从HSI开始,然后决定是否切换到MSI(如果支持)或PLL(用HSI或HSE作为输入)或直接保持HSI。
- PLL输入: HSI/MSI 都可以作为PLL的输入源,倍频后获得更高的系统时钟频率。
- 低功耗应用: MSI 是STM32L/L4等低功耗系列的关键特性,允许在运行模式和低功耗模式之间高效切换时钟速度和功耗。LSI则常用于维持看门狗和RTC在待机/停止模式下运行。
- 代码位置: 时钟配置代码必须在任何依赖精确时钟的外设初始化之前执行。
- 查阅手册: 务必仔细查阅你所使用的具体STM32型号的《参考手册》(Reference Manual) 中的RCC章节(Reset and Clock Control)。 不同系列(F0, F1, F4, L0, L4, G0, H7等)的RCC寄存器和配置细节存在差异。CubeMX通常会根据型号为你处理这些差异。
- CubeMX优势: 对于不熟悉复杂时钟树的用户,强烈推荐使用STM32CubeMX。它的图形化界面能直观地展示时钟树结构,自动计算分频系数,避免配置错误,并生成正确的初始化代码。
总结选择内部晶振的流程:
- 确定需求: 是否需要高精度?是否需要低功耗优化(考虑MSI)?只需要看门狗/RTC(考虑LSI)?
- 查看手册: 确认芯片支持哪些内部时钟源(HSI, MSI)及其特性(频率、精度)。
- 配置工具:
- 首选STM32CubeMX: 在"Clock Configuration"中选择
HSI或MSI作为系统时钟源,配置分频,启用LSI(如果需要),生成代码。 - 手动编码: 使用HAL/LL/StdPeriph库函数或直接操作寄存器:使能振荡器 -> 等待就绪 -> 切换系统时钟源 -> 等待切换完成 -> 配置分频器。
- 首选STM32CubeMX: 在"Clock Configuration"中选择
- 验证: 通过寄存器读取、MCO输出、外设工作状态或库函数获取的时钟频率验证配置是否正确生效。
选择内部晶振主要是为了简化设计(省去外部晶振元件)、降低成本、减小PCB面积或在特定低功耗场景下使用。务必牢记其精度劣势,根据应用的实际要求做出权衡。
关于STM32 RTC时钟使用内部/外部晶振的切换方法
对于使用STM32单片开发项目的同志,经常会使用到STM32的RTC功能,而在配置RTC的功能时需要配置晶
资料下载
h1654155275.3132
2021-11-23 18:07:05
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机