11.06.2016, 02:01
|
|
Частый гость
Регистрация: 29.05.2014
Сообщений: 14
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Работает только с отладчиком
Здравствуйте. Имеется микроконтроллер STM32F103CBT6. Написал для него прошивку в CooCox, прошил. Подаю питание на МК, и нуль реакции - не работает, кучу раз тыкаю reset и нечего. Подключаю к МК ST-Link, через SWD интерфейс, сам ST-Link подключаю по USB к компьютеру, подаю питание на МК - все работает, так как мне надо. Стоит, только отключить ST-Link, все перестает работать. В чем может быть проблема?
Последний раз редактировалось Aviator93; 11.06.2016 в 02:04.
|
|
|
|
11.06.2016, 20:46
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Работает только с отладчиком
Либо питание было подано не на все ножки, и/или неверно были подключены ножки выбора загрузчика (Boot mode), либо, что более вероятно, проект был скомпилирован для загрузки в SRAM и при снятии и повторном включении питания МК оказывается пустой.
|
|
|
|
11.06.2016, 21:03
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,091
Сказал спасибо: 2,566
Сказали Спасибо 11,900 раз(а) в 5,973 сообщении(ях)
|
Re: Работает только с отладчиком
reset праведно подтянут?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
16.06.2016, 09:29
|
|
Частый гость
Регистрация: 16.06.2016
Сообщений: 23
Сказал спасибо: 4
Сказали Спасибо 37 раз(а) в 14 сообщении(ях)
|
Re: Работает только с отладчиком
Доброго времени.
Похожая проблема. Без запущенного отладчика контроллер STM32F100RBT6B не хочет работать хотя до этого в отладке работает по написанной прошивке.
А еще можно тут вопрос по таймеру TIM6? Хочу получить секундные импульсы. Настраиваю в таймере предделитель и перезагрузку так чтобы переполнение было каждую секунду. А на деле получается примерно в 3 раза быстрее. Где я недосмотрел? В роде правильно, даже на калькуляторе считал.
И еще тоже по SysTik вопрос есть. Я не нашел описания этого таймера. Как его включить как использовать?
|
|
|
|
16.06.2016, 10:12
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Работает только с отладчиком
Ну уже ж отвечал - линковщик проекта настроен на компиляцию для загрузки в SRAM контроллера. Поэтому после сброса МК содержимое SRAM очищается вместе с исполняемым кодом, а флеш-память МК остается пустой. Этот МК может исполнять код из SRAM, не программируя флеш.
Для программирования именно флеши в настройках компиляции выбираем положение кода - Flash, а не RAM.
Про таймер. Если получилось "в три раза быстрее", то это дело не в таймере, а в системной частоте. Вангую, что она просто установлена на 24 МГц через умножитель частоты (PLL). Проверить источник системной частоты можно в отладчике, посмотрев в регистре RCC_CFGR состояние пары битов SWS. Если биты равны [10], значит, системная частота от PLL. Значение [00] - от внутреннего осциллятора, [01] - от внешнего кварца. Для переключения источника нужно изменить другую пару битов - SW, не забыв перед этим включить этот источник битом в регистре RCC_CR.
Если взят дефолтный уже заполненный файл system_stm32f10x.c, то в нем по умолчанию прописано после старта МК переключение системной частоты на PLL. Там почти в начале файла есть строчка #define SYSCLK_FREQ_24MHz 24000000 из-за которой и включается PLL. Можно закомментить ее и потом самостоятельно настроить нужный режим. Например, с помощью функций, описанных ниже в том же файле. В функциях описано правильное переключение источников, то есть с ожиданиями запуска осциллятора, таймаута, переключением на выбранный источник. Например, для переключения на внешний кварц можно раскоментировать строчку #define SYSCLK_FREQ_HSE, указав значение частоты в герцах, и тогда будет выполняться алгоритм переключения на внешний кварц в функции SetSysClockToHSE, которая входит в функцию SystemInit. В ней же есть настройка предделителей шин.
Про таймер SysTick. Его описания в мануале МК нет потому, что он работает в составе ядра Cortex и описан в мануале на ядро (RM0056). Для включения и настройки есть файл описания ядра core_cm3.h из папки CMSIS. В нем ищем функцию SysTick_Config, она то и включает таймер тиков. Аргумент функции - количество тиков. В самой функции можно настроить другие параметры, типа выбора источника тактирования, разрешения прерывания.
Если разрешено прерывание от SysTick, то заполняем обработчик прерывания SysTick_Handler.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
17.06.2016, 12:24
|
|
Частый гость
Регистрация: 16.06.2016
Сообщений: 23
Сказал спасибо: 4
Сказали Спасибо 37 раз(а) в 14 сообщении(ях)
|
Re: Работает только с отладчиком
Благодарю за подробное обьяснение! Переключил компиляцию во Flash - заработало. С таймерами буду разбираться. Правильно, системная частота была 24MHz. В файлах столько много написано попробуй пойми че там. Переделал - заработал TIM6 с интервалом 1с.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:36.
|
|