问题是这样的,我在使用RT-Thread之前使用HAL库进行简单的片内flash读写。现在因为mcu ROM的限制没有办法使用相关RT-Thread的组件,也不想使用easyflash。
我要写入的flash内容很简单:
typedef struct
{
//间隔时间 默认1000ms
u16 interval;
//初始化状态
u8 initFlag;
} SAVE_DATA;
//写入flash的HAL代码
uint8_t write_Flash(uint32_t WriteAddr,uint16_t *data,uint16_t NumToWrite){
//1、解锁FLASH
HAL_FLASH_Unlock();
//2、擦除FLASH
//初始化FLASH_EraseInitTypeDef
FLASH_EraseInitTypeDef f;
f.TypeErase = FLASH_TYPEERASE_PAGES;
f.PageAddress = WriteAddr;
f.NbPages = (NumToWrite%1024)?NumToWrite/1024+1:NumToWrite/1024;
//设置PageError
uint32_t PageError = 0;
//调用擦除函数
HAL_FLASHEx_Erase(&f, &PageError);
if(0xFFFFFFFF != PageError) {
return 0x01;
}
//3、对FLASH烧写
uint16_t index = 0;
while(1) {
if((index*2)>=NumToWrite) {
break;
}
HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, WriteAddr+(index*2), *(data+index));
index++;
}
//4、锁住FLASH
HAL_FLASH_Lock();
return 0x00;
}
//调用
SAVE_DATA setting;
setting.interval = 5000;
setting.initFlag = 0xAA;
if(write_Flash(CUSTOMER_DATA_FLASH_ADDR,(uint16_t*)(&setting),sizeof(SAVE_DATA))){
//输出写入失败信息
}
上述代码稳定工作几年了,我想直接在RT-Thread使用复用。
现在面临的问题是,ENV生成的RT-Thead项目没有Flash相关的HAL库,我没法使用上述代码,如下图
缺少下图旧项目中的文件
请问各位朋友,我怎么才能把这两个HAL库文件加到项目中呢?
你好,如上所说在MDK5中添加h和c文件是可以,但是如何通过scons相关脚本来添加呢?在MDK5中添加后,再次使用scons --target=mdk5命令后,上述添加的文件都将消失,并且无法编译通过
@itdreamworks
bsp\stm32\libraries\STM32F4xx_HAL
这个路径下有个 SConscript 文件,开头有个文件列表,把STM32F1xx_HAL_Driver目录下所有文件都添加上。或者,根据配置,添加需要的文件,比如
按照你的路径修改一下这个
我晚上试一下
@出出啊 谢谢你,实验成功,flash可以使用旧代码访问了。