STM32 keil MDK配置FPU详解

这篇具有很好参考价值的文章主要介绍了STM32 keil MDK配置FPU详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录下keil对FPU的配置,及对应的宏参数。


前言

FPU单元是芯片上一个独立于CPU处理的浮点运算单元,整个单元可以被使能和关闭。
STM32F4带有32位单精度硬件FPU支持浮点指令集。相比Cortex-M3、Cortex-M0等无FPU的芯片高出数十倍甚至上百倍的运算性能。
STM32F7/H7及以上处理器带有双精度硬件FPU。
如果芯片支持FPU的话,ST公司会在驱动库中添加对应宏定义__FPU_PRESENT
下面这个是STM32G4系列,支持FPU
fpu stm32,stm32,单片机,嵌入式硬件

没有FPU的芯片一般不会有这个宏定义,就像下面这个F1的
fpu stm32,stm32,单片机,嵌入式硬件


一、一些宏的说明

有效配置FPU的方法如下图所示:
fpu stm32,stm32,单片机,嵌入式硬件
其中可以看到,真正有效的配置是一句寄存器设置,而控制这句指令是否使用的是两个宏(__FPU_PRESENT == 1) && (__FPU_USED == 1)。前者是表示FPU功能是否存在,后者表示程序员是否要使用FPU。
所以对于有FPU的芯片,直接在C/C++的全局宏定义里添加__FPU_USED=1便可以打开FPU功能。像下面这样:
fpu stm32,stm32,单片机,嵌入式硬件
但是这种方法不常用,也不方便。

二、勾选开启FPU

对于使用CubeMX的用户,如果芯片带有FPU,会默认开启FPU功能,即下面的勾选框:
fpu stm32,stm32,单片机,嵌入式硬件
无FPU的芯片是没有这个选项的(附F1界面):
fpu stm32,stm32,单片机,嵌入式硬件

那么这个选项到底影响了什么?

先说结论,看库的这段代码:
fpu stm32,stm32,单片机,嵌入式硬件
如果用的编译器是ARM Compiler 5,那么__CC_ARM是定义的,次一级的__TARGET_FPU_VFP就是对应上面的选择框的,选了__TARGET_FPU_VFP就有定义,不选他就会把__FPU_USED置0,也就是不使用FPU。如果勾选了选择框,首先会检查是否有FPU,没有就会报错;有的话他会#define __FPU_USED 1U 把它置1,从而使能system_stm32xxxx.c中那句指令,开启FPU。

以下的测试代码是我当时为了搞明白对应关系写的,可以有选择地注释掉部分报错指令,来观察定义关系:文章来源地址https://www.toymoban.com/news/detail-669271.html

#if defined __TARGET_FPU_VFP
    #error "def __TARGET_FPU_VFP"
    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
      #error "def __FPU_PRESENT == 1U"
      #define __FPU_USED       1U
      #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
        #error "FPU OK!!!"
      #endif
    #else
      #error "device without an FPU (check __FPU_PRESENT)"
      #define __FPU_USED       0U
    #endif
  #else
    #error "undef __TARGET_FPU_VFP"
    #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)
      #error "def __FPU_PRESENT == 1U"
      #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
        #error "FPU OK!!!"
      #else
        #error "__FPU_PRESENT != 1   ||  __FPU_USED != 1"
      #endif
    #else
      #error "device without an FPU (check __FPU_PRESENT)"
    #endif
  #endif

