STM32H7

前言

STM32H7 集成了运算放大器(COMP),可与模拟信号进行比较来进行电压检测,内置的 COMP 节省了 MCU 外接 COMP 的硬件成本。本文将介绍 STM32H7 的片内 COMP 的不同工作模式,并提供配置 COMP 的例程。

STM32H7 模拟比较器(COMP)特性

以下是 STM32H7 模拟比较器主要特性:

• 两个独立的比较器 COMP1 和 COMP2 可以组合在一起来创建一个窗口比较器
• 可编程的比较器迟滞
• 可编程的速度和功耗
• 可配置的正和负输入
• 多路复用 I/O 引脚,DAC 通道 1 和 2,内部参考电压和三个因数值
• 输出重定向
o 配置 I/Os
o 计时器——打断事件给快速 PWM 关闭,逐周期电流控制,输入捕获给时间测量
o 输出 blanking 源
• 比较两个模拟信号,并提供数字输出指示哪个大
• 有能力从停止模式唤醒 CPU

模拟比较器 COMP 在 STM32H7 上的应用

STM32H7 模拟比较器(COMP)特性工作模式

COMP 窗口模式

模拟比较器 COMP 在 STM32H7 上的应用

窗口比较器的目的是指示,如果模拟电压比阈值电压更低或更高,应用于每一个比较器的反相输入。两个非反相输入端可以在内部连接,通过启用 WINMODE,可以节省一个 IO 口,用作其它的用途。

COMP 打断信号生成

模拟比较器 COMP 在 STM32H7 上的应用

比较器(COMP1/COMP2) 输出值能产生打断输入信号给定时器 (TIM1 & TIM8) 在输入脚 TIMx_BKIN or TIMx_BKIN2 通过配置 GPIO alternate function。

COMP Blanking

模拟比较器 COMP 在 STM32H7 上的应用

防止在 PWM 周期的开始由于短周期电流峰值,电流调节跳闸。掩码 COMP 输出重定向到定时器打断输入。

应用实例

硬件环境

本文硬件环境基于 STM32H743I_EVAL。CN6 的第 29 引脚(PB0)作为 COMP1 模拟电压的输入引脚。

软件配置

虽然 STM32H7 系列中的 ADC 可用作模拟看门狗,看门狗的阈值上限和下限均可编程,但是由于 ADC 在停机模式下会断电,因此 MCU 必须保持在运行模式下才能监视输入端的模拟电压。对于 STM32H743xx 器件,可将 COMP1,此看门狗可在 MCU 处于停机模式下时保持通电状态。这样既可降低功耗,又可实现节能。在模拟看门狗应用中, COMP1 通过外部中断线配置,以在模拟输入电压超过 VREFINT 时使 MCU 退出停机模式。若在整个过程中,模拟电压都处于定义的阈值范围内,MCU 将一直处于停机模式,从而降低功耗。当模拟电压超过定义的阈值时,可通过切换至运行模式来降低平均功耗。

以下是通过 STM32CubeMX 来配置工程实例:

1.选择 STM32H743XI,打开 HSE,PF10 设置为 GPIO 输出,PB0 设置为 COMP 输入。

模拟比较器 COMP 在 STM32H7 上的应用

2. 配置系统时钟为 400MHz 系统时钟以及其它总线时钟。
模拟比较器 COMP 在 STM32H7 上的应用

3. 配置 COMP1 中断为上升沿触发。
模拟比较器 COMP 在 STM32H7 上的应用

CubeMX 中已经配置了一个简单的 COMP1 模拟看门狗的例子,使用 STM32CubeMX 工具 STM32H743XI 生成工程代码,并在 main.c 中添加如下红色的部分代码来开启 COMP1、使能 COMP1 中断,以及添加应用代码。

int main(void)
{
…
 /* Initialize all configured peripherals */
 MX_GPIO_Init();
 /* LED1 Off */
 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);

 MX_COMP1_Init();
 /* Start COMP1 */
 if(HAL_COMP_Start_IT(&hcomp1) != HAL_OK)
 {
 /* Initialization Error */
 Error_Handler();
 }
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
 while (1)
 {
 /* Insert 5 second delay */
 HAL_Delay(5000);
 /* LED1 Off */
 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);

 /* Enter STOP mode */
 HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);
 /* ... STOP mode ... */

 /* at that point, MCU has been awoken */
 /* Re-configure the system clock */
 SystemClock_Config();
 /* LED1 On */
 HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
 }
 /* USER CODE END 3 */
}

Startup_stm32h743xx.s 中定义的 COMP1 全局中断服务函数名是 COMP1_IRQHandler,而通过 STM32CubeMX 生成的COMP1 全局中断服务函数名是 COMP_IRQHandler。

DCD COMP1_IRQHandler ; COMP1 global Interrupt 

对 stm32h7xx_it.c 进行修改,如下所示:

