2013-04-10 10 views
1

Я использую плату ST F4-Discovery в течение некоторого времени, как и многие другие друзья. У всех нас есть одна и та же проблема. Мы используем Keil IDE (используются разные версии с 4.3 до 4.7). Всякий раз, когда мы используем точки останова и секундомер, он отлично работает в режиме симуляции. Однако, когда мы отлаживаем бортовой компьютер и запускаем тот же код, секундомер никогда не сообщает о правильном времени. Это на самом деле случайное. Кто-нибудь знает, в чем проблема?Секундомер Keil IDE не работает в режиме отладки

Благодаря

ответ

1

Я нашел ответ гораздо позже. Это связано с внутренней схемой отладки. По умолчанию периферийные устройства таймера не останавливаются, когда мы нажимаем точку останова в режиме отладки, но продолжаем подсчет. Вот почему мы продолжаем получать случайные интервалы измерения между экземплярами прерывания таймера с помощью секундомера. Чтобы получить точную синхронизацию, нам нужна кругооборот отладки, чтобы заставить периферию таймера прекратить подсчет, как только мы достигнем точки останова, и возобновим ее позже, как только мы перешагнем ее. Это можно сделать, написав этот код:

SET_BIT(DBGMCU->APB1FZ, DBGMCU_APB1_FZ_DBG_TIM3_STOP); 

Который наставляет таймер 3 на APB1 шине, чтобы остановить отсчет с точки останова.

1

Чтобы решить проблему секундомера, перейдите по ссылке: вариантам Tarjet - отладки - настройки - трассировки - тактовая частота и регулировать частоту 72 МГц или ядро ​​процессора.

+0

Он уже настроен правильно. Та же проблема. Просто случайные числа. Это не проблема. Все люди, которых я знаю (более дюжины), имеют ту же проблему. –

1

Секундомер основан на внутреннем регистре SEC. Кажется, есть ошибка, которая, если окно регистра не отображается, значения секундомера не обновляются. Когда debug запущен, выберите View | Register window и убедитесь, что вы можете увидеть обновление регистра SEC. Теперь секундомер в строке состояния также должен обновляться.

+0

Удивительно, но это сработало для меня. Какая странная ошибка ... –