|
Keil и STM32 |
|
|
|
Apr 12 2018, 13:11
|
Участник
Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011
|
Доброго времени суток всем! Взялся за STM32 совсем недавно, поэтому прошу быть снисходительными к моим вопросам. Перед STM32 были 8-битные AVR (у меня) на AVR Студии 4.19. Там в свойствах проекта выбираешь камень и частоту и пошел создавать проект. А как выбрать частоту в Keil? Задавая ее в окошке "Xtal"? А как мне сообщить нужную мне частоту SYSCLK? Я не хочу использовать CubeMx (тут как раз все просто), как до него решались вопросы с тактированием? Извините если спросил глупость, с Keil я еще очень на "вы".
|
|
|
|
|
Apr 12 2018, 14:03
|
Участник
Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011
|
Reference Manual или Programming manual? Я вот как раз сейчас "курю" RM0090 для STM32F4xx, так там одно железо, в смысле регистры. А "галок" я "наставился" в CubeMx. Мне хочется разобраться не не уровне "высоких абстракций HAL", а на уровне регистров.
|
|
|
|
|
Apr 12 2018, 14:27
|
Участник
Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011
|
Вот как раз сейчас и копаю RCC. Видел где-то в инете, что STM можно разогнать, решил попробовать. Простейший пример с диодами. Запускаю проект в отладчике кейла, смотрю состояние регистров конфигурации и сразу первая непонятка: PREDIV2 = 0x04 (деление на 5 ?) PREDIV1 = 0x04 (деление на 5 ?) PLL2MUL = 0x06 (умножение на 8) PLLMUL = 0x07 (умножение на 9) Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз.
|
|
|
|
|
Apr 12 2018, 14:30
|
Универсальный солдатик
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362
|
Вот так делаю для STM32F207. CODE inline void SysClk_init(void) { /* Reset and disable RCC Interrupts, on HSI and HSE, switch to HSI */ RCC->CIR = 0xFFFF0000; RCC->CR |= RCC_CR_HSION | RCC_CR_HSEON; while ((RCC->CR & RCC_CR_HSIRDY) != RCC_CR_HSIRDY) { } RCC->CFGR &= ~RCC_CFGR_SW; while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI) { }
/* Off PLL, set clock dividers */ RCC->CR &= ~RCC_CR_PLLON; RCC->CFGR = RCC_CFGR_SW_0 * 0 | // System clock Switch: HSI RCC_CFGR_HPRE_0 * 0 | // AHB prescaler: SYSCLK / 1 = 120 MHz RCC_CFGR_PPRE1_0 * 5 | // APB1 prescaler: AHB / 4 = 30 MHz RCC_CFGR_PPRE2_0 * 4 | // APB2 prescaler: AHB / 2 = 60 MHz RCC_CFGR_RTCPRE_0 * 0 | // HSE division factor for RTC clock RCC_CFGR_MCO1_0 * 3 | // MCO1: PLL clock selected RCC_CFGR_I2SSRC * 0 | // I2S clock selection: PLLI2S clock used RCC_CFGR_MCO1PRE_0 * 5 | // MCO1 prescaler: PLL / 3 = 40 MHz RCC_CFGR_MCO2PRE_0 * 5 | // MCO2 prescaler: SYSCLK / 3 = 40 MHz RCC_CFGR_MCO2_0 * 0; // MCO2: System clock selected RCC->PLLCFGR = RCC_PLLCFGR_PLLM_0 * 4 | // Div factor for PLL input: HSE / 4 = 2 MHz RCC_PLLCFGR_PLLN_0 * 120 | // PLL mult factor for VCO: 240 MHz RCC_PLLCFGR_PLLP_0 * 0 | // PLL div factor for system clock: VCO / 2 = 120 MHz RCC_PLLCFGR_PLLSRC * 1 | // PLL and PLLI2S clock source: HSE RCC_PLLCFGR_PLLQ_0 * 5; // PLL div factor for USB OTG FS...: VCO / 5 = 48 MHz
/* Check HSE on, on PLL, set Flash Latency */ while ((RCC->CR & RCC_CR_HSERDY) != RCC_CR_HSERDY) { } RCC->CR |= RCC_CR_PLLON; FLASH->ACR = FLASH_ACR_LATENCY_3WS | // Three wait states FLASH_ACR_PRFTEN * 1 | // Prefetch enable FLASH_ACR_ICEN * 1 | // Instruction cache enable FLASH_ACR_DCEN * 1 | // Data cache enable FLASH_ACR_ICRST * 0 | // Instruction cache reset FLASH_ACR_DCRST * 0; // Data cache reset
/* Check PLL on, switch to PLL */ while ((RCC->CR & RCC_CR_PLLRDY) != RCC_CR_PLLRDY) { } RCC->CFGR |= RCC_CFGR_SW_PLL; while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL) { } } Цитата(mihlit @ Apr 12 2018, 17:27) Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз. В Cube смотрите картинку с частотами, она на живая.
|
|
|
|
|
Apr 12 2018, 14:40
|
Участник
Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011
|
"Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?" Согласно RM, если включен контроль частоты, МК отключит HSE и перейдет на HSI/
|
|
|
|
|
Apr 12 2018, 14:43
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(x893 @ Apr 12 2018, 17:31) Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ? А если отвалится сам МК? Или ещё 100500 остальных элементов схемы? Как Вы такую проблему решаете? Цитата(x893 @ Apr 12 2018, 17:41) Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком, А если отвалится пискалка? Чем будете пищать? Да ещё так, чтобы услышали "хрен знает где"?
|
|
|
|
|
Apr 12 2018, 14:44
|
Участник
Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011
|
Ввел Вас в заблуждение: PREDIV2 = 0x04 (деление на 5 ?) PREDIV1 = 0x04 (деление на 5 ?) PLL2MUL = 0x06 (умножение на 8) PLLMUL = 0x07 (умножение на 9) это все относится к STM32f105rbt6, а не к STMf407/
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|