之前的推文已经将STM32网络的三大件讲完了

①PHY接口,《STM32网络电路设计》

②MAC控制器,《STM32网络之MAC控制器》

③DMA控制器,《STM32网络之DMA控制器》

本文将聚焦STM32网络的中断系统,简单聊一下中断系统和用法。

01、简介

网络中断向量:一个用于正常的网络操作,另一个当它映射到EXIT线路19的时候,用于以太网唤醒事件(带有唤醒帧或魔术数据包检测)

第一个网络中断保留为MAC和DMA产生的中断,正如在MAC中断和DMA中断部分。

第二个中断保留为唤醒事件时PMT产生的中断。唤醒事件对EXIT线路19的映射是造成STM32F20X和STM32F21X退出低功耗模式,并且产生中断。

当映射到EXIT线路19的以太网唤醒事件发生和,MACPMT中断使能并且有一个上升沿的EXIT线路19中断也被使能,他们都能唤醒中断。

可使用看门狗定时器(请参见ETH_DMARSWTR 寄存器)灵活控制RS 位(ETH_DMASR寄存器)。当此看门狗定时器使用非零值编程时,看门狗定时器激活,只要RXDMA完成发送一个接收的数据帧到系统存储,在没有触发接收状态,因为它不是使能的在相应的接收描述符(RDES1[31])(也就是:未在相应接收描述符(RDES1[31])使能接收状态)。当定时器按照编程值运行时,RS位被置1并且中断发生,如果ETH_DMAIER寄存器中相应位使能。看门狗定时失效在运行前,当数据帧被发送到内存,并且RS置1,因为定时器被使能为描述符。

注意:

读取PMT 控制和状态寄存器会自动将接收的唤醒帧和接收的魔术数据包PMT 中断标志清零。但是,由于用于这些标志的寄存器位于 CLK_RX域,因此在固件能发现此更新前可能有显著的延迟。当 RX 时钟很慢(在10 Mbit 模式)和当AHB 总线为高频时,该延迟会特别长。

由于从PMT 到CPU 的中断请求基于CLK_RX 域中的相同寄存器,所以即使在读取PMT_CSR 之后,CPU也可能错误地第二次调用中断例程。因此,可能需要固件轮询接收的唤醒帧和接收的魔术数据包位,并仅在发现它们都为‘0’时退出中断服务程序。

02、代码

STM32的网络中断,其实准确来说应该是网络专用的DMA的中断,网络中的数据包符合1518规则,也就是说是1460字节,MAC接收的数据包是2K字节,网络上每一个数据包MAC接收完都会产生中断。

官方代码是这样的

明显是使用查询的方式,没有使用到中断。

中断的使用方式如下:

配置网络中断

注释掉官方提供的查询部分的代码。

我们使用中断形式之后,代码是

这样的代码,我们在接收小于一个DMA描述符数据大小的数据没有问题,很流畅。

DMA描述符部分内容请看《STM32网络之DMA控制器》。

在接收大量数据的时候就会出现错误,接收的会缓慢,接收的过多会死机

解决办法是:

把if修改成while

这样就把整个数据包接收完之后再跳出中断,这样就解决了这个问题。

点击查看本文所在的专辑,STM32F207教程

关注公众号,第一时间收到文章更新

STM32网络之中断相关推荐

  1. STM32单片机外部中断配置讲解

    2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...

  2. STM32网络电路设计

    目录 01.MII接口方案 02.RMII接口方案 2.1.外部晶振(2个晶振) 2.2.外部晶振(1个晶振) 2.3.需要强力PHY 在之前的推文中<STM32网络之SMI接口>< ...

  3. stm32: 串口空闲中断的实现(HAL库)

    STM32利用串口空闲中断来分包(HAL库) 文章目录 STM32利用串口空闲中断来分包(HAL库) 1. 开发环境 2. 串口中断接收的问题和解决办法 3. 串口空闲中断分包的原理 4. STM32 ...

  4. stm32入门——定时器中断和中断优先级简介

    stm32入门--定时器中断 产生定时中断是定时器的用法之一,与定时器用来进行PWM输出和输入捕获相比,定时器中断更容易理解.掌握. 原理简介 使用通用定时器进行中断的原理,其实和开发板Systick ...

  5. 深入浅出地理解STM32中的中断系统——从原理到简单工程示例——保姆级教程

    深入浅出地理解STM32中的中断系统 一.什么是中断?什么是异常? 二.如何管理中断? 三.NVIC 1 NVIC 特点 2 中断优先级 (1) 优先级分组 3 中断向量表 4 中断服务函数 (1)中 ...

  6. stm32学习笔记-中断系统

    文章目录 问题引入 1.中断系统概述. 1.1 为什么要中断(中断意义) 中断和轮询比较: 1.2 中断处理过程 1.3 中断笔试题 1.4 中断服务函数 2.STM32中断的体系结构. 2.1 结构 ...

  7. STM32系列 USART中断接收 注意事项 (USART_IT_ORE)

    ZHL学习笔记 STM32系列USART中断接受注意事项 之 USART_IT_ORE USART_IT_ORE含义:接收溢出,尚未处理上一拍就迎来了下一拍数据: USART_IT_ORE使能:该中断 ...

  8. 初学STM32之定时器中断

    初学STM32之定时器中断 一.定时器概述 1.定时器的分类 STM32F10x系列总共最多有8个定时器分为高级定时器,通用定时器和基本定时器.三种定时器的主要区别如下图所示: 本文章仅介绍通用定时器 ...

  9. STM32定时器之中断延时

    STM32定时器之中断延时 STM32的定时器有通用定时器.基本定时器.高级定时器,我么们将选用基本定时器做一个简单的中断延时实验. 实现现象 在main中用一秒打印一个字符"main&qu ...

最新文章

  1. 原生 Java 客户端进行消息通信
  2. 【深度学习】深入浅出transformer解决并行计算问题
  3. 项目小白斩获蘑菇街暑期实习offer的面试过程
  4. 利用Hadoop Streaming处理二进制格式文件
  5. mysql utf8mb4 配置_MariaDB(Mysql)配置utf8mb4编码
  6. cpu线程_记w3wp占用CPU过高解决过程Dictionary线程安全
  7. 通过 Go 语言来实现 DDD 分层设计,美滋滋!
  8. Bitbucket Cloud的新IP地址
  9. 计算机辅助设计利用计算机的,计算机基础知识:计算机辅助设计
  10. 测试linux内核工具,多种测试linux内核的方法
  11. 锐捷交换机配置手册完整
  12. Python分解质因数
  13. java如何编写响应_Java开发人员的反应编程介绍 - Fernando Almeida
  14. python定义一个整数变量_Python变量和数据类型详解
  15. (leetcode)1723. 完成所有工作的最短时间 -2021/5/8
  16. [SPRD CAMERA] 4 HAL Camera open流程一
  17. CCF CSP 公共钥匙盒
  18. 为什么会有视频号?朋友圈还不够吗?
  19. 华为手机怎样无线与电脑连接电脑连接服务器,华为手机助手如何无线连接电脑...
  20. 「兔了个兔」玉兔踏青,纯CSS实现瑞兔日历(附源码)

热门文章

  1. 微信小程序和vue双向绑定哪里不一样_浅析Vue 和微信小程序的区别、比较
  2. 的garch预测_精品细读|基于隐含波动率、已实现波动率和GARCH模型波动率的预测...
  3. Java 算法 复数求和
  4. HTTP,TCP, socket,RPC 与gRPC都是啥?
  5. html align 属性,align-content
  6. pandas 检查某个元素是否在index中
  7. python 识别 None,NaN,null,‘‘,‘ ‘ 等无意义的值
  8. xilinx芯片管脚使用限制_【转载】 Xilinx FPGA配置的一些细节
  9. python googletrans_Python使用googletrans报错的解决方法
  10. 中3d库后接负载_500W电源横评:交叉负载放倒3款产品