stm32内部读写flash,为什么读写会不一样
3个回答
意法半导体(中国)投资有限公司
2023-06-12
展开全部
推荐于2016-12-01 · 知道合伙人影视综艺行家
关注
展开全部
//
#define FLASHINT_ADDR ((uint32_t)0x08010000) //在60k的位置开始写配改握斗置数核磨据
#define FLASHINT_PAGE_COUNT (1)
int FlashInt_Write(uint32_t iAddress, uint8_t *buf, uint32_t iNbrToWrite)
{
uint32_t i;
uint16_t Data;
FLASH_Status FLASHStatus = FLASH_ERROR_WRP;
uint32_t EraseCounter = 0x00, Address = 0x00;
FLASH_UnlockBank1();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
for(EraseCounter = 0; (EraseCounter < FLASHINT_PAGE_COUNT) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
FLASHStatus = FLASH_ErasePage(FLASHINT_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
}
Address = iAddress + FLASHINT_ADDR;
for(i = 0;i<iNbrToWrite;)
{
if(i==(iNbrToWrite-1)) //最后1个字节
{
Data = *(buf+i) << 8;//奇数的皮隐时候,补零
}
else
{
Data = (*(buf+i)) << 8 + (*(buf+i+1));
}
// Data= (i << 8) + (i+1);
FLASH_ProgramHalfWord(Address,Data);
i+=2;
Address += 2;
}
FLASH_LockBank1();
return iNbrToWrite;
}
int FlashInt_Read(uint32_t iAddress, uint8_t *buf, int32_t iNbrToRead)
{
int i = 0;
uint32_t Address = 0x00;
Address = (iAddress + FLASHINT_ADDR);
while(i < iNbrToRead ) {
*(buf + i) = *(__IO uint8_t*) Address++;
i++;
}
return i;
}
#define FLASHINT_ADDR ((uint32_t)0x08010000) //在60k的位置开始写配改握斗置数核磨据
#define FLASHINT_PAGE_COUNT (1)
int FlashInt_Write(uint32_t iAddress, uint8_t *buf, uint32_t iNbrToWrite)
{
uint32_t i;
uint16_t Data;
FLASH_Status FLASHStatus = FLASH_ERROR_WRP;
uint32_t EraseCounter = 0x00, Address = 0x00;
FLASH_UnlockBank1();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
for(EraseCounter = 0; (EraseCounter < FLASHINT_PAGE_COUNT) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
{
FLASHStatus = FLASH_ErasePage(FLASHINT_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
}
Address = iAddress + FLASHINT_ADDR;
for(i = 0;i<iNbrToWrite;)
{
if(i==(iNbrToWrite-1)) //最后1个字节
{
Data = *(buf+i) << 8;//奇数的皮隐时候,补零
}
else
{
Data = (*(buf+i)) << 8 + (*(buf+i+1));
}
// Data= (i << 8) + (i+1);
FLASH_ProgramHalfWord(Address,Data);
i+=2;
Address += 2;
}
FLASH_LockBank1();
return iNbrToWrite;
}
int FlashInt_Read(uint32_t iAddress, uint8_t *buf, int32_t iNbrToRead)
{
int i = 0;
uint32_t Address = 0x00;
Address = (iAddress + FLASHINT_ADDR);
while(i < iNbrToRead ) {
*(buf + i) = *(__IO uint8_t*) Address++;
i++;
}
return i;
}
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一款广泛应用于消费类电子、汽车、工业和物联网领域的低功耗嵌入式系统芯片。ST公司推出了多个STM32系列,以满足不同应用需求。以下是ST公司主要的STM32系列:1. STM32WB系列:这是ST公司推出的第一款支持2.4GHz...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
读程序和写程序有问题 哪并 -------每次更改弯段写的值看看读的值埋缓誉是否也跟这着变,变动表示没问题。
在读和写程序没问题的情况下,那么看看写的值类型和返回值的类型,以及地址。
在读和写程序有问题,看手册。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关注这个问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询