Сб ноя 24, 2018 22:58:56
Сб ноя 24, 2018 23:34:38
Сб ноя 24, 2018 23:37:21
Вс ноя 25, 2018 00:13:59
Вс ноя 25, 2018 00:38:22
Вс ноя 25, 2018 07:22:38
Вс ноя 25, 2018 13:02:32
Вс ноя 25, 2018 13:04:22
Вс ноя 25, 2018 13:11:37
Вс ноя 25, 2018 13:14:29
Вс ноя 25, 2018 13:29:32
Вс ноя 25, 2018 17:26:01
Вот ты упёртый. Говорят же тебе, что при входе в main уже выставлена частота 72 МГц. Выкинуть настройки тактирования из main нах!
void clock_ini(void)
{ //настройка тактирования
ErrorStatus HSEStartUpStatus;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ----------*/
RCC_DeInit(); /* Системный RESET RCC (делать не обязательно, но полезно на этапе отладки) */
RCC_HSEConfig( RCC_HSE_ON); /* Включаем HSE (внешний кварц) */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Ждем пока HSE будет готов */
if (HSEStartUpStatus == SUCCESS) /* Если с HSE все в порядке */
{
/* Следующие две команды касаются исключительно работы с FLASH.
Если вы не собираетесь использовать в своей программе функций работы с Flash,
FLASH_PrefetchBufferCmd( ) та FLASH_SetLatency( ) можно закомментировать */
//FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable); /* Включаем Prefetch Buffer */
/* FLASH Latency.
Рекомендовано устанавливать:
FLASH_Latency_0 - 0 < SYSCLK? 24 MHz
FLASH_Latency_1 - 24 MHz < SYSCLK ? 48 MHz
FLASH_Latency_2 - 48 MHz < SYSCLK ? 72 MHz */
FLASH_SetLatency( FLASH_Latency_2);
RCC_HCLKConfig( RCC_SYSCLK_Div1); /* HCLK = SYSCLK */ /* Смотри на схеме AHB Prescaler. Частота не делится (RCC_SYSCLK_Div1) */
RCC_PCLK2Config( RCC_HCLK_Div1); /* PCLK2 = HCLK */ /* Смотри на схеме APB2 Prescaler. Частота не делится (RCC_HCLK_Div1) */
RCC_PCLK1Config( RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */ /* Смотри на схеме APB1 Prescaler. Частота делится на 2 (RCC_HCLK_Div2) потому что на выходе APB1 должно быть не более 36МГц (смотри схему) */
/* PLLCLK = 8MHz * 9 = 72 MHz */
/* Указываем PLL от куда брать частоту (RCC_PLLSource_HSE_Div1) и на сколько ее умножать (RCC_PLLMul_9) */
/* PLL может брать частоту с кварца как есть (RCC_PLLSource_HSE_Div1) или поделенную на 2 (RCC_PLLSource_HSE_Div2). Смотри схему */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd( ENABLE); /* Включаем PLL */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} /* Ждем пока PLL будет готов */
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK); /* Переключаем системное тактирование на PLL */
while (RCC_GetSYSCLKSource() != 0x08) {} /* Ждем пока переключиться */
}
else /* Проблемы с HSE. Тут можно написать свой код, если надо что-то делать когда микроконтроллер не смог перейти на работу с внешним кварцом */
{
while (1) {} /* Пока тут заглушка - вечный цикл*/
}
}
Вс ноя 25, 2018 17:32:48
Вс ноя 25, 2018 18:34:48
Флеш может только на 24МГц работать, что бы она смогла работать с системной тактовой выше нужны задержки.
void SystemInit (void)
{
/* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;
/* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
#ifndef STM32F10X_CL
RCC->CFGR &= (uint32_t)0xF8FF0000;
#else
RCC->CFGR &= (uint32_t)0xF0FF0000;
#endif /* STM32F10X_CL */
/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;
/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;
/* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
RCC->CFGR &= (uint32_t)0xFF80FFFF;
#ifdef STM32F10X_CL
/* Reset PLL2ON and PLL3ON bits */
RCC->CR &= (uint32_t)0xEBFFFFFF;
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x00FF0000;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
/* Reset CFGR2 register */
RCC->CFGR2 = 0x00000000;
#else
/* Disable all interrupts and clear pending bits */
RCC->CIR = 0x009F0000;
#endif /* STM32F10X_CL */
#if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
#ifdef DATA_IN_ExtSRAM
SystemInit_ExtMemCtl();
#endif /* DATA_IN_ExtSRAM */
#endif
/* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
/* Configure the Flash Latency cycles and enable prefetch buffer */
SetSysClock();
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif
}
Вс ноя 25, 2018 18:50:47
Прошивка выполняется с флеша. Скорость доступа не моментальная, а с небольшой задержкой и это нужно учитывать, иначе будут сбои.DENIS451 писал(а):То есть, если я пытаюсь записывать ничего во флэш я могу вообще делитель FLASH_SetLatency( FLASH_Latency_2); у себя в проекте не настраивать?
Там же написано.DENIS451 писал(а):зачем здесь: http://www.avislab.com/blog/keil_ru/ предлагают прописать STM32F10X_CL
STM32F10X_CL задает тип МК.Без этих опций проект не будет нормально компилироваться.
STM32F10X_CL относится к Connectivity line devices, а STM32F10X_MD к Medium-density devices.DENIS451 писал(а):STM32F10X_CL у меня не прописан, проект не соберётся, на картинке вообще STM32F10X_MD!
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
Вс ноя 25, 2018 19:01:28