STM32
直播中

douyin8

13年用户 1181经验值
私信 关注
[问答]

stm32f107使用内部FLASH失败的原因?

小弟从网上找的例程是F103的 我用的是F107VCT6,看了半天代码,自己又找了一个103做实验,103调通了,可是107失败了,程序没变,请问还有哪些地方需要更改一下,下面附上flash.c,二楼放MAIN.c


    //从指定地址开始读取多个数据
    void FLASH_ReadMoreData(uint32_t startAddress,uint16_t *readData,uint16_t countToRead)
    {
      uint16_t dataIndex;
     for(dataIndex=0;dataIndex=(FLASH_BASE+1024*FLASH_SIZE)))
  {
   return;//非法地址
  }
FLASH_Unlock();         //解锁写保护
  uint32_t offsetAddress=startAddress-FLASH_BASE;               //计算去掉0X08000000后的实际偏移地址
  uint32_t sectorPosition=offsetAddress/SECTOR_SIZE;            //计算扇区地址,对于STM32F103VET6为0~255

  uint32_t sectorStartAddress=sectorPosition*SECTOR_SIZE+FLASH_BASE;    //对应扇区的首地址

FLASH_ErasePage(sectorStartAddress);//擦除这个扇区

  uint16_t dataIndex;
for(dataIndex=0;dataIndex

回帖(1)

李鸿

2024-4-9 17:57:14
在将STM32F103的例程移植到STM32F107上时,可能需要根据不同芯片的Flash大小和地址进行一些更改。在你提供的代码中,有一个地方需要更改:

1. 在函数`FLASH_ReadMoreData`中,判断读取地址是否超出了Flash的范围时,你使用了`FLASH_BASE+1024*FLASH_SIZE`作为Flash的末地址。但是,STM32F107的Flash大小为256KB,所以正确的Flash末地址应为`FLASH_BASE+256*1024`。因此,你需要将下面这行代码进行更改:

```c
#define FLASH_SIZE 256      // Flash的大小为256KB
```

另外,在移植过程中,还需要确保正确配置相关的Flash参数,如Flash起始地址、大小、扇区大小等,以便正确操作和读取Flash。

此外,还要确保对应的Flash操作函数和中断向量表正确设置。具体可以参考ST官方提供的STM32F107参考手册和相关文档,对比不同芯片的差异,进行相应的修改和调试。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分