STM32H7

STM32H7为例来介绍下主要的硬件安全属性。

1.jpg

双看门狗

独立看门狗和窗口看门狗

看门狗是我们常用到的针对CPU运行状态监测的手段之一。它本质上就是一个定时器,启动之后,需要不断的去刷新(我们通常把这个动作叫做“喂狗”),否则当看门狗的定时器减到规定的值后,就会引起系统复位。我们可以利用它来检测程序是否跑飞,并通过芯片复位,来让系统恢复到正常状态。

STM32 MCU提供两个看门狗,独立看门狗IWDG和窗口看门狗WWDG。

2.jpg

从独立看门狗的名字可以看出,它的特点是拥有独立于系统时钟的时钟。独立看门狗使用LSI时钟,这样使得它与系统时钟分离开,即使系统时钟出现故障,独立看门狗也能正常工作。独立看门狗还支持“硬件看门狗”功能,通过选项字使能该功能后,MCU只要一上电,就会启动运行,开启对系统的保护。

窗口看门狗使用的是系统时钟,它的特点是必须在一个窗口时间内完成“喂狗”的动作,否则就会引起系统复位,所以窗口看门狗对“喂狗”的要求更精确了。窗口看门狗还有一个EWI(early wakeup interrupt)的功能, 这个功能使能后,可以在窗口看门狗引起系统复位之前,先产生一个EWI中断,在这个中断里,给了系统软件一个机会去完成一些必要的安全动作或者数据保存的工作。部分MCU系列的窗口看门狗也支持“硬件看门狗”的功能。

独立看门狗和窗口看门狗都支持在调试模式下“冻结”计数,以及在低功耗模式下继续工作的功能。

电源监测

关于电源检测,STM32MCU的上电复位POR、掉电复位PDR、欠压复位BOR及可编程电压监测(PVD),模拟电压监测(AVD)和电池电压监测等功能可以用来检测VDD,VDDA和电池电压是否在正常的电压范围内。

时钟安全系统CSS

关于时钟的检测,MCU内部的时钟安全系统(CSS)可以用来检测外部高速时钟(HSE)和外部低速时钟(LSE)是否丢失。当检测到HSE时钟丢失后,CSS可以触发定时器的“刹车”功能和系统中断,并自动切换到内部高速时钟HSI,软件可以根据这些触发的事件,制定相应的保护措施。

LSE是RTC的时钟源,当检测到LSE丢失后,RTC不能再使用LSE时钟源,并产生CSS中断,在中断中需要将RTC切换到其他时钟源。

CSS只能检测时钟是否丢失。对于时钟存在但发生偏移的情况,可以通过下图所示的时钟交叉测试来进行检测。

3.jpg

该测试利用了MCU的TIMER模块的输入捕获功能,LSI时钟内部连接到TIMER的一个输入捕获通道,当分别使用HSE或者HSI作为计数时钟时,通过检测LSI的频率是否在正常范围内,从而间接的检测了HSE/HSI的频率。不同STM32系列用到TIMER模块不一样,具体请查看相应的参考手册。

SRAM奇偶校验位

部分STM32系列支持带奇偶校验的SRAM。

奇偶校验可以用来检测SRAM的瞬时和永久性故障。比如由于电磁干扰导致的SRAM中的数据错误。由于奇偶校验的检测原理,使得它只能检测出奇数个的比特位错误,并且也不能对错误数据进行纠正。

STM32 MCU带奇偶校验的SRAM每个字节增加了一位奇偶校验位,所以SRAM的数据总线是36位。在对SRAM进行写操作时,硬件自动计算并存储奇偶校验;当进行读操作时,硬件自动进行校验。如果检测到错误,会立刻产生不可屏蔽中断(NMI),并且可以配置成可以触发定时器的“刹车”功能。

硬件ECC

ECC全称Error Checking and Correcting,是一种错误检查和纠正的技术。跟奇偶校验一样,它也需要额外的空间来存储校验码。比奇偶校验更强的是,ECC可以做到单比特位错误校正和双比特位错误检测。对于由于电磁干扰等原因造成的内存瞬时故障或者永久性故障,ECC都可以检测。ECC检测在读操作时进行,当检测到一个比特位的错误时,读出来的数据就是已经纠正后的数据,当检测到两个比特位的错误时,ECC无法纠正,但是可以告诉应用程序该位置的数据有错。

STM32部分MCU系列(STM32H7/H5/L4/G0/G4/L5/U5/WB)支持Flash ECC,H7/H5/U5支持SRAM ECC和Cache ECC。

当检测到单比特/双比特ECC错误时,出错地址会被自动保存到寄存器中(需要使能该功能),并且可以通过寄存器配置产生对应的错误中断。

检测到双比特错误时,还将触发NMI中断,并可以将出错信号连接到TIMER的“刹车”功能。

请参考AN5342了解更多关于ECC的操作细节。

硬件CRC

在Flash自检的程序中会用到CRC来检测Flash内容的完整性。其检测思路一般是:在程序编译完成后,计算整个程序的CRC值(第一次计算CRC值),然后将这个CRC值添加到可执行文件末尾。再将带有CRC校验值的可执行文件烧录到MCU中。在程序启动后,由程序中的自检代码重新根据当前Flash里内容(不包括预存的CRC校验值)计算一次CRC值(第二次计算CRC值),再与之前预先计算并烧录到Flash中的CRC校验值(第一次计算的值)进行比较,如果一致就通过检测。第二次计算CRC值的时候是由运行在MCU中的自检程序完成的,这部分工作可以利用软件代码完成,也可以利用MCU的硬件CRC完成。

STM32的全系列都提供了硬件CRC的功能,默认使用CRC32多项式0x4C11DB7。

请参考AN4187了解更多关于CRC的使用细节。

存储保护单元MPU

存储器保护单元MPU是Cortex-M内部的组件。Cortex-M0不支持MPU,所以除了基于Cortex-M0内核的STM32F0以外,其他STM32产品都支持存储器保护单元 (MPU)。

MPU可以用来设置部分数据只能被一些特权任务访问或者是只读;可以将SRAM空间定义为“不可执行代码”,从而防止注入攻击代码;可以用来检测堆栈溢出和数组越界;还可以通过MPU设置存储器的缓冲,缓存,共享等属性。

在功能安全的应用中,我们可以利用MPU来对安全相关的关键数据进行隔离,从而防止其被其他程序意外修改。

关于MPU的使用细节,请参考AN4838。

其他

除了前面介绍的这些硬件的功能外,还有:GPIO,Timer,比较器等外设的寄存器锁定功能,可以配置参数不会被软件意外修改。

定时器PWM输出的“刹车”功能,它的目的是保护由PWM信号驱动的功率开关,就是当系统出现故障时,可以触发该功能,关闭PWM输出,保证系统处于安全状态。而触发“刹车”功能的输入信号,既可以是来自MCU内部的系统级故障(比如CSS检测到的时钟失效,SRAM的奇偶校验错误等),也可以是连接到特定引脚的外部信号。不同的STM32系列支持的输入信号来源不同,具体使用请见相应的参考手册。

部分STM32系列还支持“内核进入lockup状态”作为“刹车”功能的触发源。关于“内核进入lockup状态”是指,当MCU已经因为出错进入fault中断后,在fault中断服务程序中又触犯了fault条件,这时就会进入lockup状态。

还有一些外设比如串口,I2C,CAN等,也内置有协议错误检测,CRC校验等功能,可以用于该外设使用过程中的安全检测。

STM32内置安全属性还很多,这里就不一一列举了。请参考各个STM32系列的安全手册,来获取详细的信息。

来源:STM32

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 29

1、前言

STM32H7 以太网的 MMC(MAC management counter)中断是个有点特别的中断。特殊之处在于它是默认使能。如果我们在代码里不针对 MMC 进行相关处理,就会造成一些异常现象。我们先来看一个真实的客户案例。

2、客户案例

客户使用 STM32H750 作为主控,与其他设备之间进行以太网通讯。

客户在压力测试中发现:

• 设备从第一次通讯开始,累计 7 到 8 天,就会发现 STM32H750 不再响应用户的请求。

• 客户通过使用 IDE 和添加辅助代码可以发现,STM32H750 会不停地进入以太网中断,导致所使用的操作系统无法进行有效的系统调度。

• 问题发生后,客户无论拔下网线或者再次连上网线,STM32H750 依然会不停的进入以太网中断。

• 客户尝试使用 IDE 查看所有以太网寄存器,会发现有时侯能够让系统恢复正常。

3、分析

系统不停的进入以太网中断,说明某个中断在被某种条件下被不停的触发,或者中断触发后没有被处理。进一步,当系统出现异常状况后,拔掉网线,中断依然不断的进入,说明该异常并不需要外界不停的输入,也就说明可能是中断没有被处理所导致。所以,客户首先想到的是补全所有使能的以太网中断的清除代码。然而,客户再次测试,却发现累计 7 到 8 天,问题再次发生。

在这种情况下,为了深刻了解该状况的原因,我们建议客户,抓取异常时的寄存器现场,然后和正常状态时的寄存器进行对比。我们在设备未发生异常前,抓取了以太网的三组寄存器 DMA、 MTL 和 MAC。同时,我们在发生异常后,在同一设备再次进行这三组寄存器的抓取。然后,我们使用文本比较工具,对两次的寄存器进行比较。我们很快就可以发现,MAC 寄存器存在值得关注的差异。MAC 寄存器对比如下:

“STM32H7

我们可以看到在系统异常情况下下,MMCRXIS 和 MMCIS 被置位了。

我们从参考手册 RM0433 (STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm®-based 32-bit MCUs)(直接搜索关键子 MMCRXIS)中可以看到 MMCRXIS 和 MMCIS 表示系统收到了 MMC 接收中断。

“STM32H7

在两次三组寄存器的比较中,我们看到系统生成了 MMC 接收中断(MMC_RX_INTERRUPT 中 RXUCGPIS)。这个符合前文的 MMCRXIS 和 MMCIS 的状态。

“STM32H7

从参考手册 RM0433 中我们可以看到,只要 MMC 选项使能,该中断标志就为有效。但是我们并没有使能 MMC 选项,甚至我们都没有使能 MMC 中断,为什么还是有中断产生呢?

4、MMC 中断的特点

MMC 选项其实是默认使能。我们可以从参考手册 RM0433 中看到这一点。

“STM32H7

在 MMC 默认使能的情况下,什么情况下会产生中断呢?

让我们在 RM0433 里搜索下两次寄存器比较发现的 RXUCGPIS 寄存器:

“STM32H7

综合这两点,我们可以认为,在长时间以太网收发包之后,MMC 中断几乎一定会发生。这符合客户案例的场景,例如,重现这个问题需要 7 到 8 天。当然从这里我们也可以推断出,我们如果加快测试数据包收发的发送,MMC 中断会发生更早。那么,如何避免在产品应用中这种问题发生呢?

5、解决方案

1.1. 使用 MMC 中断

MMC 中断是个有用的功能。如果我们要使用的话,可以参考 MMC Rx interrupt register (ETH_MMC_RX_INTERRUPT)和 MMC Tx interrupt register (ETH_MMC_TX_INTERRUPT)的描述。我们需要对 MMC 进行一个读的操作。

“STM32H7

“STM32H7

这也解释了,客户为什么发现,通过调试器一个一个去读取以太网寄存器,会在某个操作时让异常状态恢复到正常。

1.2. 关闭 MMC 中断

在很多情况下,MMC 中断对实际产品没有意义。例如,在这个案例中,我们可以选择关闭 MMC中断。这就需要用到 MMC 中断的 mask 寄存器:

• MMC Rx interrupt mask register (ETH_MMC_RX_INTERRUPT_MASK)

• MMC Tx interrupt mask register (ETH_MMC_TX_INTERRUPT_MASK)

我们可以添加以下代码到我们的应用代码里

“STM32H7

客户反馈找不到 ETH 的定义。其实在 STM32H7 的例程里,我们可以很容易发现 ETH 定义在

STM32Cube\Repository\STM32Cube_FW_H7_V1.8.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h750xx.h:

“STM32H7

也就是说,如果你的工程代码源自 STM32Cube 例程,你应该能够加入以上代码并且能够成功运行。

在加入上述代码或者类似操作后,客户反馈,再次进行超过 7 天以上的压力测试,系统运行正常。

6、总结

STM32H7 的 MMC 中断需要加以注意,如果不使用 MMC,需要确保它已经关闭;否则在经过长时间网络收发后,系统会产生并非用户所期望的中断,导致系统假死。另外,我们也看到了调试STM32 以太网的常规方式,也就是借助工具而不需要写代码就可以进行寄存器的比较。这种方法值得使用 STM32 以太网的用户进行调试时参考。

来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 34

1.引言

重新编程烧录了 STM32H7 目标芯片后,我就无法连接到该设备。选择 “Connectunder reset”连接也没有帮助。为什么 ?

2.问题分析

通过日常客户的技术支持整理,有两种可能的根本原因导致这个问题。第一种可能性更大,与电源配置错误有关。其次是 Option Bytes 选项字节中的内核启动配置相关。下面我们来具体地看一看。

2.1 可能原因一(电源配置错误)

这条原因适用于所有具有可配置内部 SMPS 降压转换器的 STM32H7 芯片。采用嵌入式降压转换器的 STM32H7 器件提供了不同的电源方案。代码中供电电源的所选配置取决于外部电源电路组件的连接。此配置只能在上电复位后设置一次。选择错误的配置会导致 MCU锁定,也即是说 STM32H7 软件代码配置的供电模式与外部硬件供电连接的模式不一致不匹配的时候,会导致该芯片被 lock-up 锁定。

软件代码中关于电源模式的配置可以通过 HAL 库中的以下代码行完成(通常放在SystemClock_Config 函数中) :

“不能连接上

大多数的电路原理图设计都会选择 SMPS 作为直接 MCU VDD 的供电方式(如果该SMPS 模块在 MCU 中可用),这里就需要使用 PWR_DIRECT_SMPS_SUPPLY 参数替代PWR_LDO_SUPPLY 调用上述函数。但是在早期的 STM32CubeMX 生成的项目在默认情况下可能是 PWR_LDO_SUPPLY 电源选项。所以这儿导致了不一致。而在 CubeMX 5.4.0 及更高版本中提供了 PWR_DIRECT_SMPS_SUPPLY 电源做为默认选项。所以要注意配置的一致性。由于配置只能在上电重置后更改一次,因此问题可能会在下一次电源复位后出现。

“不能连接上

下面是参考手册中的图表,显示了电源的不同硬件配置:

“不能连接上

MCU 内含保护机制,可防止将更高的电压从内部 SMPS 导入到 VCORE(1.8 或 2.5V)。这样可以防止由于配置错误而损坏 MCU。

由于电源通常在复位后立即配置,因此很难连接。

解决方案 1 是:

1、将复位按钮保持在低位(通常为 NRST 引脚),然后接通将电路板电源;

2、保持复位按钮低;

3、通过 STM32CubeProgrammer 连接。当程序开始连接时松开复位按钮;

4、如果连接不上继续执行上述步骤,如果连接上则执行批量擦除;

5、确保已修复项目中的电源配置,重新下载;

解决方案 2 是:

1、强制将 BOOT0 引脚保持高位,然后上电复位目标板。这需要将 BOOT_CM7_ADD1 设置为系统内存;

2、保持 BOOT0 引脚电平为高;

3、通过 STM32CubeProgrammer 连接。系统引导加载程序 System bootloader 不会使用自己用户的电源配置;

4、执行批量擦除;

5、确保已修复项目中的电源配置,重新下载;

2.2 可能原因二(Cortex-M7 启动已禁用)

这适用于所有具有双核功能的 STM32H7 设备。

有时我们调整选项字节的配置使得只有 Cortex-M4 在复位后才启动(BOOT_CM7/BCM7=0,BOOT_CM4/BCM4=1)。

此时你需要将调试器连接到访问端口 AP=3(CortexM4),而不是访问端口 AP=0(Cortex-M7)。

此处提醒,使用 STM32CubeProgrammer 进行连接时,注意保持 STM32CubeProgrammer 为最新版本。对于开发,建议保持两个内核启动配置,否则有些 IDE 工具可能无法与设备一起工作。

点击查看原文档:原文档

来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 48

引言

在重新编程烧录了 STM32H7 目标芯片后,我就无法连接到该设备。选择 “Connect under reset”连接也没有帮助。为什么 ?

原因分析

通过日常客户的技术支持整理,有两种可能的根本原因可以导致这个问题。第一种可能性更大,与电源配置错误有关。其次是与 Option Bytes 选项字节中的内核启动配置相关。下面我们来具体的看一看。

可能原因一(电源配置错误)

这条原因适用于所有具有可配置内部 SMPS 降压转换器的 STM32H7 芯片。采用嵌入式降压转换器的 STM32H7 器件提供了不同的电源方案。代码中供电电源的所选配置取决于外部电源电路组件的连接。此配置只能在上电复位后设置一次。选择错误的配置会导致 MCU锁定,也即是说 STM32H7 软件代码配置的供电模式与外部硬件供电电路不匹配的时候,会导致该芯片被 锁定【lock-up 】。

软件代码中关于电源模式的配置可以通过 HAL 库中的以下代码行完成(通常放在SystemClock_Config 函数中) :

“不能连接上

大多数的电路原理图设计都会选择 SMPS 作为 MCU VDD 的直接供电方式(如果该SMPS 模块在 MCU 中可用),这里就需要使用 PWR_DIRECT_SMPS_SUPPLY 参数替代PWR_LDO_SUPPLY 调用上述函数。但是在早期的 STM32CubeMX 生成的项目在默认情况下可能是 PWR_LDO_SUPPLY 电源选项。所以这儿导致了不一致。而在 CubeMX 5.4.0 及更高版本中提供了 PWR_DIRECT_SMPS_SUPPLY 电源做为默认选项。所以要注意配置的一致性。由于配置只能在上电重置后更改一次,因此问题可能会在下一次电源复位后出现。

“不能连接上

下面是参考手册中的图表,显示了电源的不同硬件配置:

“不能连接上

MCU 内含保护机制,可防止将更高的电压从内部 SMPS 导入到 VCORE(1.8 或 2.5V)。这样可以防止由于配置错误而损坏 MCU。

由于电源通常在复位后立即配置,因此很难连接。

解决方案 1 是:

1、将复位按钮保持在低位(通常为 NRST 引脚),然后接通将电路板电源,

2、保持复位按钮低电位,通过 STM32CubeProgrammer 连接。当程序开始连接时,松开复位按钮。

3、如果连接不上继续执行上述步骤,如果连接上则执行批量擦除。

4、确保已修复项目中的电源配置,重新下载。

解决方案 2 是:

1、强制将 BOOT0 引脚保持高位,然后上电复位目标板。这需要将 BOOT_CM7_ADD1 设置为系统内存。

2、保持 BOOT0 引脚电平为高,通过 STM32CubeProgrammer 连接。系统引导加载程序 System bootloader 不会使用自己用户的电源配置。

3、执行批量擦除。

4、确保已修复项目中的电源配置,重新下载。

