Страница 1 из 3

STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 09:28:03
ploop
Имеется STM32F4DISCOVERY. Пытаюсь запустить простейший код на F4 с помощью gcc + Eclipse. IDE настроил, дебаггер тоже, вроде всё нормально компилится и запускается. Код простейший, по миганию светодиодами. Проблема в том, что я не понял, как настроить тактирование или что-то в этом роде.

Дебаггер сначала показывает выполнение кода в startup_stm32f4xx.s (вроде так и должно быть), затем вызывает функцию SetSysClock, где зацикливается на этом месте:

Код: Выделить всё

static void SetSysClock(void)
{
/******************************************************************************/
/*            PLL (clocked by HSE) used as System clock source                */
/******************************************************************************/
  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;
  
  /* Enable HSE */
  RCC->CR |= ((uint32_t)RCC_CR_HSEON);
 
  /* Wait till HSE is ready and if Time out is reached exit */
  do // <<<<<<<  ЭТОТ КОД ВЫПОЛНЯЕТСЯ БЕСКОНЕЧНО
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;  
    StartUpCounter++;   
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); // <<<<<<<<<<<<<<<<<<<<<<
То есть, как я понял, флаг RCC_CR_HSERDY не поднимается. И всё, до main() так и не доходит.

В чём может быть проблема? В проекте всё по дефолту, ничего не менял.

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 10:03:47
md5sum
Ну так, как это аппаратный флаг :
Set by hardware to indicate that the HSE oscillator is stable.
то думаю что что-то с кварцем...

Можно закомментить эту строчку. МК запустится от внутреннего генератора.

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 10:13:02
ploop
Угу, уже нарыл. Похоже не заводится генератор. Кстати, а почему он может не завестись?

Так еще фишка в том, что анализируется константа HSE_STARTUP_TIMEOUT, которая по дефолту равна 0x00500, т.е. как я понял, код должен подождать некоторое время, пока заведётся генератор, если он не завёлся - стартануть как есть. Но стоял полчаса, так ничего и не произошло :)

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 21:21:49
ploop
Блин, ничего не понимаю...
Когда закомментировал условие, стало происходить странное:

Код: Выделить всё

  if ((RCC->CR & RCC_CR_HSERDY) != RESET)
  {
    HSEStatus = (uint32_t)0x01; <<<< Эта строка выполняется
  }
  else
  {
    HSEStatus = (uint32_t)0x00;  <<<<< Эту проскакиваем
  }
По идее должно быть HSEStatus == 1. Но следом:

Код: Выделить всё

  if (HSEStatus == (uint32_t)0x01)
  {
    /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */
    RCC->APB1ENR |= RCC_APB1ENR_PWREN;
    PWR->CR |= PWR_CR_VOS;
   
    Далее идёт настройка PLL
Но условие не выполняется, весь код настройки пропускается, и попадаем в бесконечный цикл в startup_stm32f4xx.s

Код: Выделить всё

 * @brief  This is the code that gets called when the processor receives an 
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 *         the system state for examination by a debugger.
*/
    .section  .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
  b  Infinite_Loop
  .size  Default_Handler, .-Default_Handler


Вообще ничего не понимаю :(
Есть у кого-нибудь рабочий пример включения светодиода под F4? Со всеми инклудами?

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 21:23:32
SubDia
Если бы это не была заводская плата, я бы порекомендовал обратить внимание на кварц и его обвязку. Из какого проекта этот system_stm32f4xx.c?
Кстати, можно сгенерить system с помощью STM32F4xx_Clock_Config (это чтоб не тратить время на настройку врукопашную), воткнуть в проект и глянуть.
ЗЫ. Рука дернулась, не успел прочитать последнее добавленное сообщение, как нажал кнопку.
ЗЗЫ. Могу написать быстренько "мигалку". Могу под FreeRTOS :)))

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 21:31:45
ploop
Из какого проекта этот system_stm32f4xx.c?
Взял с сайта ST, в стандартной библиотеке был:
CMSIS/Device/ST/STM32F4xx/Source/Templates
Могу написать быстренько "мигалку". Могу под FreeRTOS
Не, уж лучше на голом асме :)))

Вообще, для пустого проекта (ну, с библиотекой периферии) что нужно?

--------------

Я уж жалею, что не прикупил до кучи ни одного дешевенького F100. Плата макетная под него есть, ST-LINK есть, и под него куча примеров. А тут с нуля на F4...

Re: STM32F4 Есть вопросы.

