stm32h743单片机嵌入式学习笔记7-FPU

* FPU 即浮点运算单元(Float Point Unit)。浮点运算,对于定点 CPU(没有 FPU 的 CPU)
来说必须要按照 IEEE-754 标准的算法来完成运算,是相当耗费时间的。而对于有 FPU 的 CPU
来说,浮点运算则只是几条指令的事情,速度相当快

LDR.W R0, =0xE000ED88 ; 使能浮点运算 CP10,CP11
LDR R1,[R0]
ORR R1,R1,#(0xF << 20)
STR R1,[R0]
DSB
此部分代码是 Reset_Handler 函数的部分内容(默认就是有的,我们不需要修改和添加),功能就是设置 CPACR 寄存器的 20~23 位为1,以开启 STM32H743 的硬件 FPU 功能。

但是,仅仅开启硬件 FPU 是不够的,我们还需要在编译器上面,做一下设置,否则编译器
遇到浮点运算,还是采用传统的方式(IEEE-754 标准)完成运算,不能体现硬件浮点运算的优
势。这里,我们在 MDK5 编译器里面,点击 按钮,然后在 Target 选项卡里面,设置 Floating
Point Hardware 为 Double Precision,如图 56.1.1.2 所示:(我估计这个过程,编译器实际上就是在单片机程序里添加了定义了__FPU_USED这样的一个宏,文章末尾我会讲解一下hal库函数工程确实就是这么回事)

这样就成功开启了FPU,当我们的程序中有浮点数计算的时候单片机就会自动调用FPU硬件单元进行计算了

经过这个设置,编译器遇到浮点运算就会使用硬件 FPU 相关指令,执行浮点运算,从而大
大减少计算时间。

最后,总结下 STM32H743 硬件 FPU 使用的要点:
1, 设置 CPACR 寄存器 bit20~23 为 1,使能硬件 FPU。
2, MDK 编译器 Code Generation 里面设置:Double Precision。不需要在代码里添加任何东西
经过这两步设置,我们的编写的浮点运算代码,即可使用 STM32H743 的硬件 FPU 了,可
以大大加快浮点运算速度。

----------------------------------------------------------------------------------------------------------------------------------------------

hal库函数工程:

我们在 system_stm32h7xx_c 文件里面开启,代码如下:
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
……//省略部分代码
}
此部分代码是系统初始化函数的部分内容,功能就是设置 CPACR 寄存器的 20~23 位为 1,
以开启 STMH32H7 的硬件 FPU 功能。从程序可以看出,只要我们定义了全局宏定义标识符
__FPU_PRESENT 以及__FPU_USED 为 1,那么就可以开启硬件 FPU。其中宏定义标识符
__FPU_PRESENT 用来确定处理器是否带 FPU 功能,标识符__FPU_USED 用来确定是否开启
FPU 功能。
实际上,因为 H7 是带 FPU 功能的,所以在我们的 stm32h743xx.h 头文件里面,我们默认
是定义了__FPU_PRESENT 为 1。大家可以打开文件搜索即可找到下面一行代码:
#define __FPU_PRESENT 1
但是,仅仅只是说明处理器有 FPU 功能是不够的,我们还需要开启 FPU 功能。开启 FPU
有两种方法,第一种是直接在头文件 STM32h743xx.h 中定义宏定义标识符__FPU_USED 的值为
1。也可以直接在 MDK 编译器上面设置,我们在 MDK5 编译器里面,点击 按钮,然后在 Target
选项卡里面,设置 Floating Point Hardware 为 Use Double Precision

经过这个设置,编译器会自动加入标识符__FPU_USED 为 1。这样遇到浮点运算就会使用
硬件 FPU 相关指令,执行浮点运算,从而大大减少计算时间。

 