可能原因二(Cortex-M7 启动已禁用)

这适用于所有具有双核功能的 STM32H7 设备。有时我们调整选项字节的配置使得只有 Cortex-M4 在复位后才启动(BOOT_CM7/BCM7=0,BOOT_CM4/BCM4=1)。此时你需要将调试器连接到访问端口 AP=3(CortexM4),而不是访问端口 AP=0(Cortex-M7)。

顺便提醒下,使用 STM32CubeProgrammer 进行连接时,注意保持 STM32CubeProgrammer 为最新版本。

对于开发,建议保持两个内核启动配置,否则有些 IDE 工具可能无法与设备一起工作。

来源:STM32单片机
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 139

前言

STM32H7 以太网的 MMC(MAC management counter)中断是个有点特别的中断。特殊之处在于它是默认使能。如果我们在代码里不针对 MMC 进行相关处理,就会造成一些异常现象。我们先来看一个真实的客户案例。

客户案例

客户使用 STM32H750 作为主控,与其他设备之间进行以太网通讯。客户在压力测试中发现:

  • 设备从第一次通讯开始,累计 7 到 8 天,就会发现 STM32H750 不再响应用户的请求。

  • 客户通过使用 IDE 和添加辅助代码可以发现,STM32H750 会不停地进入以太网中断,导致所使用的操作系统无法进行有效的系统调度。

  • 问题发生后,客户无论拔下网线或者再次连上网线,STM32H750 依然会不停的进入以太网中断。

  • 客户尝试使用 IDE 查看所有以太网寄存器,会发现有时侯能够让系统恢复正常。

分析

系统不停的进入以太网中断,说明某个中断在被某种条件下被不停的触发,或者中断触发后没有被处理。进一步,当系统出现异常状况后,拔掉网线,中断依然不断的进入,说明该异常并不需要外界不停的输入,也就说明可能是中断没有被处理所导致。所以,客户首先想到的是补全所有使能的以太网中断的清除代码。然而,客户再次测试,却发现累计 7 到 8 天,问题再次发生。在这种情况下,为了深刻了解该状况的原因,我们建议客户,抓取异常时的寄存器现场,然后和正常状态时的寄存器进行对比。我们在设备未发生异常前,抓取了以太网的三组寄存器 DMA、MTL 和 MAC。同时,我们在发生异常后,在同一设备再次进行这三组寄存器的抓取。然后,我们使用文本比较工具,对两次的寄存器进行比较。我们很快就可以发现,MAC 寄存器存在值得关注的差异。MAC 寄存器对比如下:

“▲图
▲图 1 MAC 寄存器对比

我们可以看到在系统异常情况下下,MMCRXIS 和 MMCIS 被置位了。

我 们 从 参 考 手 册 RM0433 (STM32H742, STM32H743/753 and STM32H750 Value line advanced Arm®-based 32-bit MCUs)(直接搜索关键子 MMCRXIS)中可以看到MMCRXIS 和MMCIS 表示系统收到了MMC 接收中断。

“▲图
▲图 2 MMCRXIS 与 MMCIS 置位的含义

在两次三组寄存器的比较中,我们看到系统生成了 MMC 接收中断(MMC_RX_INTERRUPT 中RXUCGPIS)。这个符合前文的MMCRXIS 和MMCIS 的状态。

“▲图
▲图 3 MMC_RX_INTERRUPT 的比较

从参考手册 RM0433 中我们可以看到,只要MMC 选项使能,该中断标志就为有效。但是我们并没有使能MMC 选项,甚至我们都没有使能 MMC 中断,为什么还是有中断产生呢?

MMC 中断的特点

MMC 选项其实是默认使能。我们可以从参考手册 RM0433 中看到这一点。

“▲图
▲图 4 MAC management counters

在 MMC 默认使能的情况下,什么情况下会产生中断呢?

让我们在 RM0433 里搜索下两次寄存器比较发现的 RXUCGPIS 寄存器:

“▲图
▲图 5 RXUCGPIS

我们可以看到MMC 接收中断会在统计值最大的一半或者最大值时会产生。这也和MMC RX interrupt register 开始的说明描述一致。

“▲图
▲图 6 MMC Receive Interrupt 的条件

综合这两点,我们可以认为,在长时间以太网收发包之后,MMC 中断几乎一定会发生。这符合客户案例的场景,例如,重现这个问题需要 7 到 8 天。当然从这里我们也可以推断出,我们如果加快测试数据包收发的发送,MMC 中断会发生更早。那么,如何避免在产品应用中这种问题发生呢?

解决方案

1.1.使用MMC 中断

MMC 中断是个有用的功能。如果我们要使用的话,可以参考 MMC Rx interrupt register(ETH_MMC_RX_INTERRUPT)和 MMC Tx interrupt register (ETH_MMC_TX_INTERRUPT)的描述。我们需要对MMC 进行一个读的操作。

“▲图
▲图 7 MMC Receive Interrupt 清除的方法

以及

“▲图
▲图 8 MMC Transmit Interrupt register 清除的方法

这也解释了,客户为什么发现,通过调试器一个一个去读取以太网寄存器,会在某个操作时让异常状态恢复到正常。

1.2. 关闭 MMC 中断

在很多情况下,MMC 中断对实际产品没有意义。例如,在这个案例中,我们可以选择关闭 MMC中断。这就需要用到 MMC 中断的 mask 寄存器:

  • MMC Rx interrupt mask register (ETH_MMC_RX_INTERRUPT_MASK)

  • MMC Tx interrupt mask register (ETH_MMC_TX_INTERRUPT_MASK)

我们可以添加以下代码到我们的应用代码里

ETH->MMCRIMR = ETH_MMCRIMR_RXLPITRCIM | ETH_MMCRIMR_RXLPIUSCIM | 
ETH_MMCRIMR_RXUCGPIM | ETH_MMCRIMR_RXALGNERPIM | ETH_MMCRIMR_RXCRCERPIM;
ETH->MMCTIMR = ETH_MMCTIMR_TXLPITRCIM | ETH_MMCTIMR_TXLPIUSCIM | 
ETH_MMCTIMR_TXGPKTIM | ETH_MMCTIMR_TXMCOLGPIM | ETH_MMCTIMR_TXSCOLGPIM;

客户反馈找不到 ETH 的定义。其实在 STM32H7 的例程里,我们可以很容易发现 ETH 定义在STM32Cube\Repository\STM32Cube_FW_H7_V1.8.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h750xx.h:

#define ETH ((ETH_TypeDef *)ETH_BASE)

也就是说,如果你的工程时源自 STM32Cube 例程,你应该能够加入以上代码并且能够成功运行。

在加入上述代码或者类似操作后,客户反馈,再次进行超过 7 天以上的压力测试,系统运行正常。

总结

STM32H7 的 MMC 中断需要加以注意,如果不使用 MMC,需要确保它已经关闭;否则在经过长时间网络收发后,系统会产生并不是用户期望的中断,导致系统假死。另外,我们也看到了调试STM32 以太网的常规方式,也就是借助工具而不需要写代码就可以进行寄存器的比较。这种方法值得使用 STM32 以太网的用户进行调试时参考。

来源:STM32
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 440

STM32H7 以太网的MMC(MAC management counter)中断是个有点特别的中断。特殊之处在于它是默认使能。如果我们在代码里不针对MMC 进行相关处理,就会造成一些异常现象。我们先来看一个真实的客户案例。

详阅请点击下载《STM32H7以太网的MMC中断》

来源:ST
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 29

STM32H7双核CM4作为Master初始化系统

cathy的头像

STM32H7双核单片机内部集成了CM7和CM4这两个内核,在目前官方提供的例程中,大都是使用CM7作为Master初始化系统时钟,然后通过释放硬件信号量HSEM唤醒CM4,那么是否可以将CM7与CM4的角色互换,让CM4作为Master去初始化系统时钟呢?

