- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- эмуляция eeprom в stm32
эмуляция eeprom в stm32
- super_puper
- Автор темы
- Посетитель
11 года 6 мес. назад #4454
от super_puper
super_puper ответил в теме Re: эмуляция eeprom в stm32
там не не только умножается но и делиться пример позаимствовал тут же у Ягова Дениса
void rcc_config(void){// настройка частоты
RCC_ClocksTypeDef RCC_ClockFreq;
// Сбрасываем клокинг в "0"
RCC_DeInit();
// Включаем внешний кварц
RCC_HSEConfig(RCC_HSE_ON);
// Ждём пока устанавливается внешний ВЧ тактовый сигнал
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus != ERROR)
{
// Внешний тактовый сигнал появился, стабильный
// разрешаем использование буфера команд
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//
// итак
//Внешний кварц 25МГц
//Тактовая частота ядра: 72МГц
// частота шины PCLK2=72МГц
// частота шины PCLK1=36МГц
//
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
// Выставляем делители / множители частоты тактирования
RCC_PREDIV2Config(RCC_PREDIV2_Div5);
RCC_PLL2Config(RCC_PLL2Mul_8);
//Разрешаем PLL2
RCC_PLL2Cmd(ENABLE);
// Ждём пока устаканится PLL2
while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)
{}
// PLL2 - устаканился
// конфигурируем PLL1
RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
// Разрешаем PLL
RCC_PLLCmd(ENABLE);
// Ждём готовности PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{}
// Выбираем PLL как источник тактирования системы
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// Ждём пока PLL не станет клокингом системы
while (RCC_GetSYSCLKSource() != 0x08)
{}
}
RCC_GetClocksFreq(&RCC_ClockFreq);
// Тактирование портов АЦП и USB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO | RCC_APB2Periph_ADC1, ENABLE );
// Выбираем тактирование для USB
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
// Подключаем выбранное тактирование
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
}
void rcc_config(void){// настройка частоты
RCC_ClocksTypeDef RCC_ClockFreq;
// Сбрасываем клокинг в "0"
RCC_DeInit();
// Включаем внешний кварц
RCC_HSEConfig(RCC_HSE_ON);
// Ждём пока устанавливается внешний ВЧ тактовый сигнал
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus != ERROR)
{
// Внешний тактовый сигнал появился, стабильный
// разрешаем использование буфера команд
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//
// итак
//Внешний кварц 25МГц
//Тактовая частота ядра: 72МГц
// частота шины PCLK2=72МГц
// частота шины PCLK1=36МГц
//
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* ADCCLK = PCLK2/4 */
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
// Выставляем делители / множители частоты тактирования
RCC_PREDIV2Config(RCC_PREDIV2_Div5);
RCC_PLL2Config(RCC_PLL2Mul_8);
//Разрешаем PLL2
RCC_PLL2Cmd(ENABLE);
// Ждём пока устаканится PLL2
while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)
{}
// PLL2 - устаканился
// конфигурируем PLL1
RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
// Разрешаем PLL
RCC_PLLCmd(ENABLE);
// Ждём готовности PLL
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{}
// Выбираем PLL как источник тактирования системы
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
// Ждём пока PLL не станет клокингом системы
while (RCC_GetSYSCLKSource() != 0x08)
{}
}
RCC_GetClocksFreq(&RCC_ClockFreq);
// Тактирование портов АЦП и USB
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO | RCC_APB2Periph_ADC1, ENABLE );
// Выбираем тактирование для USB
RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3);
// Подключаем выбранное тактирование
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE) ;
}
- LineAir
- Посетитель
11 года 6 мес. назад #4455
от LineAir
LineAir ответил в теме Re: эмуляция eeprom в stm32
Понятно, почему виснет не знаю(
- k000858
- Посетитель
11 года 6 мес. назад #4456
от k000858
k000858 ответил в теме Re: эмуляция eeprom в stm32
наверное, потому что перед работой с флэш памятью необходимо разблокировать интерфейс
FLASH_Unlock();
FLASH_Unlock();
- LineAir
- Посетитель
11 года 6 мес. назад #4457
от LineAir
LineAir ответил в теме Re: эмуляция eeprom в stm32
У super_puper разблокировка есть:
FLASH->KEYR = FLASH_KEY1;
FLASH->KEYR = FLASH_KEY2;
- super_puper
- Автор темы
- Посетитель
11 года 5 мес. назад #4461
от super_puper
super_puper ответил в теме Re: эмуляция eeprom в stm32
а где взять файлы eeprom.h и eeprom.c которые описываются в AN2594
Application note
EEPROM emulation
in STM32F10x microcontrollers
- Денис Ягов
- Посетитель
11 года 5 мес. назад #4465
от Денис Ягов
Денис Ягов ответил в теме Re: эмуляция eeprom в stm32
Пример эмуляции во вложении
Время создания страницы: 0.037 секунд