Вт авг 14, 2012 22:25:59
if(FLASH->CR&FLASH_CR_LOCK)
{
FLASH->KEYR=FLASH_KEY1;
FLASH->KEYR=FLASH_KEY2;//проверял, разблокируется успешно
}
FLASH->CR|= FLASH_CR_PG;
*addr=(uint16_t)data;
while(FLASH->SR&FLASH_SR_BSY);//вот здесь всё зависает
FLASH->CR &= ~FLASH_CR_PG;
FLASH->CR |= FLASH_CR_LOCK;
Вт авг 14, 2012 22:28:49
Вт авг 14, 2012 22:41:59
FLASH_Unlock();
FLASH_ProgramHalfWord(0x08004000, (uint16_t)0x1234);
FLASH_Lock();
Ср авг 15, 2012 13:09:33
void save_param_to_flash(uint32_t first_address_page)
{
//unlock flash
FLASH->KEYR=0x45670123;
FLASH->KEYR=0xCDEF89AB;
//set programing bit
FLASH->CR |= FLASH_CR_PG;
//save time
*((uint16_t*)first_address_page) = time;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save frequency
*((uint16_t*)first_address_page+2) = frequency;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save time_on
*((uint16_t*)first_address_page+4) = percent;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save mode
*((uint16_t*)first_address_page+6) = mode;
while((FLASH->SR & FLASH_SR_BSY) != 0){;}
//save current
*((uint16_t*)first_address_page+8) = current;
FLASH->CR &= ~FLASH_CR_PG;
//lock flash
FLASH->CR |= FLASH_CR_LOCK;
}
Ср авг 15, 2012 13:46:10
*((uint32_t*)0x08004000)=0x1234;
Чт авг 16, 2012 23:02:50