使用STM8S005C6做IAP的时候, 使用了Flash的标准块编程, 执行了使能Flash标准块编程后, MCU就不执行了, 从串口上看到无输出, 断点也没有执行到. 以下是调用的代码及设置:
- #pragma section (FLASH_CODE)
- //addr must at begin of block
- void FLASH_ProgBlock(uint8_t * addr, uint8_t *Buffer)
- {
- u8 i;
- FLASH->CR2 |= (uint8_t)0x01; // 这里执行到...
- FLASH->NCR2 &= (uint8_t)(~0x01); //这里之后就不执行了
-
- for (i = 0; i < BLOCK_BYTES; i++)
- {
- //*((PointerAttr uint8_t*) (uint16_t)addr + i) = ((uint8_t)(Buffer[i]));
- }
- }
- #pragma section ()
当然, 在标准块编程前, 已经解锁了Flash:
FLASH->PUKR = 0x56;
FLASH->PUKR = 0xAE;
_fctcpy('F');//把Flash部分的代码拷贝到Ram
想不明白为什么会出问题. 各位, 能给个思路吗?
|