STM32 L431实现W25Q64下载算法

步骤1.首先cubemax创建一个工程,然后打开STLINK的工程文件,拷贝驱动文件,最后文件目录为:

然后移植W25Q驱动

步骤2.将Dev_Inf.c的设备信息改为如下内容:

struct StorageInfo const StorageInfo  =  {
#endif
   "FXB_STM32L431_SPI_W25Q64",      // Device Name + version number
   SPI_FLASH,                   // Device Type
   0x00000000,                  // Device Start Address
   0x00800000,                  // Device Size in Bytes (8MBytes/64Mbits)
   0x00000100,                      // Programming Page Size 256Bytes  
   0xFF,                        // Initial Content of Erased Memory
// Specify Size and Address of Sectors (view example below)
   0x00000800, 0x00001000,                     // Sector Num: 2048 Sector Size: 4KBytes
   0x00000000, 0x00000000,
};

其中,设备名称会显示在STLINK

步骤3.实现stm32_eval_spi_flash.c Flash 中全部的读写驱动

步骤4.Keil中添加依赖文件和配置

此文件要加入ABSOLUTE ,否则编译会报错 Error: L6265E: Non-PI Section stm32l4xx_hal.o(.data) cannot be assigned to PI Exec region PrgData,

如果加入ABSOLUTE之后,就不能有任何全局变量,最终还是会报错,所以不加入ABSOLUTE之后,KIEL编译器必须加入read-only position independent 和 read-write position independent 选项,ASM中也必须添加,此选项可以让代码执行在RAM中,并且不具有固定的地址空间。

设置输出文件的地址,一般为STLINK的安装目录

cmd.exe /C copy "!L" "D:\Program Files (x86)\ST-LINK Utility\ExternalLoader\@L.stldr"

步骤5:取消掉程序入口

没有这一步STLINK中无法识别到算法文件。

main函数需要注释掉或改名

驱动移植:

全局变量不能使用!只能在函数内创建变量,包括w25q初始化结构体,SPI读写时的SPI_HandleTypeDef都只能在函数中定义使用,否则使用全局变量程序会异常。

程序中还需要重写这两个函数定义,因为无法使用中断和定时器,这一步,必须!

HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
{
	return HAL_OK;
}


void HAL_Delay(__IO uint32_t Delay)
{
	for(int i=0;i<Delay*4000;i++)
	{
	};
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值