到了这里,关于STM32 keil MDK配置FPU详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 专门针对数字电源相关应用,STM32G474CBT3/ STM32G474QET3/ STM32G474RBT3/ STM32G484CBT3带有DSP和FPU指令的混合信号MCU【嵌入式】

    STM32G4系列集成了运行于170 MHz的32位Arm® Cortex®-M4内核(支持FPU和DSP指令),以及3种不同的硬件加速器:ART Accelerator™、CCM-SRAM程序执行加速器,以及数学运算加速器。STM32G4系列还提供: 丰富的高级模拟外设(比较器、运算放大器、DAC) 支持硬件过采样的ADC(16位分辨率) 具

    2024年01月19日
    浏览(25)
  • proteus结合keil-arm编译器构建STM32单片机项目进行仿真

        proteus是可以直接创建设计图和源码的,但是源码编译它需要借助keil-arm编译器,也就是我们安装keil-mdk之后自带的编译器。     下面给出一个完整的示例,主要是做一个LED灯闪烁的效果。     新建工程指定路径,Schematic,PCB layout都选择默认,在最后创建项目工程向导的时

    2024年02月13日
    浏览(23)
  • 单片机 嵌入式开发软件介绍对比与推荐(Keil、IAR、VSCode、Clion、STM32CubeIDE)

    单片机 嵌入式开发软件介绍对比与推荐(Keil、IAR、VSCode、Clion、STM32CubeIDE) KEI官网:www.keil.com         Keil与MDK(Microcontroller Development Kit)是同一个软件开发工具套件的不同名称。         Keil是一家德国公司,而MDK是他们开发的一款集成开发环境(IDE),通常称为Keil

    2024年02月06日
    浏览(39)
  • 【32单片机学习】(11)STM32启动过程详解

    目录 前言 一、系统架构 二、启动配置 三、启动流程 1.首先复位MCU,获取栈顶指针MSP和PC指针的内容 2.根据PC的值找到复位中断处理函数Reset_Handler 1.进入中断处理函数Reset_Handler 2.进入SystemInit函数 3._main函数 3.进入main函数 总结          通过查阅官方手册和对实际代码进行

    2024年02月08日
    浏览(23)
  • MDK keil5新建STM32工程文件--实践篇

    一、先下载芯片支持包 第一步 :当然是先百度搜索我们的keil官网(网址):https://www.keil.com/   第二步 :点击首页的Project,会跳转如界面,再次点击Arm Cortex-M,如图所示:    第三步 :点击后会再次跳转,这时候我们再次点击Public Software Packs,如图所示: 第四步 :点击后

    2024年02月16日
    浏览(26)
  • keil官网下载MDK的STM32芯片pack包

    背景         最近重装了电脑系统,重新安装了MDK所以导致MDK芯片包需要重新下载,软件内下载又太慢,所以趁现在找到了官网下载方法把方法分享出来供大家参考。 1、在浏览器中输入网址:www.keil.arm.com进入如下界面,然后点击:Hardware -Devices 2、在Devices中选择,在红色方框

    2024年02月13日
    浏览(21)
  • Keil MDK编程环境下的 STM32 IAP下载(学习笔记)

    ICP ICP(In Circuit Programing)。在电路编程,可通过 CPU 的 Debug Access Port 烧录代码,比如 ARM Cortex 的 Debug Interface 主要是 SWD(Serial Wire Debug) 或 JTAG(Joint Test Action Group); ISP ISP(In System Programing)。在系统编程,可借助 MCU 厂商预置的 Bootloader 实现通过板载 UART 或 USB 接口烧录代码,比如

    2024年02月06日
    浏览(17)
  • 单片机 STM32启动文件详解(汇编语言解析)

    以前讲了固件库,从ST官网下载的固件库里面,有许多的启动文件(汇编语言写的.s文件) 启动文件 说明 startup_stm32f10x_ld.s Low Density 小容量 startup_stm32f10x_md.s Medium Density 中容量 startup_stm32f10x_hd.s High Density 高容量 startup_stm32f10x_xl.s Extra Large Density 超大容量 startup_stm32f10x_cl.s Con

    2023年04月25日
    浏览(24)
  • 单片机STM32看门狗详解(嵌入式学习)

    单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。 STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立

    2024年02月13日
    浏览(19)
  • MDK Keil5 创建Stm32工程-理论篇(这里以Stm32F103Zet6为例)

    整个工程可以粗略的划分为几个文件夹: BSP 底层驱动比如GPIOTimer等驱动文件 CMSIS 内核相关的文件 Firmware 生成的固件下载文件 Mycode 用户编写的相关文件,主要编写的文件都在这个文件夹里 Project 工程文件 startup 芯片启动文件 STM32F10x_FWLib 标准库文件 USER 主函数等文件 readm

    2023年04月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包