打印
[STM32]

stm32f107 使用内部FLASH

[复制链接]
260|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2021-2-4 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟从网上找的例程是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<countToRead;dataIndex++)
      {
       readData[dataIndex]=FLASH_ReadHalfWord(startAddress+dataIndex*2);
      }
    }
     
    //读取指定地址的半字(16位数据)
    uint16_t FLASH_ReadHalfWord(uint32_t address)
    {
      return*(__IO uint16_t*)address;
    }
     
    //读取指定地址的全字(32位数据)
    uint32_t FLASH_ReadWord(uint32_t address)
    {
      uint32_t temp1,temp2;
     temp1=*(__IO uint16_t*)address;
     temp2=*(__IO uint16_t*)(address+2);
      return(temp2<<16)+temp1;
    }
   
   
   
    //从指定地址开始写入多个数据
void FLASH_WriteMoreData(uint32_t startAddress,uint16_t *writeData,uint16_t countToWrite)
{
if(startAddress<FLASH_BASE||((startAddress+countToWrite*2)>=(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<countToWrite;dataIndex++)
  {
   FLASH_ProgramHalfWord(startAddress+dataIndex*2,writeData[dataIndex]);
  }

FLASH_Lock();//上锁写保护
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1413

主题

3779

帖子

5

粉丝