/**
* @brief This function handles COMP1 and COMP2 interrupts through EXTI lines 20 and 21.
*/
void COMP_IRQHandler(void)
{
 /* USER CODE BEGIN COMP_IRQn 0 */
 /* USER CODE END COMP_IRQn 0 */
 HAL_COMP_IRQHandler(&hcomp1);
 /* USER CODE BEGIN COMP_IRQn 1 */
 /* USER CODE END COMP_IRQn 1 */
}

改为

/**
* @brief This function handles COMP1 and COMP2 interrupts through EXTI lines 20 and 21.
*/
void COMP1_IRQHandler(void)
{
 /* USER CODE BEGIN COMP_IRQn 0 */
 /* USER CODE END COMP_IRQn 0 */
 HAL_COMP_IRQHandler(&hcomp1);
 /* USER CODE BEGIN COMP_IRQn 1 */
 /

至此,完成的工程已经建立。运行软件后,LED1 默认熄灭并进入待机模式。加 1.22V 或者高于 1.22V 的外部电压到PB0 引脚将触发 COMP1 中断,MCU 被唤醒并点亮 LED1。延时大约 5 秒后,LED1 熄灭并再次进入待机模式,等待 PB0 引脚外部模拟信号触发中断。

总结

片内的 COMP 可对模拟信号进行比较处理,配合片内的 DAC 和定时器等外设联合工作,可满足各种不同的应用需求。本文提供了 STM32LH7 COMP 的一个简单易用的例子,更多详细的应用请参考 STM32H7x3 用户手册及相关资料。

来源: http://www.stmcu.com.cn

围观 4636

前言

前段时间接到一个客户的问题。客户描述在使用 STM32H7 的 FMC 时,如果使能了 DCACHE,就运行不正常。数据没有写到 FMC 外部的存储器里,测量 FMC 接口也没有波形跳变。而不使能 DCACHE 工作就是正常的。

其实对于这个问题,如果了解 STM32H7 的架构的话,就很容易理解了。下面我们就来看一看到底是什么原因让客户觉得使能 DCACHE 后 FMC 就工作不正常了。

STM32H7 的架构

下面是 STM32H7 架构图中和 FMC 相关的部分。从图中可以看到,STM32H7 是基于 Cortex-M7 内核,在内部的 Cortex-M7内核里带有一个 16KB 的 DCACHE 和一个 16KB 的 ICACHE。内核通过 AXIM 总线连接到的 64 位的 AXI 总线矩阵,通过这个总线矩阵连接到 FMC 接口。也就是说,当 DCACHE 使能的时候,对 FMC 接口上的存储器的操作是经过内核的缓存(CACHE)的。

STM32H7 的 FMC 外设在 DCACHE 使能 时运行不正常

使能了 CACHE 的好处就是可以提高内核访问存储器的速度。为什么使用缓存能提高速度呢?是因为在操作可以被缓存的存储器的时候,内核不是每次都去直接操作这些存储器,而是从缓存里读取数据,或者将数据先写到缓存里。看到这里,是不是觉得和前面客户说的现象有点联系了。

Cache 的操作

简单的说缓存工作时有两种方式:回写和透写。

STM32H7 的 FMC 外设在 DCACHE 使能 时运行不正常

回写就是数据只写到缓存中,等以后再同步到下一级存储器中。

透写就是数据每次都同时写到缓存和下一级存储器中。这种方式可以解决数据不一致的问题,但同时也会消耗更多的总线访问。

缓存的操作方式,在启用缓存后有一个默认的设置 。也就是下面这张表:

STM32H7 的 FMC 外设在 DCACHE 使能 时运行不正常

请参考 AN4839 了解更多的关于 Cache 的使用说明。

问题分析及解决

客户是通过 FMC 的 NOR 存储控制器外接一个 FPGA。映射的地址范围是 0x60000000~0x7FFFFFFF。从上图可以看到,它默认的缓存操作方式是 WBWA(回写写分配)。也就是说,当打开 DCACHE 后,所有对该地址范围的操作都会先到缓存。

这也解释了为什么客户发现数据没有真正写到外部存储器中。客户的数据需要实时写到 FPGA 中进行计算。所以对这个应用场景,回写的设置就不合适了。

对于客户的这个应用,可以通过 MPU 来进行配置,将 0x60000000~0x7FFFFFFF 范围地址的 CACHE 设置为透写的方式,这样数据就会实时的写到 FPGA 中去了。

针对这种情况,我们可以通过 MPU 来解决这个问题。

通过 MPU,可以配置不同存储器空间的访问权限和 Cache 策略。HAL 库里面提供了对应的函数和例程,参照例程用下面这段代码就可以解决客户的问题了。数据每次都是直接写到 FPGA 中,而不是缓存到内核的 DCACHE 中。

//MPU related define
#define FPGA_ADDRESS_START (0x60000000UL)
#define FPGA_SIZE MPU_REGION_SIZE_64MB
#define FPGA_REGION_NUMBER MPU_REGION_NUMBER0
#define FPGA_ACCESS_PERMISSION MPU_REGION_FULL_ACCESS
void MPU_Config(void)
{
MPU_Region_InitTypeDef MPU_InitStruct;
/* Disable MPU */
HAL_MPU_Disable();
/* Configure FPGA region as Region N?, 64MB of size and R/W region */
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.BaseAddress = FPGA_ADDRESS_START;
MPU_InitStruct.Size = FPGA_SIZE;
MPU_InitStruct.AccessPermission = FPGA_ACCESS_PERMISSION;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
MPU_InitStruct.Number = FPGA_REGION_NUMBER;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
MPU_InitStruct.SubRegionDisable = 0x00;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Enable MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}

总结

CACHE 的使用可以帮我们提高程序运行的性能,但也会带来缓存和二级存储器数据不一致和缓冲不击中带来的程序执行的时间不确定的情况,需要客户根据实际的应用来进行选择。对于实时性要求高的数据,可以像前面一样使用 MPU 配置成透写的方式,或者将数据放到 DTCM RAM 中。另外,在本文中只用 MPU 配置了 FMC 映射的部分存储区域。在实际使用中,应该对所有用到的存储空间(比如 Flash, SRAM 区)的属性根据实际情况进行配置,以免引起其他的问题。

来源: ST

围观 604

• Arm平台安全架构(PSA)采用高性价比、领先技术全面提升物联网市场的安全技术支持

• 基于STM32H7系列开发的Arm® Cortex®-M7微控制器整合PSA概念和先进的安全功能服务

意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM),今天发布了平台安全架构(PSA)。 PSA是实现同级最佳的普适网络安全的关键技术。意法半导体的STM32H7高性能微控制器采用与PSA框架相同的安全概念,并将这些概念与STM32产品家族的强化安全功能和服务完美融合。

