BlackOps 0 8 июля, 2013 Опубликовано 8 июля, 2013 · Жалоба Проблемы с отладкой и вопрос о внешнем кристале У меня на отдельной плате которую я развел и собрал стоит: STM32F405RGT6 Кристал ABM7-8MHz с 16pF конденсаторами. Отладку провожу по SWD с помощью gdb. В начале я заметил у меня отладка застревала на начале функции которая конфигурировала порты, я в начале думал все дело в том что внешний кристал может быть не вибрирует? Измерил осциллографом OSC_IN там примерно 156мВ амплитуда колебания, на OSC_OUTпримерно 312мВ амплитуда (на плате дискавери амплитуда с их кристаллом на OSC_OUT больше, примерно 1.5В). Подумал может все дело в этом? Затем решил упростить программу и поставить цикли, вот я прикрепил код: int main(void) { uint32_t i1=0; uint32_t x=0; // Initialization routine ///////////////////////////////////////////////////// //fpu_enable(); // enable hardware FPU pll_start(168, 4, 2); // N=168, M=4, P=2, Fsys=168MHz. for(i1=0; i1<9000000; i1++) { x=x+i1; } x=0; i1=0; //============================================================================= // GPIOA configuration //============================================================================= // enable GPIOA clock RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; for(i1=0; i1<9000000; i1++) { x=x+i1; } // Alternate Function GPIOA->MODER = 0; // clear moder register GPIOA->MODER |= ( GPIO_MODER_MODER15_1 | // Alternate Function, SPI3_NSS GPIO_MODER_MODER4_1 | // Alternate Function, SPI1_NSS ... ... ... как видите программа начата с объявлением переменных для цикла простого, затем идет функция конфигурирования внешнего кристалла, она точно работающая, т.к. ее я проверял на плате дискавери. затем вы видите длинный цикл считающий до 9000000, этот цикл исполняется нормально, это я в дебаггере вижу! Затем вы видите как я включаю клок на порт А, а после этого вновь длинный цикл которык стабильно исполняыется! т.е. считает и меняет значение переменных. На этом этапе возможность того что мой кристал внешний не работает можно исключить, правильно мыслю? А теперь, проблема начинается на следующей строчке: GPIOA->MODER = 0; // clear moder register вот сдесь то дебаг и зависает! в консоли жму Ctrl-c, через какое то время вновь могу вводить команду, но не могу делать шаг вперед! гдб на этом этапе просто замирает...делаю шаг вперед командой s, а он стоит и ничего не происходит.. еще один момент, в дебаггере читаю RCC->CR и там биты 16,17 оба имеют значение 1. т.е. выходит PLL работает... но почему все застывает именно на этой линии кода: GPIOA->MODER = 0; // clear moder register ? кто нибудь может хотябы пролить свет на то что примерно может быть не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 8 июля, 2013 Опубликовано 8 июля, 2013 · Жалоба А теперь, проблема начинается на следующей строчке: GPIOA->MODER = 0; // clear moder register Вы отключили функции SWD. Пины, отвечающие за отладку, должны быть сконфигурированны в "Alternate function mode". 7.4.1 GPIO port mode register (GPIOx_MODER) (x = A..I) Address offset: 0x00 Reset values: ● 0xA800 0000 for port A Обратите внимание, что после сброса значение GPIOA->MODER = 0xA8000000 не нулевое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 8 июля, 2013 Опубликовано 8 июля, 2013 · Жалоба да...согласен. спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться