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

 
 
 
Reply to this topicStart new topic
> Проблема с stm32f103vc, Программа не работает из FLASH
ex51
сообщение May 11 2010, 17:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 22-06-04
Из: Российская Империя
Пользователь №: 90



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

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

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

Уже неделю бьюсь не могу понять чем работа во флеши так радикально отличается от работы в ОЗУ.
Может хоть направления поиска кто даст, куда смотреть. Ерату читал ничего криминального не обнаружил.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 11 2010, 18:12
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ex51
сообщение May 11 2010, 18:34
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 22-06-04
Из: Российская Империя
Пользователь №: 90



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

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

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
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 11 2010, 18:48
Сообщение #4


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

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



У меня ситуация подобная, только еще хуже. STM32F103, есть устройства на внешней шине, в том числе, контроллер ЖКИ. В симуляторе Keil как-то проходит программа. Только когда обращаюсь к контроллеру ЖКИ, почему-то останавливается и идет только по-шагам. В микроконтроллер с помощью ULINK-ME зашивается, верификация проходит. И генератор на 8 MHz запускается. Но дальше - никаких признаков жизни, в отладчике вываливается в Hard Fault. Даже не дойдя до инициализации ЖКИ.
Боюсь и спрашивать... Тут такие "монстры ARM"...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 11 2010, 19:10
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ex51 @ May 12 2010, 00:34) *
Да нет настройки вроде все правильные.


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

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


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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 11 2010, 19:15
Сообщение #6


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

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



Глядя в приведенный выше код, понял, что, кажется, я кое-чего не дописал в RCC.
Спасибо! Теперь направление, куда рыть, определилось.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:20
Рейтинг@Mail.ru


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