OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4648|回复: 1

STM32L15内部eeprom读写出错

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-8-22
在线时间
0 小时
发表于 2015-8-22 16:34:30 | 显示全部楼层 |阅读模式
5金钱
有用过stm32L15系列内部eeprom的吗,主函数里加入eeprom功能后不论如何修改代码,仿真的时候程序都会跳到HardFault_Handler里,
贴上代码大家帮忙看一下
[mw_shl_code=c,true]/*********************************************************************** ?????????EEPROM.C ?? ????????eeprom??????×÷???? ±à???±????2015-08-21 ±à ?? ???? ×? ???? ***********************************************************************/ #include "main.h" /*------------------------------------------------------------ Func: EEPROM????°?×??????? Note: ------------------------------------------------------------*/ void EEPROM_ReadBytes(u16 Addr,u8 *Buffer,u16 Length) { u8 *wAddr; wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr++; } } /*------------------------------------------------------------ Func: EEPROM???????? Note: -------------------------------------------------------------*/ void EEPROM_ReadWords(u16 Addr,u16 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr++; } } /*------------------------------------------------------------ Func: EEPROM????°?×??????? Note: -------------------------------------------------------------*/ void EEPROM_WriteBytes(u16 Addr,u8 *Buffer,u16 Length) { u8 *wAddr; wAddr=(u8 *)(EEPROM_BASE_ADDR+Addr); DIS_INT FLASH->EKEYR=PEKEY1; //unlock FLASH->EKEYR=PEKEY2; while(FLASH->ECR&FLASH_PECR_PELOCK); FLASH->ECR|=FLASH_PECR_FTDW; //not fast write while(Length--){ *wAddr++=*Buffer++; while(FLASH->SR&FLASH_SR_BSY); } FLASH->ECR|=FLASH_PECR_PELOCK; EN_INT } /*------------------------------------------------------------ Func: EEPROM????°?×????? Note: ×??±°?×??? -------------------------------------------------------------*/ void EEPROM_WriteWords(u16 Addr,u16 *Buffer,u16 Length) { u32 *wAddr; wAddr=(u32 *)(EEPROM_BASE_ADDR+Addr); DIS_INT FLASH->EKEYR=PEKEY1; //unlock FLASH->EKEYR=PEKEY2; while(FLASH->ECR&FLASH_PECR_PELOCK); FLASH->ECR|=FLASH_PECR_FTDW; //not fast write while(Length--){ *wAddr++=*Buffer++; while(FLASH->SR&FLASH_SR_BSY); } FLASH->ECR|=FLASH_PECR_PELOCK; EN_INT } void EEPROM_Init(void) { DIS_INT FLASH->PEKEYR=PEKEY1; //unlock FLASH->PEKEYR=PEKEY2; [/mw_shl_code] [mw_shl_code=c,true]主函数[/mw_shl_code]
int main(void)
{
unsigned int i;
u16 buf[EEPROM_BYTE_SIZE],buf2[EEPROM_BYTE_SIZE];
EEPROM_Init(); 
LED_Configuration();
_Delay(0xfff);
LED1_ON;
_Delay(0xfff);
while(1)
{
LED1_ON;
_Delay(0xfff);
EEPROM_ReadWords((u16)0,buf2,EEPROM_BYTE_SIZE);

LED1_OFF;
_Delay(0xfff);
  }
     
 

 
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-8-22 20:12:41 | 显示全部楼层
没搞过,帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-15 22:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表