Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 21:10

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: STM32F100 HSE
СообщениеДобавлено: 18 фев 2011, 11:28 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Всем привет!
Возникли непонятки с запуском HSE (точнее с незапуском). Имеем код:
Код:
RCC_DeInit();
FLASH_SetLatency(FLASH_Latency_0);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if (HSEStartUpStatus == SUCCESS)
{
RCC_PREDIV1Config(RCC_PREDIV1_Source_HSE, RCC_PREDIV1_Div2);/* PLLCLK = (8MHz_ext/2) * 6 = 24 MHz */
RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_6);            
}
else
{
RCC_HSEConfig(RCC_HSE_OFF);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);      /* PLLCLK = (8MHz_int/2) * 6 = 24 MHz */
}
RCC_PLLCmd(ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{}


Функция RCC_WaitForHSEStartUp() из StdPeriphLib Driver v3.4.0 всегда возвращает SUCCESS, даже если кварц выдернут, как следствие, PLL не работает и проц не запускается, хотя должен автоматически выбираться режим тактирования PLL от HSI.
Это только у меня так? Кто сталкивался?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 18 фев 2011, 12:18 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
Откуда ты узнал что SUCCESS если "PLL не работает и проц не запускается" ?
Если из трассировки, так посмотри в регистры кто тогда запустился и работает.

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 18 фев 2011, 13:59 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Немного неправильно выразился. Проц запускается и работает, доходит до while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} и висит, т.к. RCC_FLAG_PLLRDY никогда не станет SET? т.к. на входе PLL ничего нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 19 фев 2011, 19:19 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
#define RCC_CR (*((volatile unsigned int *) 0x40021000))
#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */
#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */

RCC_CR|=RCC_CR_HSEON;
while(!(RCC_CR & RCC_CR_HSERDY))
{
;
}

Это вот у меня точно работает. Правда я не стал юзать стандартные либы - в них можно в 3х соснах заблудиться - а времени на блуждания нет.

Вот остальное тоже добавлю - только без дефайнов уже. они в основном стандартные кроме описания регистров устройств.

RCC_CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
RCC_CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
RCC_CFGR_PLLMULL9);
RCC_CR |= RCC_CR_PLLON;
/* Wait till PLL is ready */
while((RCC_CR & RCC_CR_PLLRDY) == 0)
{
}
/* Select PLL as system clock source */
RCC_CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
RCC_CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

/* Wait till PLL is used as system clock source */
while ((RCC_CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08)
{
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 20 фев 2011, 01:33 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
balu_dark писал(а):
#define RCC_CR (*((volatile unsigned int *) 0x40021000))
#define RCC_CR_HSEON ((uint32_t)0x00010000) /*!< External High Speed clock enable */
#define RCC_CR_HSERDY ((uint32_t)0x00020000) /*!< External High Speed clock ready flag */

RCC_CR|=RCC_CR_HSEON;
while(!(RCC_CR & RCC_CR_HSERDY))
{
;
}

Это вот у меня точно работает. Правда я не стал юзать стандартные либы - в них можно в 3х соснах заблудиться - а времени на блуждания нет.


Проверил ваш код. У меня не работает, причем на двух разных процах. Флаг RCC_CR_HSERDY устанавливается всегда не зависимо от того, установлен кварц или нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 20 фев 2011, 02:32 
Старожил

Зарегистрирован: 25 апр 2010, 10:13
Сообщения: 1927
Откуда: Томск
Я так подозреваю что это не флаг который срабатывает при стабильной частоте, а просто срабатывает через какую-то заданную задержку после RCC_CR_HSEON и всё.

_________________
Какое небо голубое....(с) лиса Алиса


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 20 фев 2011, 19:07 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
ну без кварца я контроллер както не догадался пытать. у меня китайская плата с 8 мег кварцем. по началу были какие то траблы ( уже не помню или как раз не выбирался внешний кварц или PLL не запускался) . но с текущим кодом работает ттт.
и 72 мегагерца завелось ок.
почитайте внимательно тут : http://easyelectronics.ru/img/ARM_kurs/CMSIS/stm32.pdf
касаемо выбора и конфигурирования частот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 21 фев 2011, 00:42 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
У меня без проблем все заводится на разных частотах, это не проблема. При работе от кварца, если его оторвать на горячую, даже автоматически переключается на HSI. Но вот при старте, если кварц отключен, это проверить никак не удается. У кого есть дискавери, проверьте пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 21 фев 2011, 05:20 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
там у проца есть какаято шняга для защиты именно от этого. счас некогда глянуть в мануал но есть проверка - запустился ли внешний генератор. тоже гдето в RCC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 21 фев 2011, 17:52 
Заглядывает иногда

Зарегистрирован: 01 июн 2010, 11:04
Сообщения: 139
Код:
while(!(RCC_CR & RCC_CR_HSERDY))
{
;
}

это и есть проверка, только она не работает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 21 фев 2011, 18:05 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 621
Откуда: Севастополь
не не.... счас поищу...
нашол - имел я ввиду CSS :
Цитата:
Clock Security System can be activated by software. In this case, the clock detector is
enabled after the HSE oscillator startup delay, and disabled when this oscillator is stopped.
If a failure is detected on the HSE oscillator clock, this oscillator is automatically disabled, a
clock failure event is sent to the break input of the advanced-control timers (TIM1 and TIM8)
and an interrupt is generated to inform the software about the failure (Clock Security System
Interrupt CSSI), allowing the MCU to perform rescue operations. The CSSI is linked to the
Cortex™-M3 NMI (Non-Maskable Interrupt) exception vector.


Только нужны доп. телодвижения и написание обработчика немаскируемого прерывания.
зато по идее - прикроет попку при случае не работающего кварца в изделии клиента. можно хоть диаг светодиод наверно запалить при событии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 29 июн 2011, 09:46 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 314
Откуда: Новочеркасск
Добрый день подскажите как затактированить STM32f100x от HSI чтобы ядро тактировалось на 24 МГц. Использую IAR и его библиотеки, как понимаю нужно поправить функцию SystemInit() или достаточно закоментировать всё? вот здесь:
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL)
/* #define SYSCLK_FREQ_HSE HSE_Value */
/* #define SYSCLK_FREQ_24MHz 24000000 */
#else
/* #define SYSCLK_FREQ_HSE HSE_Value */
/* #define SYSCLK_FREQ_24MHz 24000000 */
/* #define SYSCLK_FREQ_36MHz 36000000 */
/* #define SYSCLK_FREQ_48MHz 48000000 */
/* #define SYSCLK_FREQ_56MHz 56000000 */
#define SYSCLK_FREQ_72MHz 72000000
#endif


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F100 HSE
СообщениеДобавлено: 30 июн 2011, 12:55 
Старожил

Зарегистрирован: 24 июн 2011, 14:05
Сообщения: 314
Откуда: Новочеркасск
О чудо, в SystemInit() вставил вконец:
RCC_HSEConfig(RCC_HSE_OFF);
RCC_HSICmd(ENABLE);

RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

RCC_PLLCmd(ENABLE);
закоментировал /* #define SYSCLK_FREQ_24MHz 24000000 */ для того чтобы функция SetSysClock(); ничего не делала


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Tester500


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB