Имеется 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;
/* 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() так и не доходит.
В чём может быть проблема? В проекте всё по дефолту, ничего не менял.
Угу, уже нарыл. Похоже не заводится генератор. Кстати, а почему он может не завестись?
Так еще фишка в том, что анализируется константа HSE_STARTUP_TIMEOUT, которая по дефолту равна 0x00500, т.е. как я понял, код должен подождать некоторое время, пока заведётся генератор, если он не завёлся - стартануть как есть. Но стоял полчаса, так ничего и не произошло
Блин, ничего не понимаю... Когда закомментировал условие, стало происходить странное:
Код:
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? Со всеми инклудами?
Если бы это не была заводская плата, я бы порекомендовал обратить внимание на кварц и его обвязку. Из какого проекта этот system_stm32f4xx.c? Кстати, можно сгенерить system с помощью STM32F4xx_Clock_Config (это чтоб не тратить время на настройку врукопашную), воткнуть в проект и глянуть. ЗЫ. Рука дернулась, не успел прочитать последнее добавленное сообщение, как нажал кнопку. ЗЗЫ. Могу написать быстренько "мигалку". Могу под FreeRTOS
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Взял с сайта ST, в стандартной библиотеке был: CMSIS/Device/ST/STM32F4xx/Source/Templates
Цитата:
Могу написать быстренько "мигалку". Могу под FreeRTOS
Не, уж лучше на голом асме
Вообще, для пустого проекта (ну, с библиотекой периферии) что нужно?
----------
Я уж жалею, что не прикупил до кучи ни одного дешевенького F100. Плата макетная под него есть, ST-LINK есть, и под него куча примеров. А тут с нуля на F4...
Там, конечно, указана частота HSE 25 MHz, но мой текущий проект (с HSE на 8 МГц) запустился и с этим system_stm32f4xx.c филиком.
ploop писал(а):
Вообще, для пустого проекта (ну, с библиотекой периферии) что нужно?
В смысле что должно быть включено в проект? Startup_...s, system_...c, stm32f4xx.h (этот хидер уже в мэйне должен быть подключен). Ну а из периферии - все исходники, что планируется использовать. Только я что вспомнил - я-то в IAR работаю.
ploop писал(а):
Я уж жалею, что не прикупил до кучи ни одного дешевенького F100.
А у меня как раз ненужные плесенью покрываются..
_________________ pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего ) MrYuran: Самые ортодоксальные — это PICудеи ) Katz: Не, 51-ники. )
Может кто подскажет, как вообще не трогать эти все PLL и настройки тактирования, а запустить как-нибудь по дефолту? Чтобы хоть в свой main() попасть, а дальше уж потихоньку разбираться буду.
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
Собсно если не пользуешь критичные к стабильности и точности частоты интерфейсы, вобще можно на HSI жить ни в чем себе не отказывая - PLL там с HSI и HSE, насколько помню, заводится без ограничений.
Вощем, несколько помню, если ничего не будешь трогать, то оно у тебя со старту будет на 16Мгц непосредственно с HSI молотить.
Я изначально ничего не трогал, всё по дефолту - и не работает вообще. В этом и проблема.
Цитата:
Собсно если не пользуешь критичные к стабильности и точности частоты интерфейсы, вобще можно на HSI жить ни в чем себе не отказывая
Мне пока как бы просто запустить. Знаю, что всю периферию там тактировать отдельно придётся, так что к этому вопросу серьёзно подойти. А то плата почти неделю лежит, а мне даже светодиодами помигать не удалось...
Карма: 26
Рейтинг сообщений: 108
Зарегистрирован: Чт ноя 04, 2010 01:56:36 Сообщений: 7439 Откуда: г. Москва
Рейтинг сообщения:0
Хотя я ST32F1 и ST32F2 (а по RRC и 4й не отличается) пробовал и HSI, и HSI c PLL, и HSE с PLL - проблем не было. Ну, только что я никаких примеров не собирал, я ж платы только сам рисовал. Нет демоплаты и примеров - нет проблемы
Код прыгает в этом цикле, и никогда из него не выходит. Постоянно возвращается на адрес 0800047e. В дебаггере видно, что регистр r3 постоянно обнуляется при переходе, хотя специально инициализировал его двойкой, чтобы заметно было. Просто мистика... Что означают команды ldr/str? ---- Load/Store Register. Аналоги LDS/STS AVR'овских. в чём тогда дело?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения