Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с stm32f103vc
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
ex51
Может кто подскажет в какую сторону смотреть.

Написал программу на C++ под иар 5.50 отладил всё в ОЗУ. Собрался отдавать заказчику, прошил всё во внутренний флэш и получил полный ступор!!!

То есть, программа работает, но периодически вылетает в хардфаулт. В ОЗУ всё работает часами! Все опции компилятора одинаковые, уже и листинги все проверил, один к одному с версией в ОЗУ. Единственное, что сразу удалось обнаружить, что программа из флеш работает как минимум в два раза быстрее чем из ОЗУ.

Уже неделю бьюсь не могу понять чем работа во флеши так радикально отличается от работы в ОЗУ.
Может хоть направления поиска кто даст, куда смотреть. Ерату читал ничего криминального не обнаружил.
AHTOXA
Возможно неверно настроены waitstate для выполнения из флеша. Посмотрите инициализацию регистра FLASH->ACR. (Или с каким параметром вызывается FLASH_SetLatency()).
ex51
Да нет настройки вроде все правильные.

Вот кусок кода:

void RCC_Configuration(void)
{
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
initialize the PLL and update the SystemFrequency variable. */
RCC_DeInit();

// Enable external crystal generator
RCC_HSEConfig(RCC_HSE_ON);

/* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS) {
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // Enable Prefetch Buffer

FLASH_SetLatency(FLASH_Latency_2); // Flash 2 wait state

RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK

RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK

RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2

RCC_MCOConfig(RCC_MCO_PLLCLK_Div2); // MCO output frequency configure

RCC_ADCCLKConfig(RCC_PCLK2_Div6); // ADCCLK = PCLK2/6

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8); // PLLCLK = 7.3728MHz * 8 = 58.98 MHz

RCC_PLLCmd(ENABLE); // Enable PLL

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //* Wait till PLL is ready

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Select PLL as system clock source

while(RCC_GetSYSCLKSource() != 0x08); // Wait till PLL is used as system clock source
}

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // DMA clock enable
...

Частота кварца 7372800
ViKo
У меня ситуация подобная, только еще хуже. STM32F103, есть устройства на внешней шине, в том числе, контроллер ЖКИ. В симуляторе Keil как-то проходит программа. Только когда обращаюсь к контроллеру ЖКИ, почему-то останавливается и идет только по-шагам. В микроконтроллер с помощью ULINK-ME зашивается, верификация проходит. И генератор на 8 MHz запускается. Но дальше - никаких признаков жизни, в отладчике вываливается в Hard Fault. Даже не дойдя до инициализации ЖКИ.
Боюсь и спрашивать... Тут такие "монстры ARM"...
AHTOXA
Цитата(ex51 @ May 12 2010, 00:34) *
Да нет настройки вроде все правильные.


Да, вроде ничего криминального. Значит копайте глубже. Вот полезная тема. Доставайте адрес инструкции, вызвавшей HardFault, и анализируйте. Чудеса случаются, но не с намиsmile.gif

Цитата(ViKo @ May 12 2010, 00:48) *
У меня ситуация подобная, только еще хуже.


Вам совет точно такой же.
ViKo
Глядя в приведенный выше код, понял, что, кажется, я кое-чего не дописал в RCC.
Спасибо! Теперь направление, куда рыть, определилось.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.