Перейти к содержанию

    

Доброго времени суток всем!

Взялся за STM32 совсем недавно, поэтому прошу быть снисходительными к моим вопросам.

Перед STM32 были 8-битные AVR (у меня) на AVR Студии 4.19. Там в свойствах проекта выбираешь камень и частоту и пошел создавать проект. А как выбрать частоту в Keil? Задавая ее в окошке "Xtal"? А как мне сообщить нужную мне частоту SYSCLK?

Я не хочу использовать CubeMx (тут как раз все просто), как до него решались вопросы с тактированием?

Извините если спросил глупость, с Keil я еще очень на "вы". :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Xtal - она для симулятора имеет смысл.

А как программируется системная частота SYSCLK, смотрите в SystemInit функции. Согласно Reference Manual на МК.

Не хотите в CubeMX, в Run-Time Environment в Keil жмите галки. Чтобы чисто с пустого каталога проект создать, так я не делал. Правда, потом я все равно свою функцию SystenInit сочиняю.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Reference Manual или Programming manual? Я вот как раз сейчас "курю" RM0090 для STM32F4xx, так там одно железо, в смысле регистры.

А "галок" я "наставился" в CubeMx. Мне хочется разобраться не не уровне "высоких абстракций HAL", а на уровне регистров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

RM, раздел RCC.

Кроме регистров и памяти, в МК ничего больше программно недоступно. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если посмотреть, что делает Cube по F11 для инициализации RCC и потом сверится с RM.

И нести полученные знания по жизни.

Но это такая мелкая часть реального проекта, что даже непонятно зачем тратить на это время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже стараюсь всё по регистрам писать, безо всяких Кубов с прочими.

А где нажать F11, чтобы посмотреть? F1?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот как раз сейчас и копаю RCC. Видел где-то в инете, что STM можно разогнать, решил попробовать. Простейший пример с диодами.

Запускаю проект в отладчике кейла, смотрю состояние регистров конфигурации и сразу первая непонятка:

PREDIV2 = 0x04 (деление на 5 ?)

PREDIV1 = 0x04 (деление на 5 ?)

PLL2MUL = 0x06 (умножение на 8)

PLLMUL = 0x07 (умножение на 9)

Считаю частоту - получается 23,04MHz ? Или я что-то упускаю из виду. Ткните-пните плиз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так делаю для 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 смотрите картинку с частотами, она на живая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?

У меня? Если кварц отвалится, нормальной работы уже не будет. HSI автоматически включится при сбое HSE.

Мои устройства стоят на столе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?"

Согласно RM, если включен контроль частоты, МК отключит HSE и перейдет на HSI/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком, что мол - моему кварцу капец - выручай ! Про кварц это просто пример, таких моментов много есть. Как и Создателей.

Это не зависит от HAL/SPL/CMSIS - это просто подход другого уровня.

Хотя если лампочкой моргать - то пофиг.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Интересно, что произойдет, если кварц отвалится от вибрации (например), а устройство стоит хрен знает где ?

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

 

Можно и так конечно, а можно использовать HSI и пискнуть создателю последним писком,

А если отвалится пискалка? Чем будете пищать? Да ещё так, чтобы услышали "хрен знает где"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поставлю 3 в ряд и отряд не заметит потери.

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

 

Есть понятие - минимально необходимое оборудование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ввел Вас в заблуждение:

PREDIV2 = 0x04 (деление на 5 ?)

PREDIV1 = 0x04 (деление на 5 ?)

PLL2MUL = 0x06 (умножение на 8)

PLLMUL = 0x07 (умножение на 9)

это все относится к STM32f105rbt6, а не к STMf407/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация