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

嵌入式原理与应用篇---常见基础知识(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.lqws.cn/news/587665.html

相关文章:

  • 实战案例:使用C#实现高效MQTT消息发布系统
  • w-笔记:uni-app的H5平台和非H5平台的拍照识别功能:
  • Python 库 包 软件开发工具包(SDK) openai
  • AlpineLinux安装docker
  • STM32——DAP下载程序和程序调试
  • 初始化挂载Linux数据盘
  • Android 中 使用 ProgressBar 实现进度显示
  • Intel oneAPI工具集全面解析:从环境配置到流体动力学模拟优化
  • try-catch-finally 如何使用?
  • 《JMS 消息重试机制与死信队列配置指南:以 IBM MQ 与 TongLinkQ 为例》
  • 大模型在多发性硬化预测及治疗方案制定中的应用研究
  • 选择 PDF 转 HTML 转换器的 5 个关键特性
  • MySQL:CRUD操作
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 在vue当中使用动画
  • Oracle 树形统计再进阶:类型多样性与高频类型分析(第三课)
  • Monad:函数式编程中的 “容器模式”
  • 六自由度按摩机器人 MATLAB 仿真
  • Openssl升级
  • SQL规范
  • FastAPI 学习(二)
  • 在Flutter中生成App Bundle并上架Google Play
  • android BottomSheet及AlertDialog的几种material3 常见ui的用法
  • WSL/Linux 常用命令速查
  • Windows 11 安装 Linux 系统详细教程
  • docker安装RabbitMQ,创建RabbitMQ容器以及docker-compose.yml配置
  • 博图SCL编程:结构体(STRUCT)使用详解与实战案例
  • 英国研究团队启动合成完整人类基因组的前沿项目
  • 解决VSCode打开最近项目后终端shell不正常的问题
  • 数据结构入门-图的基本概念与存储结构