Добавлено: Вт мар 20, 2012 21:48:30
SubDia
Там, конечно, указана частота HSE 25 MHz, но мой текущий проект (с HSE на 8 МГц) запустился и с этим system_stm32f4xx.c филиком.
ploop писал(а):Вообще, для пустого проекта (ну, с библиотекой периферии) что нужно?
В смысле что должно быть включено в проект?
Startup_...s, system_...c, stm32f4xx.h (этот хидер уже в мэйне должен быть подключен). Ну а из периферии - все исходники, что планируется использовать.
Только я что вспомнил - я-то в IAR работаю.
ploop писал(а):Я уж жалею, что не прикупил до кучи ни одного дешевенького F100.
А у меня как раз ненужные плесенью покрываются..

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:02:18
ploop
Может кто подскажет, как вообще не трогать эти все PLL и настройки тактирования, а запустить как-нибудь по дефолту? Чтобы хоть в свой main() попасть, а дальше уж потихоньку разбираться буду.

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:04:53
Satyr
Ну, забей пока на HSE, Пуская на HSI -))
Можно с PLL, можно без, но медленно -))

Если на медленно пофиг - просто закоменть эту функцию на корню, оно изначально на HSI напрямую и стартует. Сколько МГЦ - не помню.

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:07:37
ploop
То есть закомментить её вызов в стартапе? Попробую...

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:10:40
Satyr
Собсно если не пользуешь критичные к стабильности и точности частоты интерфейсы, вобще можно на HSI жить ни в чем себе не отказывая - PLL там с HSI и HSE, насколько помню, заводится без ограничений.

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:12:20
Satyr
ploop писал(а):То есть закомментить её вызов в стартапе? Попробую...
Да.
Вот только точно не помю - стартует с HSI или, так сказать, LSI - вроде там два RC генератора.

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:34:55
Satyr
Вощем, несколько помню, если ничего не будешь трогать, то оно у тебя со старту будет на 16Мгц непосредственно с HSI молотить.

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 13:50:03
ploop
Вощем, несколько помню, если ничего не будешь трогать, то оно у тебя со старту будет на 16Мгц непосредственно с HSI молотить.
Я изначально ничего не трогал, всё по дефолту - и не работает вообще. В этом и проблема.
Собсно если не пользуешь критичные к стабильности и точности частоты интерфейсы, вобще можно на HSI жить ни в чем себе не отказывая
Мне пока как бы просто запустить. Знаю, что всю периферию там тактировать отдельно придётся, так что к этому вопросу серьёзно подойти.
А то плата почти неделю лежит, а мне даже светодиодами помигать не удалось...

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 14:16:32
Satyr
ploop писал(а):
Вощем, несколько помню, если ничего не будешь трогать, то оно у тебя со старту будет на 16Мгц непосредственно с HSI молотить.
Я изначально ничего не трогал, всё по дефолту - и не работает вообще. В этом и проблема.
Не трогать барахло кристалла, а не исходники имеется ввиду :)))

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 14:17:25
Satyr
Ну выкинь пока этот сетклок и все

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 14:19:08
Satyr
Хотя я ST32F1 и ST32F2 (а по RRC и 4й не отличается) пробовал и HSI, и HSI c PLL, и HSE с PLL - проблем не было.
Ну, только что я никаких примеров не собирал, я ж платы только сам рисовал. Нет демоплаты и примеров - нет проблемы :)))

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 17:40:31
ploop
Офигеть! Причина в том, что дебаг не может пройти любой цикл! Например такой:

Код: Выделить всё

  for (i=0; i<5; i++)
  {
	  //
  }
Зацикливается намертво. Буду рыть дальше чтобы понять из-за чего...

Re: STM32F4 Есть вопросы.

Добавлено: Ср мар 21, 2012 23:03:56
ploop
Фигня какая-то...

Код: Выделить всё

  i=2;
  do
  {
	  i++;
  } while (i<6);

Код: Выделить всё

08000478:   mov.w r3, #2
0800047c:   str r3, [r7, #12]
23        	  i++;
0800047e:   ldr r3, [r7, #12]
08000480:   add.w r3, r3, #1
08000484:   str r3, [r7, #12]
24          } while (i<6);
08000486:   ldr r3, [r7, #12]
08000488:   cmp r3, #5
0800048a:   ble.n 0x800047e <main+18>
Код прыгает в этом цикле, и никогда из него не выходит. Постоянно возвращается на адрес 0800047e. В дебаггере видно, что регистр r3 постоянно обнуляется при переходе, хотя специально инициализировал его двойкой, чтобы заметно было. Просто мистика...
Что означают команды ldr/str?
----
Load/Store Register. Аналоги LDS/STS AVR'овских.
в чём тогда дело? :dont_know:

Re: STM32F4 Есть вопросы.

Добавлено: Чт мар 22, 2012 06:29:27
md5sum
Лови пример:
discovery.zip
(162.75 КБ) 495 скачиваний
моргает светодиодом на D15.
Если заработает (у меня работает), то будем искать отличия с твоим исходником :))