各位大神,我现在移植一套程序到stm32F4上,之前是在PC机上跑的,考虑到这款芯片有FPU所以选的这款,在DEBUG的时候发现很多问题,除了设置FPU外,发现一些很简单的运算也会出问题,不知道有没有遇到同样问题的人,经常会跳到HardFault_Handler这个函数中去,有没有人知道这怎么解决的?
之前是因为FPU设置没有开启,所以遇到浮点运算就会崩溃,一些简单的浮点赋值语句就会崩溃,但是现在开启了,但是现在一些简单的计算还是会崩溃,有没有人遇到过这种情况的?
今天也在找这个问题,看到这个还是12年的帖子,帖子中还没有解决问题的方法。我把我找到的分享一下:
这是ST的库的问题,在systeminit的函数里,加上以下这一句就行了,就是打开fpu的意思,没有这一句,选了keil的选项也没用的,另外你试试keil的软仿貌似也是不行的,从0x00000无法跳转,总之太新了,bug太多。
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
关键字:stm32F4 浮点计算
引用地址:
stm32F4做浮点计算的问题
推荐阅读最新更新时间:2024-03-16 15:15
第47章 STM32F429的SPI 总线应用之SPI Flash的MDK下载算法制作
47.1 初学者重要提示 SPI Flash的相关知识点可以看第31章和32章。 SPI Flash下载算法文件直接采用HAL库制作,方便大家自己修改。 47.2 MDK下载算法基础知识 Flash编程算法是一种用于擦除应用程序或将应用程序下载到Flash的程序代码。MDK本身支持的各种器件都自带下载算法,存放在MDK各种器件的软件包里面,以STM32F4为例,算法存放在KeilSTM32F4xx_DFP2.15.0CMSISFlash(软件包版本不同,数值2.15.0不同),但不支持的需要我们自己制作,本章教程为此而生。 47.2.1 程序能够通过下载算法下载到芯片的核心思想 认识到这点很重要:通过MDK创建一批与地址信
[单片机]
STM32F429——GPIO
除非特别说明,否则本部分适用于整个 STM32F4xx 系列 七 .通用I/O简介 7.1 GPIO 简介 每个通用 I/O 端口包括 4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 、GPIOx_PUPDR), 2个32位数据寄存器( GPIOx_IDR 和GPIOx_ODR)、1个32位置位/复位寄存器(GPIOx_BSSR)、1个32位锁定寄存器(GPIOx_LCKR)和 2个32位复用功能选择寄存器(GPIOx_AFRH和GPIOx_AFRL)。 7.2 GPIO工作模式 GPIO可以设置成一下模式 1.输入模式(上拉/下拉/浮空) 在输入模式
[单片机]
迁移51 的 LCD12864 到 Stm32F407
假期参加电赛崩了。。。闲的无聊,准备做一些底层的代码分享一下,也算是给自己磨炼一下吧。 这次做的是Stm32F407ZGT6 驱动LCD12864 的代码测试的时候使用的是正点原子的探索者 STM32F4开发板、 LCD 插在清翔的51单片机开发板上注意我是用的是 带有中文字库的版本 这里注意驱动LCD需要给模块一个参考电压也就是上图的VO否则LCD显示会出异常(颜色过深或者过浅) 我也是因为这个 所以才使用了成品开发板的电路 程序是从51单片机的程序上迁移过来的,咱们不做深究,只是注重一些迁移的细节。 以上是三个控制引脚的设置,其实还有几个是PSB需要设置,这个是一直拉高我就没用IO了 就直接接到VCC了
[单片机]
stm32f4xx 加密
一、ID获取 34 设备电子签名 电子签名存储在 Flash 区。可以使用 JTAG/SWD 或 CPU 对其进行读取。它包含出厂前编程 的标识数据,这些标识数据允许用户固件或其它外部设备将其接口与 STM32F4xx 微控制器 的特性自动匹配。 34.1 唯一设备 ID 寄存器(96 位) 唯一设备标识符最适合: ● 用作序列号(例如 USB 字符串序列号或其它终端应用程序) ● 在对内部 Flash 进行编程前将唯一 ID 与软件加密原语和协议结合使用时用作安全密钥以 提高 Flash 中代码的安全性 ● 激活安全自举过程等 96 位的唯一设备标识符提供了一个对于任何设备和任何上下文都唯一的参考号码。用户永远 不能改变这些
[单片机]
基于STM32F407的官方版UCOS III源码,增加了FPU浮点支持
基于CORTEX-M4的STM32F407最大的特色就是加入了一个FPU浮点处理器,能支持DSP运算。但是UCOS III官方的移植版本竟然不支持FPU浮点运算,如果在MDK的设置选项中把使能FPU打上的话运行的时候会把芯片带到硬fault,我用STLINK逐步跟踪,发现在使能FPU后系统在进行任务堆栈切换的时候发生错误进入硬fault,遂在GOOGLE上搜索了半天,并查看了M4的参考手册,发现使能FPU之后系统在进入中断的时候会自动将部分FPU寄存器入栈,而不支持FPU的UCOS移植版本显然没有为FPU寄存器做堆栈设置,所以在堆栈进行还原的时候导致还原点不同,进入硬fault。下面逐一分析: 1. 在UCOS III for S
[单片机]
STM32F40探索者开发板如何实现基础的远程检测以及控制
本次教程主要为了实现 STM32F407 探索者开发板通过中移 Cat.1 4G 模组转接板 ML302-GC211 接入机智云,实现基础的远程检测以及控制。 01 教程材料准备 STM32F407 探索者开发板 中移 Cat.1 4G 模组转接板 ML302-GC211 02 教程实现内容 远程控制 LED ; 远程控制蜂鸣器; 远程采集 CPU 温度。 03 云端部署部分教程 ►进入机智云开发者中心。 https://dev.gizwits.com/zh-cn/developer/product/ ►点击右上角创建新产品。 ►创建新产品。 ►由于本次需要实现控制 LED ,蜂鸣器和采集 STM32F407 芯片的内
[单片机]
STM32F407 关于TIM1输出PWM
通过 CCxE、 CCxNE、 MOE、 OSSI 和 OSSR 位(TIMx_CCER 和TIMx_BDTR 寄存器)的组合使能 OCx 输出。实际上,需要将TIMx_BDTR 寄存器的 MOE和AOE位置1。这就是和普通配置PWM输出的不同点。代码如下↓ /******************************************************************* * 功 能: * 作 者: Jahol Fan * 参 数: * 返回值: * 其 他: PA9 PWM输出控制转速,PA9的复用功能1是TIM1_CH2, TIM1:168MHZ *****************
[单片机]
stm32f429移植littlevGL
说明一下,工程文件太大了,没办法上传,大家按照我的步骤一步一步即可完成移植 昨夜折腾到3点,在移植一个比较小巧的GUI,用的st的库文件,不是HAL版本的,好不容易移植成功,在添加触摸驱动的文件时,出现了所找的驱动文件是用HAL库函数写的,真想骂ST啊,有毛病,搞那么多版本的驱动,是研发人员太多了,还是有病啊,叫人无语,一时间,也静不下来去仔细研究库文件了,就想直接改成HAL的库,结果悲剧啊,N多错误,把我搞得精疲力尽的,无奈啊。只好下载HAL的库,然后今天白天为了以后使用方便,把工程模板从HAL库中提取出来,本来单位的电脑只有4G内存,就跑不快,这个折腾啊,好不容易,断断续续,花了2个小时才把模板完全提取出来,不用在那一堆文
[单片机]