Вс июл 27, 2014 01:23:09
// Тактирование
RCC_DeInit(); // сброс настроек тактового генератора
RCC_HSEConfig(RCC_HSE_OFF); // отключение внешнего тактового генератора
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF | RCC_AHBPeriph_SRAM, ENABLE);
RCC_HSICmd(ENABLE);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2,RCC_PLLMul_4); // тактирование от HSI с делителем 2 * 4 = 16МГц
RCC_PLLCmd(ENABLE); // Включаем PLL
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // устанавливаем значение
// RTC
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);// Enable the PWR clock
PWR_BackupAccessCmd(ENABLE);// Allow access to RTC
RCC_LSEConfig(RCC_LSE_ON);// Enable the LSE OSC
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){} // Wait till LSE is ready
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);// Select the RTC Clock Source
RCC_RTCCLKCmd(ENABLE);// Enable the RTC Clock
RTC_WaitForSynchro();// Wait for RTC APB registers synchronisation
RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
RTC_InitStructure.RTC_SynchPrediv = 0x7FFF;
RTC_Init(&RTC_InitStructure);
#define FLASH_USER_START_ADDR ((unsigned long)0x08007000)
FLASH_Unlock();
FLASH_ErasePage(FLASH_USER_START_ADDR+1);
FLASH_ProgramWord(FLASH_USER_START_ADDR+1,0x0800F801);
FLASH_Lock();
Вс июл 27, 2014 06:46:41
#define FLASH_PAGE 15
#define ADR_START 0x08003C00
.....
void FlashWrite(uint32_t Address, uint32_t Data)
{FLASH_Unlock();FLASH_ProgramWord(Address,Data);FLASH_Lock();}
......
//erase page
FLASH_Unlock();
FLASH_ErasePage (FLASH_BASE + FLASH_PAGE * 1024);
FLASH_Lock();
//write data
FlashWrite(ADR_START + 4, Data[1]);
FlashWrite(ADR_START + 4*2, Data[2]);
FlashWrite(ADR_START + 4*3, Data[3]);
.....
Вс июл 27, 2014 09:01:07
Вс июл 27, 2014 09:28:50
Вс июл 27, 2014 19:13:11
Пн июл 28, 2014 08:52:23
Пн июл 28, 2014 13:50:57
Пн июл 28, 2014 15:06:56
Пн июл 28, 2014 20:57:01
Ср июл 30, 2014 14:15:57
Alex_EXE писал(а): кратно разрядности ячейки памяти - 4 байта.
Ср июл 30, 2014 16:08:43
Сб авг 02, 2014 13:35:59
Сб авг 02, 2014 23:17:28
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);
FLASH_ErasePage(CONFIG_START_ADDR);
FLASH_Lock();
U32 *source_addr = (void *)&config;
U32 *dest_addr = (void *)CONFIG_RECORD(config_record);
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR);
for (U16 i=0; i<CONFIG_WORDS; i++) {
FLASH_ProgramWord((U32)dest_addr, *source_addr);
source_addr++;
dest_addr++;
}
FLASH_Lock();
Пн авг 21, 2017 12:08:26
ANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6407E: Sections of aggregate size 0x40 bytes could not fit into .ANY selector(s).
ANV_AMP_MTR\ANV_AMP_MTR.axf: Error: L6406E: No space in execution regions with .ANY selector matching iusefp.o(.text).
HAL_FLASH_Unlock();
FLASH_EraseInitTypeDef EraseInitStruct;
EraseInitStruct.PageAddress = 0x08010000;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.NbPages = 1;
uint32_t SectorError = 0;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &SectorError) != HAL_OK)
{
HAL_FLASH_Lock();
}
HAL_FLASH_Unlock();
HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08010000, AHReady);
HAL_FLASH_Lock();