微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > stm32f3 flash读取问题

stm32f3 flash读取问题

时间:12-13 整理:3721RD 点击:
之前一直使用stm32f1系列,最近开始使用stm32f3系列,发现有一个flash读取函数移植过来后跑不通,百思不得其解,求高手指导一下。具体问题是我在flash一部分地址空间存了一些float类型数据,写入正常,可是读出时出现异常,读出函数如下:
float flash_read(u32 Flash_Address)
{
    float temp = *((float *)(Flash_Address));
    return temp;
}
这个函数在f103芯片上工作完全正常,转到f303keil编译器也没报异常,但就是跑不通,通过单字节读取发现该地址引用的内存空间数据为00 00 80 3F,刚好是我存的float数据值1.0,也就是说数据本身并没有错,但是为什么读不出来?同样移植过来的另外一个函数工作正常,具体如下:
u8 flash_read_byte(u32 Flash_Address)
{
    u8 temp = *((__IO u8 *)(Flash_Address));
    return temp;
}

1. 103和303是在同一个编译器上么?
2. 加没加函数原型?

都在keil5.0下编译的,只是增加了支持f3系列的库,函数原型已经添加了  
  

既然按byte读可以,那就按unsigned long读回来然后强制转换成float试试?

待会试试,如果行难道是编译器编译的代码有问题?还是芯片的bug?  
  

uint32_t/fp32_t读写地址对齐了么……
忘记CM3/4是否支持非对齐访问以及相关行为了。

这样确实可以,已试  
  

按照tom6方式确实可以解决,说明地址应该是对齐了吧  
  

还是直接把地址printf出来看看是不是对齐的吧。。。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top