用STM8L做的仪表,用内部EEPROM保存参数;按键存储参数时执行下面这段程序。有时候会出现死机情况。调试发现,程序死在:FLASH_ProgramWord函数内。并不是每次保存参数都会发生,大多数时候没有问题,只是偶尔发生,不能理解。如果与使用的外设有关,我也是在执行本程序是关闭中断的啊,应该与外设无关吧 ,望达人指点 KEY_SET() { disableInterrupts(); IWDG_ReloadCounter(); FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard); FLASH_Unlock(FLASH_MemType_Program); while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET); FLASH_Unlock(FLASH_MemType_Data); while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET); FLASH_ProgramWord(0x1010+(Menu_Index |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:STM8L读写EEPROM偶尔会死机
RE:STM8L读写EEPROM偶尔会死机
调试时,程序停止在FLASH_ProgramWord内部,---假死机;单步运行能跳出这个程序并且能继续运行;
RE:STM8L读写EEPROM偶尔会死机
RE:STM8L读写EEPROM偶尔会死机
RE:STM8L读写EEPROM偶尔会死机
void EE_WRITE(void)
{
/* Define flash programming Time*/
FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);
FLASH_Unlock(FLASH_MemType_Program);
/* Wait until Flash Program area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET)
{}
/* Unlock flash data eeprom memory */
FLASH_Unlock(FLASH_MemType_Data);
/* Wait until Data EEPROM area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
{}
/* Erase block 0 and verify it */
/* This function is executed from RAM */
FLASH_EraseBlock(BLOCK_OPERATION, FLASH_MemType_Data);
/* Wait until End of high voltage flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
{}
/* This function is executed from RAM */
FLASH_ProgramBlock(BLOCK_OPERATION, FLASH_MemType_Data, FLASH_ProgramMode_Standard, ramBuf);
/* Wait until End of high voltage flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)
{}
}
ramBuf是自己定义的数组:uint8_t ramBuf[FLASH_BLOCK_SIZE];
程序进:FLASH_EraseBlock后死在里面
RE:STM8L读写EEPROM偶尔会死机
回复:STM8L读写EEPROM偶尔会死机
写之前关中断,写之后开中断
写完后马上读出来,用断点看数据读写没问题
但是去掉断点,复位, 把后边大循环里的外设处理程序一起跑起来,就会死
测了下写20个字节需要4ms,16Mhz的主频
楼主找到解决办法没有?
它的地址值不对,导致你擦除的这个区不对