用ST-LINK Utility实现外部spiflash程序下载

文章介绍了如何使用STM32ST-LINKUtility工具直接对STM32F103开发板上的外部SPIFlash(W25Q128)进行读写操作,从而避免了通过SD卡拷贝数据的不便。作者提供了源码和详细步骤,包括设备准备、文件配置、读写擦除函数的声明,以及验证函数的实现,便于读者学习和应用。
摘要由CSDN通过智能技术生成

在之前的学习中,一直用外部SPI Flash存放字库文件,之前的数据下载方法是用SD卡拷贝到SPIFLASH中,一直觉得在开发板上学习还算方便,如果在项目中应用,不是很方便,偶然机会,发现ST官方工具STM32 ST-LINK Utility可对外部SPIFLASH直接进行读写。于是尝试在原子精英板STM32 ST-LINK U上进行实验,并成功将字库文件下载到外部SPIFLASH,现把实现方法分享出来,方便大家共同学习,不完善之处还请多多指教!

平台:原子精英开发板(SPIFLASH芯片型号W25Q128),STM32F103,ST-LINK/V2

准备工作

1. 官网或社区下载软件STM32 ST-LINK Utility v4.2.0 setup.exe,并安装

2. W25Q128_STM32F1_Elite.stldr文件制作

源码见附件,该文件需要根据自己的硬件平台做出相应的修改

3.将制作好的文件放在 安装目录\STMicroelectronics\STM32 ST-LINKUtility\ST-LINK Utility\ExternalLoader下

4.添加LOADER文件

5.在ExternalLoader菜单先对外部SPIFLASH进行读、写、擦除等操作。

源码可从我的资源中下载

定义存储区信息

struct StorageInfo const StorageInfo  =  {
   "W25Q128_STM32F1xx",         // Device Name + version number
   SPI_FLASH,                      // Device Type
   0x00000000,                    // Device Start Address
   0x01000000,                     // Device Size in Bytes (16MBytes/128Mbits)
   256,                         // Programming Page Size 256Bytes    
   0xFF,                           // Initial Content of Erased Memory
   4096, 0,                     // Sector Size: 4KBytes    
   SECTOR_END                    // SECTOR_END
};

声明读函数

int Read (uint32_t Address, uint32_t Size, uint8_t* buffer)
{ 
    sFLASH_ReadBuffer(buffer, Address, Size);    
    return 1;
} 

声明写函数

int Write (uint32_t Address, uint32_t Size, uint8_t* buffer)
{
    sFLASH_WriteBuffer(buffer, Address, Size);    
    return 1;
} 

声明擦除函数

int MassErase (void)
{  
    sFLASH_EraseBulk();
    return 1;    
}

声明扇区擦除函数

int SectorErase (uint32_t EraseStartAddress ,uint32_t EraseEndAddress)
{      
    EraseStartAddress = EraseStartAddress -  EraseStartAddress%0x10000;
    while (EraseEndAddress>=EraseStartAddress)
    {
     sFLASH_EraseSector(EraseStartAddress);
     EraseStartAddress += 0x10000;
    }
     return 1;    
}

声明更新函数

int Verify (uint32_t MemoryAddr, uint32_t RAMBufferAddr, uint32_t Size)
{ 
        uint32_t VerifiedData = 0;
        uint8_t TmpBuffer = 0x00;
        Size*=4;
        
        while (Size>VerifiedData)
        {
          sFLASH_ReadBuffer(&TmpBuffer, MemoryAddr+VerifiedData, 1);
          
          if (TmpBuffer != *((uint8_t*)RAMBufferAddr+VerifiedData))
            return MemoryAddr+VerifiedData;
          
          VerifiedData++;  
        }
        
        return 0;
}

声明:文章内容为原创,曾在其他论坛发表过。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Keil5是一款ST公司推出的嵌入式开发环境,适用于开发STM32系列单片机的软件。STM32标准库是ST公司提供的一套软件库,其中包含了许多关于STM32单片机的驱动程序和示例代码。 外部SPI Flash是一种外部存储器芯片,可以通过SPI总线与STM32单片机进行通信,实现数据的读写功能。要在Keil5中进行外部SPI Flash下载算法制作,首先需要了解SPI总线的通信协议以及外部Flash的规格和接口。 在Keil5中,可以通过编写C语言代码的方式实现外部SPI Flash下载算法。首先,需要定义与SPI Flash通信相关的寄存器地址、命令等参数。然后,可以使用SPI总线的驱动函数来初始化SPI接口,并按照SPI Flash的通信协议进行数据的读写操作。 具体而言,可以按照以下步骤进行外部SPI Flash下载算法制作: 1. 定义SPI Flash的相关参数,如芯片选择引脚、SPI总线的时钟速度等。 2. 初始化SPI总线,包括设置IO口模式、配置SPI时钟等。 3. 配置SPI Flash的命令、地址和数据长度。 4. 发送写使能命令,允许对SPI Flash进行写入操作。 5. 发送写命令和地址,将数据写入SPI Flash。 6. 发送读命令和地址,从SPI Flash读取数据。 7. 关闭SPI总线。 通过以上步骤,可以实现外部SPI Flash下载算法制作。然后,可以将制作好的下载算法加入Keil5的工程中,通过编译和下载程序STM32单片机上,从而实现外部SPI Flash的数据读写功能。这样,可以充分利用外部存储器扩展STM32单片机的存储容量,提高系统的性能和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值