使用Studio创建项目自动生成的代码中,board.h中有如下一段宏定义:
#define ROM_START ((uint32_t)0x08000000)
#define ROM_SIZE (1024)
#define ROM_END ((uint32_t)(ROM_START + ROM_SIZE * 1024))
#define RAM_START (0x20000000)
#define RAM_SIZE (128)
#define RAM_END (RAM_START + RAM_SIZE * 1024)
这里ROM_SIZE和RAM_SIZE的单位为kB,应该将单位统一到字节比较好,修改成如下:
#define ROM_START ((uint32_t)0x08000000)
#define ROM_SIZE (1024 * 1024)
#define ROM_END ((uint32_t)(ROM_START + ROM_SIZE))
#define RAM_START (0x20000000)
#define RAM_SIZE (128 * 1024)
#define RAM_END (RAM_START + RAM_SIZE)
因为在芯片flash驱动drv_flash_xx.h中使用了宏定义STM32_FLASH_SIZE,代码:
const struct fal_flash_dev stm32_onchip_flash = { "onchip_flash", STM32_FLASH_START_ADRESS, STM32_FLASH_SIZE, FLASH_PAGE_SIZE, {NULL, fal_flash_read, fal_flash_write, fal_flash_erase} };
STM32_FLASH_SIZE的定义在Drv_common.h中,代码:
#define STM32_FLASH_SIZE ROM_SIZE
所以,如果不把ROM_SIZE的单位改为字节,flash驱动就会发生错误。
每次生成新工程都需要修改ROM_SIZE和RAM_SIZE这里的定义
对于新手这就是个坑,一定会掉进去。