当前位置: 首页 > backend >正文

嵌入式原理与应用篇---常见基础知识(10)

一、STM32时钟源HSI\HSE\LSI\LSE的含义

STM32 微控制器的时钟系统管理着整个芯片的时序和性能,其核心由四种不同的时钟源构成。下面为你详细介绍这四种时钟源的含义:

高速内部时钟(HSI,High-Speed Internal)

  • 含义:HSI 是 STM32 芯片内部的 RC 振荡器产生的时钟信号。
  • 特点
    • 频率:通常为 8MHz 或 16MHz(不同型号可能有差异)。
    • 优势:无需额外的外部元件,降低了硬件成本和电路板空间。
    • 不足:精度不如外部时钟源,容易受温度和电压波动的影响。
  • 应用场景:适用于对时钟精度要求不高的场合,可作为系统启动时的默认时钟源,也可在低功耗模式下使用。

高速外部时钟(HSE,High-Speed External)

  • 含义:HSE 是由外部晶振或时钟源提供的高速时钟信号。
  • 特点
    • 频率范围:通常为 4MHz~26MHz,具体取决于芯片型号和外部晶振的选择。
    • 优势:精度高、稳定性好,能为系统提供更精确的时钟基准。
    • 不足:需要额外的晶振或时钟源,增加了硬件成本和电路板设计复杂度。
  • 应用场景:是大多数 STM32 应用的首选时钟源,常用于需要高精度时钟的场合,如 USB 通信、以太网、ADC 采样等。

低速内部时钟(LSI,Low-Speed Internal)

  • 含义:LSI 是 STM32 芯片内部的 RC 振荡器产生的低速时钟信号。
  • 特点
    • 频率:约为 32kHz(不同型号可能有差异)。
    • 优势:无需外部元件,功耗低。
    • 不足:精度较低,受温度和电压影响较大。
  • 应用场景:主要用于实时时钟(RTC)和独立看门狗(IWDG)等对时钟精度要求不高的低速外设。

低速外部时钟(LSE,Low-Speed External)

  • 含义:LSE 是由外部晶振提供的低速时钟信号。
  • 特点
    • 频率:标准值为 32.768kHz,这是因为该频率便于通过分频得到 1Hz 的精确时钟,适合用于计时。
    • 优势:精度高,能提供稳定的时钟基准。
    • 不足:需要额外的晶振,增加了成本和电路板空间。
  • 应用场景:主要用于实时时钟(RTC),为系统提供精确的时间基准,也可用于需要低功耗的场合。

总结

这四种时钟源在 STM32 中各自发挥着不同的作用,用户可以根据实际需求灵活配置。一般来说,HSE 和 LSE 提供高精度时钟,适用于对时序要求严格的应用;而 HSI 和 LSI 则具有无需外部元件、启动速度快的优点,适用于对成本和功耗敏感的场景。

二、STM32每个中断向量关于优先级的两个属性的含义(抢占优先级、响应优先级)

STM32 的中断系统中,每个中断向量有两个与优先级相关的属性:抢占优先级(Preemption Priority)子优先级(Subpriority),它们共同决定了中断的响应顺序。以下是这两个属性的具体含义和作用:

1. 抢占优先级(Preemption Priority)

  • 含义
    抢占优先级决定了高优先级中断是否可以打断正在执行的低优先级中断。当一个中断正在处理时,若有更高抢占优先级的中断到来,系统会暂停当前中断的执行,转去处理更高优先级的中断(即中断嵌套)。处理完毕后,再返回继续执行被打断的中断。

  • 特点

    • 数值越小,优先级越高。例如,抢占优先级为 0 的中断可以抢占任何其他抢占优先级(如 1、2 等)的中断。
    • 抢占优先级相同的中断之间不能互相嵌套,即使它们的子优先级不同。

2. 子优先级(Subpriority)

  • 含义
    子优先级(也称响应优先级)决定了抢占优先级相同的多个中断同时发生时的响应顺序。子优先级高的中断会优先得到处理,但不能抢占正在执行的同级或低级中断

  • 特点

    • 数值越小,优先级越高。例如,子优先级为 0 的中断会优先于子优先级为 1 的中断执行(前提是它们的抢占优先级相同)。
    • 若多个中断的抢占优先级和子优先级均相同,则根据中断向量表的固定顺序决定响应顺序(硬件默认优先级)。

