Страница 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
Офигеть! Причина в том, что дебаг не может пройти любой цикл! Например такой:
Зацикливается намертво. Буду рыть дальше чтобы понять из-за чего...
Re: STM32F4 Есть вопросы.
Добавлено: Ср мар 21, 2012 23:03:56
ploop
Фигня какая-то...
Код: Выделить всё
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'овских.
в чём тогда дело?

Re: STM32F4 Есть вопросы.
Добавлено: Чт мар 22, 2012 06:29:27
md5sum
Лови пример:
моргает светодиодом на D15.
Если заработает (у меня работает), то будем искать отличия с твоим исходником
