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

Проблема с stm32f103vc

Может кто подскажет в какую сторону смотреть.

 

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

 

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

 

Уже неделю бьюсь не могу понять чем работа во флеши так радикально отличается от работы в ОЗУ.

Может хоть направления поиска кто даст, куда смотреть. Ерату читал ничего криминального не обнаружил.

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


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

Возможно неверно настроены waitstate для выполнения из флеша. Посмотрите инициализацию регистра FLASH->ACR. (Или с каким параметром вызывается FLASH_SetLatency()).

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


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

Да нет настройки вроде все правильные.

 

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

 

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

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


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

У меня ситуация подобная, только еще хуже. STM32F103, есть устройства на внешней шине, в том числе, контроллер ЖКИ. В симуляторе Keil как-то проходит программа. Только когда обращаюсь к контроллеру ЖКИ, почему-то останавливается и идет только по-шагам. В микроконтроллер с помощью ULINK-ME зашивается, верификация проходит. И генератор на 8 MHz запускается. Но дальше - никаких признаков жизни, в отладчике вываливается в Hard Fault. Даже не дойдя до инициализации ЖКИ.

Боюсь и спрашивать... Тут такие "монстры ARM"...

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


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

Да нет настройки вроде все правильные.

 

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

 

У меня ситуация подобная, только еще хуже.

 

Вам совет точно такой же.

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


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

Глядя в приведенный выше код, понял, что, кажется, я кое-чего не дописал в RCC.

Спасибо! Теперь направление, куда рыть, определилось.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...