STMCU小助手
发布时间:2022-7-29 16:40
|
前言 STM32H7 以太网的 MMC(MAC management counter)中断是个有点特别的中断。特殊之处在于它是默认使能。如果我们在代码里不针对 MMC 进行相关处理,就会造成一些异常现象。我们先来看一个真实的客户案例。" w4 t: M) Z$ `6 ~$ O) D 客户案例" a2 b h6 k/ Q( R 客户使用 STM32H750 作为主控,与其他设备之间进行以太网通讯。客户在压力测试中发现: • 设备从第一次通讯开始,累计 7 到 8 天,就会发现 STM32H750 不再响应用户的请求。 • 客户通过使用 IDE 和添加辅助代码可以发现,STM32H750 会不停地进入以太网中断,导致所使用的操作系统无法进行有效的系统调度。 • 问题发生后,客户无论拔下网线或者再次连上网线,STM32H750 依然会不停的进入以太网中断。 • 客户尝试使用 IDE 查看所有以太网寄存器,会发现有时侯能够让系统恢复正常。 5 J: n9 ` }2 @& K- _6 F 分析+ h1 v; f4 V3 L4 ~ 系统不停的进入以太网中断,说明某个中断在被某种条件下被不停的触发,或者中断触发后没有被处理。进一步,当系统出现异常状况后,拔掉网线,中断依然不断的进入,说明该异常并不需要外界不停的输入,也就说明可能是中断没有被处理所导致。所以,客户首先想到的是补全所有使能的以太网中断的清除代码。然而,客户再次测试,却发现累计 7 到 8 天,问题再次发生。 在这种情况下,为了深刻了解该状况的原因,我们建议客户,抓取异常时的寄存器现场,然后和正常状态时的寄存器进行对比。我们在设备未发生异常前,抓取了以太网的三组寄存器 DMA、MTL 和 MAC。同时,我们在发生异常后,在同一设备再次进行这三组寄存器的抓取。然后,我们使用文本比较工具,对两次的寄存器进行比较。我们很快就可以发现,MAC 寄存器存在值得关注的差异。MAC 寄存器对比如下:/ G0 ^1 s M% v( A# h; b 4 L4 z7 {# d7 n( I% Z5 {
我们可以看到在系统异常情况下下,MMCRXIS 和 MMCIS 被置位了。 我们从参考手册 RM0433 (STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm®-based 32-bit MCUs)(直接搜索关键子 MMCRXIS)中可以看到 MMCRXIS 和 MMCIS 表示系统收到了 MMC 接收中断。" }' Y( @1 p2 Z3 ? n4 n- J. n& X8 E; N3 d- `5 x$ p0 I , Z- w( I) |$ w& q. n2 f+ P* W
. v9 G$ q {# T, s2 x( I5 k+ I* z 1 }* L; \; T: a# e9 q 0 w W7 X, w+ v# j, z 在两次三组寄存器的比较中,我们看到系统生成了 MMC 接收中断(MMC_RX_INTERRUPT 中RXUCGPIS)。这个符合前文的 MMCRXIS 和 MMCIS 的状态。8 O0 o' @, x$ Y6 m 完整版请查看:附件. f5 r, ~/ U0 v0 X; J( M- j |
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
【STM32H735G-DK测评】ADC3+TIMER1+DMA 采样模拟信号
【STM32H735DK测评】Ethernet+lwip DHCP获取IP地址
STM32H743基于CubeMx5.0配置手册
【STM32H735G-DK测评】lvgl移植
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
【福利三:逢7发帖赢大礼】使用MPU6050模块、img_dsc、img_btn机制实现一些简单有趣的动画效果
【福利三:逢7发帖赢大礼】使用arc弧形拉条控件控制PWM舵机及使用SPI3接口操作NRF24L01模块进行无线通信
【福利三:逢7发帖赢大礼】调试nucleo-WBA65RI工程测试样板的一些心得
【福利三:逢7发帖赢大礼】lv_timer和BME680实现温度、湿度、气压数据读取
微信公众号
手机版