mihlit 0 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Доброго времени суток всем! Взялся за STM32 совсем недавно, поэтому прошу быть снисходительными к моим вопросам. Перед STM32 были 8-битные AVR (у меня) на AVR Студии 4.19. Там в свойствах проекта выбираешь камень и частоту и пошел создавать проект. А как выбрать частоту в Keil? Задавая ее в окошке "Xtal"? А как мне сообщить нужную мне частоту SYSCLK? Я не хочу использовать CubeMx (тут как раз все просто), как до него решались вопросы с тактированием? Извините если спросил глупость, с Keil я еще очень на "вы". Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Xtal - она для симулятора имеет смысл. А как программируется системная частота SYSCLK, смотрите в SystemInit функции. Согласно Reference Manual на МК. Не хотите в CubeMX, в Run-Time Environment в Keil жмите галки. Чтобы чисто с пустого каталога проект создать, так я не делал. Правда, потом я все равно свою функцию SystenInit сочиняю. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Reference Manual или Programming manual? Я вот как раз сейчас "курю" RM0090 для STM32F4xx, так там одно железо, в смысле регистры. А "галок" я "наставился" в CubeMx. Мне хочется разобраться не не уровне "высоких абстракций HAL", а на уровне регистров. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба RM, раздел RCC. Кроме регистров и памяти, в МК ничего больше программно недоступно. :rolleyes: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба А если посмотреть, что делает Cube по F11 для инициализации RCC и потом сверится с RM. И нести полученные знания по жизни. Но это такая мелкая часть реального проекта, что даже непонятно зачем тратить на это время. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Я тоже стараюсь всё по регистрам писать, безо всяких Кубов с прочими. А где нажать F11, чтобы посмотреть? F1? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Вот как раз сейчас и копаю RCC. Видел где-то в инете, что STM можно разогнать, решил попробовать. Простейший пример с диодами. Запускаю проект в отладчике кейла, смотрю состояние регистров конфигурации и сразу первая непонятка: PREDIV2 = 0x04 (деление на 5 ?) PREDIV1 = 0x04 (деление на 5 ?) PLL2MUL = 0x06 (умножение на 8) PLLMUL = 0x07 (умножение на 9) Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Вот так делаю для STM32F207. 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) { } } Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз. В Cube смотрите картинку с частотами, она на живая. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Вот сразу видно мастера ! Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ? У меня? Если кварц отвалится, нормальной работы уже не будет. HSI автоматически включится при сбое HSE. Мои устройства стоят на столе. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба "Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?" Согласно RM, если включен контроль частоты, МК отключит HSE и перейдет на HSI/ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком, что мол - моему кварцу капец - выручай ! Про кварц это просто пример, таких моментов много есть. Как и Создателей. Это не зависит от HAL/SPL/CMSIS - это просто подход другого уровня. Хотя если лампочкой моргать - то пофиг. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 234 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ? А если отвалится сам МК? Или ещё 100500 остальных элементов схемы? Как Вы такую проблему решаете? Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком, А если отвалится пискалка? Чем будете пищать? Да ещё так, чтобы услышали "хрен знает где"? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 55 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба поставлю 3 в ряд и отряд не заметит потери. Хотя если ядерный удар, то ничего не спасет наверное. Есть понятие - минимально необходимое оборудование. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 12 апреля, 2018 Опубликовано 12 апреля, 2018 · Жалоба Ввел Вас в заблуждение: PREDIV2 = 0x04 (деление на 5 ?) PREDIV1 = 0x04 (деление на 5 ?) PLL2MUL = 0x06 (умножение на 8) PLLMUL = 0x07 (умножение на 9) это все относится к STM32f105rbt6, а не к STMf407/ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться