реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> Keil и STM32
mihlit
сообщение Apr 12 2018, 13:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011



Доброго времени суток всем!
Взялся за STM32 совсем недавно, поэтому прошу быть снисходительными к моим вопросам.
Перед STM32 были 8-битные AVR (у меня) на AVR Студии 4.19. Там в свойствах проекта выбираешь камень и частоту и пошел создавать проект. А как выбрать частоту в Keil? Задавая ее в окошке "Xtal"? А как мне сообщить нужную мне частоту SYSCLK?
Я не хочу использовать CubeMx (тут как раз все просто), как до него решались вопросы с тактированием?
Извините если спросил глупость, с Keil я еще очень на "вы". help.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2018, 13:45
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Xtal - она для симулятора имеет смысл.
А как программируется системная частота SYSCLK, смотрите в SystemInit функции. Согласно Reference Manual на МК.
Не хотите в CubeMX, в Run-Time Environment в Keil жмите галки. Чтобы чисто с пустого каталога проект создать, так я не делал. Правда, потом я все равно свою функцию SystenInit сочиняю.
Go to the top of the page
 
+Quote Post
mihlit
сообщение Apr 12 2018, 14:03
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011



Reference Manual или Programming manual? Я вот как раз сейчас "курю" RM0090 для STM32F4xx, так там одно железо, в смысле регистры.
А "галок" я "наставился" в CubeMx. Мне хочется разобраться не не уровне "высоких абстракций HAL", а на уровне регистров.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2018, 14:12
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



RM, раздел RCC.
Кроме регистров и памяти, в МК ничего больше программно недоступно. rolleyes.gif
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2018, 14:16
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



А если посмотреть, что делает Cube по F11 для инициализации RCC и потом сверится с RM.
И нести полученные знания по жизни.
Но это такая мелкая часть реального проекта, что даже непонятно зачем тратить на это время.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2018, 14:20
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я тоже стараюсь всё по регистрам писать, безо всяких Кубов с прочими.
А где нажать F11, чтобы посмотреть? F1?
Go to the top of the page
 
+Quote Post
mihlit
сообщение Apr 12 2018, 14:27
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011



Вот как раз сейчас и копаю RCC. Видел где-то в инете, что STM можно разогнать, решил попробовать. Простейший пример с диодами.
Запускаю проект в отладчике кейла, смотрю состояние регистров конфигурации и сразу первая непонятка:
PREDIV2 = 0x04 (деление на 5 ?)
PREDIV1 = 0x04 (деление на 5 ?)
PLL2MUL = 0x06 (умножение на 8)
PLLMUL = 0x07 (умножение на 9)
Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2018, 14:30
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 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 смотрите картинку с частотами, она на живая.
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2018, 14:31
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Вот сразу видно мастера !

Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Apr 12 2018, 14:36
Сообщение #10


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(x893 @ Apr 12 2018, 17:31) *
Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?

У меня? Если кварц отвалится, нормальной работы уже не будет. HSI автоматически включится при сбое HSE.
Мои устройства стоят на столе.
Go to the top of the page
 
+Quote Post
mihlit
сообщение Apr 12 2018, 14:40
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011



"Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?"
Согласно RM, если включен контроль частоты, МК отключит HSE и перейдет на HSI/
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2018, 14:41
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком, что мол - моему кварцу капец - выручай ! Про кварц это просто пример, таких моментов много есть. Как и Создателей.
Это не зависит от HAL/SPL/CMSIS - это просто подход другого уровня.
Хотя если лампочкой моргать - то пофиг.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 12 2018, 14:43
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(x893 @ Apr 12 2018, 17:31) *
Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?

А если отвалится сам МК? Или ещё 100500 остальных элементов схемы? Как Вы такую проблему решаете?

Цитата(x893 @ Apr 12 2018, 17:41) *
Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком,

А если отвалится пискалка? Чем будете пищать? Да ещё так, чтобы услышали "хрен знает где"?
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 12 2018, 14:44
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



поставлю 3 в ряд и отряд не заметит потери.
Хотя если ядерный удар, то ничего не спасет наверное.

Есть понятие - минимально необходимое оборудование.
Go to the top of the page
 
+Quote Post
mihlit
сообщение Apr 12 2018, 14:44
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 7-04-18
Пользователь №: 103 011



Ввел Вас в заблуждение:
PREDIV2 = 0x04 (деление на 5 ?)
PREDIV1 = 0x04 (деление на 5 ?)
PLL2MUL = 0x06 (умножение на 8)
PLLMUL = 0x07 (умножение на 9)
это все относится к STM32f105rbt6, а не к STMf407/
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 04:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016