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

STM32F103_LL库+寄存器学习笔记11 - 串口收发的中断优先级梳理

导言


推荐的STM32 USART+DMA 中断优先级设置(完整方案):
以你的STM32F103 USART1 + DMA实例为例:
在这里插入图片描述

推荐中断优先级设置中断优先级
USART1空闲中断(接收相关)优先级0
DMA1通道5接收中断(半满/满传输)优先级0
DMA1通道4发送中断(发送完成)优先级2
NVIC_SetPriority(USART1_IRQn, 0);         // USART空闲中断最高
NVIC_SetPriority(DMA1_Channel5_IRQn, 0);  // DMA接收通道跟空闲中断一样高
NVIC_SetPriority(DMA1_Channel4_IRQn, 2);  // DMA发送通道最低

接收端的所有中断(USART空闲+DMA接收)优先级均高于发送端(DMA发送)。另外,如果有其他实时性要求更高的外设,需要把串口通讯的中断优先级调低的话,也要保证规则:USART空闲中断 = DMA接收通道中断 > DMA发送通道中断。

一、先明确“优先级”高低的含义


中断优先级高意味着当两个中断同时发生时,优先级高的中断会优先被CPU响应和处理。

二、为什么接收中断的优先级要比发送的中断优先级要高?


  1. 接收数据存在丢失风险
    • 数据接收缓冲区大小有限,若Rx数据未及时取出,容易造成后续数据覆盖或丢失。因此,接收中断必须尽快响应并处理。 比如,若外部设备持续发送数据,而你未及时处理接收中断,数据将不断积压,可能导致数据缓冲区溢出。反之发送中断慢一点响应,一般也只是稍微影响数据发送速度,并不会导致致命问题。
  2. 发送中断的延迟容忍度较高
    • 发送数据通常由程序控制,主动权在STM32手中。稍微延迟发送(即发送中断的响应慢一些)不会对系统造成严重影响,只是数据发送节奏稍慢而已,不会引发数据错位、丢失。发送数据被短暂延迟,只会导致数据发送稍慢,不影响数据完整性。
  3. 工业级通信协议与实践经验
    • 在实际的工业设备中,接收数据通常比发送数据具有更高的实时性要求。接收端数据若未及时处理,容易影响整个系统通信状态。而发送端稍有延迟影响并不严重。

http://www.kler.cn/a/612775.html

相关文章:

  • HTML跑酷
  • 活动预告丨CCF开源发展委员会“开源高校行”第三十三期—湖南师范大学站
  • 在Linux系统中将html保存为PNG图片
  • ModuleNotFoundError: No module named ‘talib‘
  • 基于C++面向对象实现(控制台)宠物小精灵对战系统
  • 每天认识一个设计模式-桥接模式:在抽象与实现的平行宇宙架起彩虹桥
  • Java StringUtils工具类常用方法详解
  • 7-项目负责人-添加产品
  • Linux驱动开发 中断处理
  • Python数据模型(延伸阅读)
  • 外星人入侵(python设计小游戏)
  • PS 切割图片
  • C语言中的位域:节省内存的标志位管理技术
  • 数据结构和算法简介 以及 顺序表
  • 如何使用RK平台的spi驱动 spidev
  • 自动化发布工具CI/CD实践Jenkins各配置功能介绍和管理!
  • 质检LIMS系统在化肥生产企业的应用 化肥质量管理的数字化中枢
  • Python学习第二十六天
  • Spring Data审计利器:@LastModifiedDate详解!!!
  • PDF处理控件Spire.PDF系列教程:Java 给现有的 PDF 文档添加页眉页脚