意法半导体发布全新微控制器STM32H7*。该新产品是业界性能最高的Arm® Cortex®-M通用MCU,集强劲的双核处理器和节能型功能以及强化的网络安保功能于一身。

新产品采用Arm Cortex-M系列中性能最高的480MHz Cortex-M7内核,并增加一颗240MHz Cortex-M4内核。借助意法半导体的智能架构、高效的L1缓存和ART Accelerator™自适应实时加速技术,当执行嵌入式闪存中的代码时,新MCU创下了1327 DMIPS和3224 CoreMark™性能新记录。意法半导体的Chrom-ART™加速器™进一步提升了图形处理性能。为了最大限度地提高能效,每个内核都有独立的电源域,在不需要时可以单独关闭。

通过灵活使用两个内核,开发人员可以轻松升级现有应用,增加更先进复杂的图形用户界面,以电机控制为例,将以前在单核Cortex-M4 MCU上的旧代码迁移到STM32H7 Cortex-M4上,同时在Cortex-M7上运行新GUI。另一个例子是通过降低主处理器的密集型工作负荷,例如,神经网络、校验和、DSP过滤或音频编解码,提高应用性能。

双核架构还有助于简化代码开发,并缩短项目开发周期,将用户界面代码与实时控制或通信功能的开发分开进行。

STM32H7 MCU配备预安装密钥和原生安全服务,包括安全固件安装(SFI)。SFI允许客户在世界任何地方订购标准产品,并将加密固件交付给外部编程公司,避免未加密的代码泄密。此外,内置安全启动和安全固件更新(SB-SFU)支持功能,保护空中下载(OTA)升级和补丁的安全。

与无闪存处理器相比,STM32H7 MCU不仅性能出色,还在片上额外提供高达2MB闪存和1MB SRAM,更好地解决了存储空间限制问题,并简化了具有实时性能或AI处理要求的工业、消费和医疗智能产品设计。此外,Cortex-M7的1级高速缓存以及并行和串行存储器接口可以无限制地快速访问外部存储器。

其它高级功能包括支持所有闪存和RAM存储器的错误代码校正(ECC)技术,提高系统可靠性和安全性;多个先进的16位模数转换器(ADC);外部工作环境温度高达125°C,适用于恶劣的工作环境;具有通信网关功能的以太网控制器和多个FD-CAN控制器;以及ST最新的波形精确的高分辨率定时器。

意法半导体已经在STM32Cube生态系统内增加了STM32CubeH7 固件模块和应用程序源代码,包括基于TouchGFX和STemWin图形堆栈库的图形解决方案。新增硬件工具包括评估板、发现套件和Nucleo开发板。开发人员可以使用STM32Cube开发环境的所有标准组件,包括ST-MC-SUITE电机控制工具包、STM32Cube.AI机器学习工具包、STM32CubeMX、STM32CubeProgrammer,以及取得相关认证的合作伙伴的STM32解决方案。

STM32H7双核微控制器即将投产,样片现已上市,有多种封装可选,包括WLCSP。STM32H7单核微控制器(包括超值系列)同时上市。

了解更多信息,请访问www.st.com/stm32h7

阅读STM32H7双核微控制器的博文请访问https://blog.st.com/dual-core-stm32h7

关于意法半导体

意法半导体(STMicroelectronics; ST)是全球领先的半导体公司,提供与日常生活息息相关的智能的、高能效的产品及解决方案。意法半导体的产品无处不在,致力于与客户共同努力实现智能驾驶、智能工厂、智慧城市和智能家居,以及下一代移动和物联网产品。享受科技、享受生活,意法半导体主张科技引领智能生活(life.augmented)的理念。意法半导体2018年净收入96.6亿美元,在全球拥有10万余客户。详情请浏览意法半导体公司网站:www.st.com

围观 226

页面

订阅 RSS - STM32H7