优先级分组(Priority Grouping)

STM32 通过优先级分组机制动态分配抢占优先级和子优先级的位数。用户可以通过修改NVIC_PriorityGroupConfig()函数配置分组方式,将 16 个优先级位(0~15)划分为抢占优先级和子优先级两部分。常见的分组方式如下:

分组方式抢占优先级位数子优先级位数抢占优先级范围子优先级范围
Group 00 位4 位无(固定为 0)0~15
Group 11 位3 位0~10~7
Group 22 位2 位0~30~3
Group 33 位1 位0~70~1
Group 44 位0 位0~15无(固定为 0)

示例说明

假设配置为Group 2(2 位抢占优先级 + 2 位子优先级):

  • 中断 A:抢占优先级 = 1,子优先级 = 2
  • 中断 B:抢占优先级 = 0,子优先级 = 3
  • 中断 C:抢占优先级 = 1,子优先级 = 1

  1. 中断嵌套规则

    • 中断 B 的抢占优先级更高(0 < 1),因此中断 B 可以抢占中断 A 或 C
    • 中断 A 和 C 的抢占优先级相同(均为 1),不能互相嵌套
  2. 同时触发时的响应顺序

    • 若中断 B 和 A 同时触发,先响应 B(抢占优先级更高)。
    • 若中断 A 和 C 同时触发,先响应 C(子优先级 1 < 2)。

应用场景

  • 抢占优先级:适用于需要立即响应的紧急任务(如系统复位、硬件故障处理)。
  • 子优先级:适用于优先级相同但需要确定执行顺序的任务(如多个传感器数据采集)。

配置代码示例

以下代码展示了如何配置中断优先级:

// 设置优先级分组为Group 2(2位抢占 + 2位子优先级)
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 配置USART1中断(抢占=1,子=2)
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);// 配置TIM2中断(抢占=0,子=3)
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3;
NVIC_Init(&NVIC_InitStruct);

通过合理配置这两个优先级属性,开发者可以灵活控制 STM32 中断的响应和处理顺序,满足不同应用场景的需求。

http://www.xdnf.cn/news/14788.html

相关文章:

  • 前后端Dockerfile
  • Spring生态:云原生与AI的革新突破
  • python环境快速搭建
  • Windows11系统中安装docker并配置docker镜像到pycharm中
  • 企业自建云概念解读|私有云、专有云、混合云、分布式云、企业云
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • JavaEE初阶第五期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(三)
  • Windows环境下Docker容器化的安装与设置指南
  • 时序数据库IoTDB监控指标采集与可视化指南
  • 基于MATLAB的SVM支持向量机的乳腺癌分类方法应用
  • 现代 JavaScript (ES6+) 入门到实战(六):异步的终极形态 - async/await 的优雅魔法
  • HTTP中常见的Content-Type
  • HybridCLR热更新实例项目及改造流程
  • 现代 JavaScript (ES6+) 入门到实战(五):告别回调地狱,Promise 完全入门
  • 免费SSL证书一键申请与自动续期
  • STM32——HAL库总结
  • 【AGI】Qwen VLo:多模态AI的范式重构与AGI演进关键里程碑
  • mac触摸板设置右键
  • 【HuggingFace】模型下载至本地访问
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(三)- 职位数据统计分析
  • 条件概率:不确定性决策的基石
  • C#写破解rar文件密码例程
  • 【硬核数学】10. “价值标尺”-损失函数:信息论如何设计深度学习的损失函数《从零构建机器学习、深度学习到LLM的数学认知》
  • Android大图加载优化:BitmapRegionDecoder深度解析与实战
  • IDE/IoT/实践小熊派LiteOS工程配置、编译、烧录、调试(基于 bearpi-iot_std_liteos 源码)
  • 马斯克的 Neuralink:当意念突破肉体的边界,未来已来
  • 同步日志系统深度解析【链式调用】【宏定义】【固定缓冲区】【线程局部存储】【RAII】
  • 《汇编语言:基于X86处理器》第5章 过程(2)
  • C# 委托(为委托添加方法和从委托移除方法)