个人用户和组织机构越来越依赖通过互联电子产品管理时间,监测健康状况,处理社交活动,享受或提供服务,提高工作效率。防止与未经授权的设备与互动,对于保护设备身份、个人信息、实体资产和知识产权极其重要。随着物联网的规模和普及率提高,公民安全和国家安全均受到威胁。设备厂商为打击黑客层出不穷的入侵手段而必须不断地创新安保系统,PSA让他们能够以适当的成本在资源有限的小设备上实现最尖端的安全机制。

意法半导体微控制器产品部总经理 Michel Buffa表示:“确保物联网成功,首要解决安全问题。从个人消费者到企业和政府机关,赢得终端所有用户的信任对物联网的广泛采用至关重要。Arm的PSA平台让设备识别和软件空中下载更新(OTA)等自主物联网设备的核心安全功能更经济,扩展性更强。我们已经将其集成到包括STM32H7高性能系列在内的STM32微控制器家族,与现有的安全功能协同工作。”

意法半导体的STM32H7 MCU集成硬件随机数生成器(TRNG)和先进密码加密处理器等硬件安全功能,可简化嵌入式应用和全球物联网系统的安全设计,防范网络监听、欺骗或中间人干预等网络攻击。此外, 安全固件装载功能有助于OEM厂商确保产品编程安全可靠,即便在代加工厂或程序开发公司等非内部生产环境中,仍能将固件安全地装入产品设备。为实现安全装载功能,已预装在微控制器内的安全密钥和软件服务准许OEM厂商将已加密的固件交给代工厂,消除了用代码拦截、复制或篡改固件的可能性,这可以实现向设备写入代码并验证设备的功能,建立设备连接终端用户网络完成远程空中更新(OTA)所需的可信根机制,以便在设备生命周期内下载安装安全补丁或升级软件。

Arm副总裁兼物联网IP业务群总经理 Paul Williamson表示:“通过推出PSA平台安全架构——保证未来数万亿物联网设备安全的通用工业框架,Arm正在与生态系统一道彻底改变安全技术的经济性。ST在STM32H7 Cortex-M 微控制器中嵌入硬件安全模块和固件装载服务,利用 Arm的 PSA概念在通信网关、物联网设备等应用领域推动安全技术创新。”

另注:

作为支持PSA的STM32H7系列中的一款产品,STM32H753 MCU基于Arm的性能最高的嵌入式处理器内核(Cortex-M7),以400MHz运行频率执行嵌入式闪存代码时,处理性能创下业内新纪录,测试成绩取得2020 CoreMark/856 DMIPS。为进一步提升微控制器的性能,意法半导体还在芯片上实现了其它创新技术功能,其中包括用于提升图形用户界面处理速度和效率的Chrom-ART Accelerator™ 、实现高速图像处理的硬件JPEG编解码器、高效的直接存储访问 (DMA)控制器、最大容量2MB的读写同步的片上双区闪存和让微控制器能够全速访问片外存储器的L1高速缓存。多电源域让开发人员能够最大限度的降低应用功耗,同时数量充足的I/O端口、通信接口、音频和模拟外设可满足娱乐、远程监视和控制等应用需求。

STM32H753即日起量产。更多STM32H753信息,请访问 http://www.st.com/STM32H753

围观 401

页面

订阅 RSS - STM32H7