我用的芯片是STM8S207RBT6,Flash是128K,现在我想对芯片的Flash进行操作,大概情况如下:
unsigned long FlashAddr;
FlashAddr = 0x00018000;
FLASH_PUKR = 0x56;//Flash解锁
FLASH_PUKR = 0xAE;//Flash解锁
FLASH_CR1 |= MASK_FLASH_CR1_FIX;//编程时间固定为标准编程时间
*((unsigned char*)FlashAddr) = 1;
while( (FLASH->IAPSR & (FLASH_IAPSR_EOP | FLASH_IAPSR_WR_PG_DIS)) == 0);
if(*((unsigned char*)FlashAddr) == 1)//校验
return TRUE;
else
return FALSE;
结果编译器报警,conversion from integer to smalll pointer 我查了一下,原来unsigned char型指针只占两个字节,那么这样的话,最大只能访问到0xffff,但是我用的那款芯片是128K的Flash,地址是从0x8000-0x27ffff的,所以用上面的方法就行不通了。于是我换了一种方法:
unsigned int FlashAddr;
unsigned int FlashOffset;
FlashAddr = 0x8000;
FlashOffset = 0x0001;
*((unsigned char*)FlashAddr + FlashOffset*256*256) = 1;
成功骗过了编译器,但是执行后发现校验还是不行,也就是写进去的数据读出来不对。那到底怎么样才能对0xffff以后的Flash进行操作呢?
注:用的开发环境是IAR FOR STM8,那个写Flash的操作应该是正常的,因为从0x9000一直到0xffff都是正常的,当写到0x10000的时候校验就出错了。到底怎么才能访问地址超过16位的Flash啊,正式无语。。。。。。。 |