本帖最后由 游者幻魂 于 2019-2-26 17:48 编辑
使用正点原子的例程写代码,发现有如下的问题:
1、读取 Flash的内容时,读到最后0x0803 FFFE的值为0xFFFF AAAA ,结果报错进入HardFault_Handler死循环;#define FLASH_USER_EEROM 0x0803fc00
- STMFLASH_Read(secpos*STM_SECTOR_SIZE+STM32_FLASH_BASE,STMFLASH_BUF,STM_SECTOR_SIZE/2);
复制代码 后来把 FLASH_USER_EEROM由0x0803fc00改为0x0803f400,结果才不会报错。
2、改完后继续运行又有报错,单步调试发现是如下红色的代码时出错,一时找不到出问题的地方。
- FLASHSRSTATUS STMFLASH_GetStatus(void)
- {
- u32 Flash_SR_Temp;
- <font color="#ff0000">Flash_SR_Temp=FLASH->SR; //出错的地方</font>
- if(Flash_SR_Temp&FLASH_SR_BSY_Msk)
- return Flash_SR_Busy;
- else if(Flash_SR_Temp&FLASH_SR_PGERR_Msk)
- return Flash_SR_PgErr;
- else if(Flash_SR_Temp&FLASH_SR_WRPRTERR_Msk)
- return Flash_SR_WrPrtErr;
- else
- return Flash_SR_EOP;
- }
复制代码 寄存器状态如下:
查了一天时间,知道是读取flash地址0X0803FFFE出错,但是不知道怎么解决!
查表是“精确的数据访问违例”
|
另外,如果有我们开发板的话,直接在我们例程基础上修改看看。
评分
查看全部评分
空间是足够的,STM32F105VCT6B,256KB的ROM空间,设置里面的起始地址是0x0800 0000 ,SIZE是0x4 0000,FLASH开始读取的地址是0x0803 FC00,后面的1K数据就是作为模拟EEPROM使用。
在原子的开发板上开发例程里面调试没有发现这个问题,移植到我的工程里面才有这个问题,已经移植了一段时间了,没有用到就没发现,现在用到了才发现这个问题。解决不了就把我的工程文件一个个移出去、屏蔽不需要的变量,只保留读写FALSH的文件,还是一样出错,另外设置保持和你们原子的设置一样的
出问题的工程
test.rar
2018-10-12 09:19 上传
点击文件名下载附件
下载积分: ST金币 -16.94 MB, 下载次数: 123, 下载积分: ST金币 -1
æ´æ°
评分
查看全部评分
我使用的是HAL库,不是标准库,然后出错的函数是正点原子编写读取FALSH状态的函数,在写FALSH前第一次读取CR是OK,写完FLASH第二次读取CR状态就报错!困扰我的问题是找不到第二次读取CR的值时出错的原因,使用HaedFault_handler中断函数调试出来的寄存器原因是“精准的数据访问违例”,如果是HAL库出问题应该是直接进报错中断函数了!或者是库函数出来的时候FALSH的访问地址就出错了,导致下一次的FALSH读取时出错!我想这个问题不能定性为越界或者内存出错的问题,应该是指针出错,而且是在库函数出来的那一刻FLASH地址被串改了!下一次用到时就报错
现在移植到标准库了,没有报错!