Ну, вроде как разобрался с тактированием.
По дефолту МК стартует с MSI-генератором, 2МГц.
Этот режим включен в дефолтном system_stm32l1xx.c
Это не всегда есть гуд, и мы можем переключиться на высокую частоту, пересобрав этот файлик под свои нужды, или применив команды настройки тактирования.
Я поигрался с параметрами, запускал разные источники клока, менял коэффициенты делителей, менял делитель системного таймера...
Собственно, мы запускаем нужный генератор, к примеру HSI (16Мгц)
RCC->CR |= ((uint32_t)RCC_CR_HSION);
Ждем, пока он стабилизуется -
while ((RCC->CR & RCC_CR_HSIRDY) == 0);
Подаем повышенное напряжение (1.8В) на цепи тактирования, дабы работала бОльшая частота -
PWR->CR = PWR_CR_VOS_0;
Ждем, пока оно устаканится -
while((PWR->CSR & PWR_CSR_VOSF) != 0);
Устанавливаем AHB-делитель в режим "не делить частоту", т.е. делитель равен 1 -
RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
Устанавливаем делители на периферию с нужными коэффициентами, или вообще 1 -
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
Сообщаем системе, что "Хачу HSI! Дай, да?" -
RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | RCC_CFGR_SW_HSI;
Ну и ждем, пока электронная буря от переключения успокоится... -
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI);
Система к работе готова...
Да, еще не мешало бы выставить системный таймер, вдруг пригодится -
SysTick_Config(16000);
Здесь 16000 - сколько тиков клока считать до отработки таймера. Поскольку мы только что установили системную частоту в 16000000 герц, то после установки таймера он будет срабатывать каждую миллисекунду. Подсчитывая эти "тики", легко строится функция задержки Delay, столь любимая упоротыми фанатами CodeVisionAVR
Воть, что я вынес из этой темы.Код:void SysTick_Handler(void) { //хендлер, "ловящий" тики системного таймера msTicks++; } void Delay (uint32_t dlyTicks) { uint32_t curTicks; curTicks = msTicks; while ((msTicks - curTicks) < dlyTicks); // собственно, ждем dlyTicks тиков таймера }
Если есть неправильности - с благодарностью приму затрещины от гуру![]()





ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Ответить с цитированием



ATARI 800XL+SIO2PC+SIO2SD