Модуль для работы с блоком 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