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;
}
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出来看看是不是对齐的吧。。。