Модуль для работы с блоком RCC. (будет постепенно наполняться функциональностью)
main.h
/* * main.h * * Created on: 17 февр. 2018 г. * Author: Work */ #ifndef MAIN_H_ #define MAIN_H_ #include <stddef.h> #include <stdint.h> #include "stm32f4xx.h" #endif /* MAIN_H_ */
Функции:
void SysClock_Init(void) { FLASH->ACR = FLASH_ACR_LATENCY_5WS; // настраиваем систему тактирования RCC->CR |= RCC_CR_HSEON; //включаем генератор HSE while(!(RCC->CR & RCC_CR_HSERDY)); //ожидание готовности HSE RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE | _RCC_PLLCFGR_PLLQ(8) | _RCC_PLLCFGR_PLLN(360) | _RCC_PLLCFGR_PLLM(8); // настройка PLL RCC->CR |= RCC_CR_PLLON; //включаем PLL while(!(RCC->CR & RCC_CR_PLLRDY)); //ожидание готовности PLL RCC->CFGR = RCC_CFGR_PPRE1_DIV4 | RCC_CFGR_PPRE2_DIV2 | RCC_CFGR_SW_PLL; // настраиваем делители шин и переводим тактирование от PLL }
Настройка системы тактирования, вызываеться только один раз из состояния после сброса, вместо сгенерированных функций начальной инициализации. Постарался написать удобные дефайны для масок.
Функция настроит систему так (кварцевый резонатор 8 МГц):
- источник тактовых сигналов HSE;
- тактирование от PLL;
- частота тактирования 180 МГц;
- частота тактирования APB1 - 45 МГц;
- частота тактирования APB2 - 90 МГц;
- латентность флеши 6 циклов (2.7 V - 3.6 V, 150 <HCLK ≤ 180);
Модуль тут: https://drive.google.com/open?id=1wBGT0 … nNP9IRrDXM