打印

KEIL下基于STM32F407 的W25Q16 下载算法分享

[复制链接]
640|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在这自己做了基于F407 W25Q16 的下载算法,
给大家分享下源码,
H750 的QSPI也是类似的,使用了内存映射就可以运行程序的,集体看ST给的HAL 例程 很详细的

其他的东西具体可以看源码。
这里给大家说几个东西,
1.MDK默认使用的Code/Const 存放的地方在0x90000000, 所以在sct文件里面修改一下,没有使用的数据会被优化掉
原文件
LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

LR_ROM1 0x90000000 0x00200000  {
  ER_ROM1 0x90000000 0x00200000  {  ; load address = execution address
    test.o (+RO)
   .ANY (+RO)
  }
}


修改后:
LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
}

LR_ROM1 0x90000000 0x00200000  {
  ER_ROM1 0x90000000 0x00200000  {  ; load address = execution address
    test.o (+RO)
  }
}


2.下载算法的空间尽量弄大一些

3.读取数据时, 因为TEXTSPI 的地址是 0x90000000  所以要获取真实地址W25QXX_Read(datatemp,(u32)TEXTSPI,SIZE);                                        //
void W25QXX_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{
         u16 i;
        u32 __ReadAddr = 0;        
        
        __ReadAddr = ReadAddr & 0xffffff;         //获取真实地址
                                                                                            
        W25QXX_CS=0;                            //使能器件   
    SPI1_ReadWriteByte(W25X_ReadData);         //发送读取命令   
    SPI1_ReadWriteByte((u8)((__ReadAddr)>>16));  //发送24bit地址   
    SPI1_ReadWriteByte((u8)((__ReadAddr)>>8));   
    SPI1_ReadWriteByte((u8)__ReadAddr);   
    for(i=0;i<NumByteToRead;i++)
        {
        pBuffer=SPI1_ReadWriteByte(0XFF);   //循环读数  
    }
        W25QXX_CS=1;                                                   
}  

链接:https://pan.baidu.com/s/1IJpk3LyhMAw8DLu__3A6mw
提取码:1804
补充一个:
void W25QXX_FastRead(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   
{
         u16 i;
        u32 __ReadAddr = 0;
        
        __ReadAddr = ReadAddr & 0xffffff;
                                                                                            
        W25QXX_CS=0;                                    //使能器件   
    SPI1_ReadWriteByte(W25X_FastReadData);       //发送读取命令   
    SPI1_ReadWriteByte((u8)((__ReadAddr)>>16));  //发送24bit地址   
    SPI1_ReadWriteByte((u8)((__ReadAddr)>>8));   
    SPI1_ReadWriteByte((u8)__ReadAddr);  
        SPI1_ReadWriteByte(W25X_Dummy);
        
    for(i=0;i<NumByteToRead;i++)
        {
        pBuffer=SPI1_ReadWriteByte(0XFF);   //循环读数  
    }
        W25QXX_CS=1;                                                   
}

使用特权

评论回复

相关帖子

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

本版积分规则

457

主题

483

帖子

1

粉丝