通过实验对比发现,使用硬件 FPU 和不使用硬件 FPU 对比,同样的条件下,硬件 FPU 快了近
16 倍,充分体现了 STM32H743 硬件 FPU 的优势

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: STM32H743是意法半导体推出的一款高性能微控制器。它基于ARM Cortex-M7内核,运行主频高达400MHz,具有超强的计算能力和性能。除此之外,它还配备了丰富的外设和功能模块,可以满足各种应用领域的需求。 STM32H743系列的资料非常丰富,可以从意法半导体的官方网站上获得。在官方网站上,可以下载到完整的参考手册和数据手册,详细介绍了STM32H743的硬件架构、电气特性、外设功能和寄存器配置等信息。这些手册对于开发人员来说非常重要,可以帮助他们了解芯片的工作原理和使用方法。 此外,意法半导体还提供了一系列的应用笔记和演示代码,可以帮助开发人员更好地理解如何在STM32H743上使用各种外设和功能模块,如ADC、DAC、UART、SPI、I2C、USB等。这些应用笔记和演示代码可以作为学习和开发的参考资料,加速开发过程。 同时,在意法半导体官方网站上,还可以找到STM32Cube软件平台的相关资料。 STM32Cube是一个用于开发STM32微控制器的软件平台,提供了许多开发工具和软件库,包括启动代码、外设驱动、中间件和示例代码等。这些工具和软件库能够帮助开发人员快速进行应用开发,提高开发效率。 总的来说,STM32H743系列的资料非常丰富完整,开发人员可以通过意法半导体官方网站获得所需的参考手册、数据手册、应用笔记、演示代码以及STM32Cube软件平台等资料。这些资料将帮助开发人员快速上手和开发出高性能的应用。 ### 回答2: STM32H743是意法半导体(STMicroelectronics)推出的一款高性能ARM Cortex-M7内核的微控制器芯片。它是STM32H7系列中的一员,主要面向高性能的应用场景,如工业控制、自动化设备、医疗设备、通信设备等。 STM32H743具有以下主要特点: 1. 高性能:搭载了400MHz的Cortex-M7内核,采用了意法半导体最先进的技术,提供出色的计算能力和响应速度。 2. 高度集成:芯片集成了大量的外设模块,如高速USB、Ethernet、CAN、SPI、I2C、UART等,可以满足多样化的应用需求,简化系统设计。 3. 大容量存储:具备1MB的闪存和1MB的RAM,可以容纳较大规模的应用程序和数据。 4. 丰富的接口:支持多种外设接口,包括GPIO、ADC、DAC等,方便与各种传感器、执行器和外部设备的连接。 5. 安全性:集成了硬件加密引擎和安全管理单元,提供更高层次的系统安全性,保护应用程序和数据的完整性和机密性。 6. 先进的调试和开发支持:支持JTAG和SWD调试接口,配备了全面的开发工具链,方便开发人员进行软件开发和调试。 有关STM32H743的详细资料可以在意法半导体官方网站上找到,包括技术手册、应用笔记、示例代码等。此外,还有很多社区论坛和技术博客提供了丰富的教程和案例,帮助开发者更好地了解和使用STM32H743。不同的开发板和工具也可以为开发人员提供更加便利的开发和调试环境。 总之,STM32H743是一款功能强大、灵活性高、易于开发和应用的微控制器,适用于高性能应用场景。 ### 回答3: STM32H743是意法半导体(STMicroelectronics)推出的一款高性能微控制器。它基于ARM Cortex-M7内核,并配备了丰富的外设和存储器资源,适用于各种复杂的应用场景。 首先,STM32H743支持高达400MHz的主频,具有出色的处理能力。同时,它还内置了浮点单元(FPU),能够高效地进行浮点运算,提供了更为灵活的数据处理能力。 其次,STM32H743拥有128KB的SRAM和2MB的Flash存储器,可以满足大容量数据存储的需求。此外,它还支持外部存储器接口,如SDRAM和NOR Flash,可实现更大规模的存储空间扩展。 此外,STM32H743还提供了丰富的外设资源,包括多个通用串行总线接口(USB、UART、SPI、I2C等)、定时器、ADC/DAC、PWM等。这些外设能够满足各种不同应用的需求,提供强大的功能拓展能力。 此外,STM32H743还支持多种通信协议,如Ethernet、CAN和USB,便于与其他设备进行数据交换和通信。同时,它还具备LCD接口和音频DAC,适用于嵌入式显示和音频处理应用。 最后,STM32H743还提供了丰富的软件开发工具和资源支持。它可以使用ST的官方开发工具集(如STM32CubeIDE)进行开发,并提供了包括教程、参考手册、代码示例等在内的详细文档,方便开发者快速上手和开发应用。 总之,STM32H743是一款功能强大、资源丰富的微控制器,适用于各种复杂的嵌入式应用场景。它提供了高性能、丰富的外设和存储器资源以及全面的软件支持,可满足开发者对于高效、灵活的系统设计和开发需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值