打印
[STM8]

stm8l内部eeprom块写问题,是不是寄存器bug

[复制链接]
6183|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szguoguo|  楼主 | 2011-12-13 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm8l内部eeprom块写问题用的库里的例子,测试有问题?
发现寄存器FLASH_CR2除了bit7 opt位外其它位不能写,一写就异常。
废话不说,直接上程序,stvd下测试
IN_RAM(void FLASH_ProgramBlock(uint16_t BlockNum, FLASH_MemType_TypeDef FLASH_MemType,
                        FLASH_ProgramMode_TypeDef FLASH_ProgMode, uint8_t *Buffer))
{
  uint16_t Count = 0;
  uint32_t startaddress = 0;
  
  /* Check parameters */
  assert_param(IS_FLASH_MEMORY_TYPE(FLASH_MemType));
  assert_param(IS_FLASH_PROGRAM_MODE(FLASH_ProgMode));
  if (FLASH_MemType == FLASH_MemType_Program)
  {
  assert_param(IS_FLASH_PROGRAM_BLOCK_NUMBER(BlockNum));
    startaddress = FLASH_PROGRAM_START_PHYSICAL_ADDRESS;
  }
  else
  {
    assert_param(IS_FLASH_DATA_EEPROM_BLOCK_NUMBER(BlockNum));
    startaddress = FLASH_DATA_EEPROM_START_PHYSICAL_ADDRESS;
  }
  /* Point to the first block address */
  startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_SIZE);
  /* Selection of Standard or Fast programming mode */
  if (FLASH_ProgMode == FLASH_ProgramMode_Standard)
  {
  /* Standard programming mode */
  //FLASH->CR2 |= FLASH_CR2_PRG;
#pragma asm
  LD A,0x5051
  OR A,#0X01
LD 0x5051,A
  #pragma endasm
  }
  else
  {
  /* Fast programming mode */
  //FLASH->CR2 |= FLASH_CR2_FPRG;
#pragma asm
  LD A,0x5051
  OR A,#0X10
LD 0x5051,A
  #pragma endasm
  }
tempdata=FLASH->CR2;
tempdata&=0x01;
if(tempdata==0x01)
{
  GPIOF->ODR &= ~(0x01);
}
else
{
  GPIOF->ODR |= 0x01;
}
  /* Copy data bytes from RAM to FLASH memory */
  for (Count = 0; Count < FLASH_BLOCK_SIZE; Count++)
  {
#if defined (STM8L15X_MD) || defined (STM8L15X_MDP) || defined (STM8L15X_LD)
  *((PointerAttr uint8_t*) (uint16_t)startaddress + Count) = ((uint8_t)(Buffer[Count]));
#elif defined (STM8L15X_HD)
  *((PointerAttr uint8_t*) (uint32_t)startaddress + Count) = ((uint8_t)(Buffer[Count]));
#endif
  }
}
沙发
szguoguo|  楼主 | 2011-12-13 13:43 | 只看该作者
有没有谁实际测过啊,测过的出来证实一下啊

使用特权

评论回复
板凳
火箭球迷| | 2011-12-22 20:45 | 只看该作者
错误提示贴出来看一下

使用特权

评论回复
地板
明月小厨| | 2012-12-11 21:13 | 只看该作者
本帖最后由 明月小厨 于 2012-12-14 22:30 编辑

FLASH_CR2=0x01;在STM8S105xx里是这样操作的,块编程;
当然是可以块写入EEPROM的;只是调试时很烦,估计是调试器对STM8的支持有限;
因为块写入的时间不短,此时CPU处于停机状态;调试器不知道发生了什么异常,有可能**.

我测试通过了;没有BUG;

使用特权

评论回复
5
明月小厨| | 2012-12-14 22:29 | 只看该作者
经过测试,EEPROM和FLASH字节,字,块写,擦都正常;

使用特权

评论回复
6
sunhongchao11| | 2014-12-19 10:09 | 只看该作者
本帖最后由 sunhongchao11 于 2014-12-19 10:10 编辑

我和楼主遇到了同样的问题,官方例程不能执行。芯片为STM8L015F3,把FLASH->CR2 |= FLASH_CR2_PRG删除就正常了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

47

帖子

2

粉丝