Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нашёл глюк то ли Keil то ли STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
#define HSI_ON RCC->CR |= RCC_CR_HSION; while(!(RCC->CR & RCC_CR_HSIRDY)){} //включили генератор HSI
#define SYSTEM_CLOCK_HSI RCC->CFGR &=~RCC_CFGR_SW; RCC->CFGR |= RCC_CFGR_SW_HSI //Выбрали System clock HSI


HSI_ON;
SYSTEM_CLOCK_HSI;
i++; /////////////////// если этой бессмысленной строчки нет, то при последующем вызове любой функции проц зависает.
////////////////////Под отладкой видно что попал в ассемблерный код. Не под отладкой то же висит.
SPI1_INIT();
DMA_SD_INIT();
KnightIgor
Цитата(MiklPolikov @ May 25 2012, 16:11) *
HSI_ON;
SYSTEM_CLOCK_HSI;
i++; /////////////////// если этой бессмысленной строчки нет, то при последующем вызове любой функции проц зависает.
////////////////////Под отладкой видно что попал в ассемблерный код. Не под отладкой то же висит.
SPI1_INIT();
DMA_SD_INIT();

1. А код пополнее сюда можно? Не понятно, что за i.
2. Кроме того, что за предыстория до кода? Подоплека: зачем вообще включать и переключаться на HSI, если таковой и так запущен и тактирует проц. после сброса, пока не переключить на другой источник насильно...
MiklPolikov
Цитата(KnightIgor @ May 25 2012, 17:34) *
1. А код пополнее сюда можно? Не понятно, что за i.
2. Кроме того, что за предыстория до кода? Подоплека: зачем вообще включать и переключаться на HSI, если таковой и так запущен и тактирует проц. после сброса, пока не переключить на другой источник насильно...



Код полее - сложно. он большой.
1 . i- просто локальная переменная.
2. А что , нельзя включать и переключатся на какой-то генератор, когда проц и так на нём работает ? У меня вообще очень много переключений с одного генератора на другой, для снижения потребления.
KnightIgor
Цитата(MiklPolikov @ May 25 2012, 16:39) *
Код полее - сложно. он большой.
2. А что , нельзя включать и переключатся на какой-то генератор, когда проц и так на нём работает ? У меня вообще очень много переключений с одного генератора на другой, для снижения потребления.

Можно. А откуда взялась эта i++ вообще? И что ассемблер показывает?
scifi
Зачем такие странные макросы? Функции тут лучше вписались бы, ИМХО. К тому же длинные макросы принято заворачивать в do { ... } while (0).
Ну а по сути, конечно, никаких выводов сделать нельзя, так как информации очень мало.
andries5
Цитата(MiklPolikov @ May 25 2012, 16:11) *
#define HSI_ON RCC->CR |= RCC_CR_HSION; while(!(RCC->CR & RCC_CR_HSIRDY)){} //включили генератор HSI
#define SYSTEM_CLOCK_HSI RCC->CFGR &=~RCC_CFGR_SW; RCC->CFGR |= RCC_CFGR_SW_HSI //Выбрали System clock HSI

Хоть в скобки заключите содержимое #define.

#define HSI_ON (RCC->CR |= RCC_CR_HSION; while(!(RCC->CR & RCC_CR_HSIRDY)){} )

может поможет.
MiklPolikov
Цитата(andries5 @ May 25 2012, 20:54) *
Хоть в скобки заключите содержимое #define.


За скобочки спасибо.

Какой-то баг связан с переключением системных частот и частот генераторов. Меняю в программе мелочи , и глюк пропадает.
Пока не понимаю что сказать и о чём спросить .

Если в начале программы нет строчки

RCC->CR &=~RCC_CR_HSEON; //выключили генератор HSE

то всё хорошо.
А если она есть то под отладкой в какой-то момент программа виснет в ассемблерном коде. А не под отладкой не виснет.
Не понимаю, у меня даже нет никакого кварца на ногах HSE , на что может влиять его отключение кроме того что потребление падает на 1.5мА ?
_Артём_
Цитата(MiklPolikov @ May 25 2012, 22:01) *
А если она есть то под отладкой в какой-то момент программа виснет в ассемблерном коде. А не под отладкой не виснет.
Не понимаю, у меня даже нет никакого кварца на ногах HSE , на что может влиять его отключение кроме того что потребление падает на 1.5мА ?

Может системная частота становится слишком низкой для отладчика и он теряет процессор.
Если понизить частоту отлдки может и зависания пропадут?
Сергей Борщ
QUOTE (MiklPolikov @ May 25 2012, 22:01) *
Не понимаю, у меня даже нет никакого кварца на ногах HSE , на что может влиять его отключение кроме того что потребление падает на 1.5мА ?
Так он и отключен после подачи питания. Где вы его включить успели? Может в том месте и собака зарыта?
MiklPolikov
Цитата(Сергей Борщ @ May 26 2012, 11:35) *
Так он и отключен после подачи питания. Где вы его включить успели? Может в том месте и собака зарыта?


Ни где его не включаю. Но если выключаю, ток потребления падает на 1.5ма
Сергей Борщ
QUOTE (MiklPolikov @ May 26 2012, 11:49) *
Ни где его не включаю. Но если выключаю, ток потребления падает на 1.5ма
Может быть вы не его отключаете? Или не только его? Ну чудес ведь не бывает.
Onkel
help pl/
Вот константы вроде RCC_CR_HSION - никак не могу найти,где они определяются. keil ищу по всему проекту - находит только строки, где RCC_CR_HSION как аргумент, а определения найти не могу. камень f051
Lotor
Цитата(Onkel @ Feb 22 2013, 15:45) *
help pl/
Вот константы вроде RCC_CR_HSION - никак не могу найти,где они определяются. keil ищу по всему проекту - находит только строки, где RCC_CR_HSION как аргумент, а определения найти не могу. камень f051

В файле аля stm32f05x.h, поищите по местам обитания CMSIS
Onkel
Цитата(Lotor @ Feb 22 2013, 20:10) *
В файле аля stm32f05x.h, поищите по местам обитания CMSIS

Пасиб, только общим поиском и нашел. Теперь буду знать, что собственный поиск keil с секретами, не все ищет и не везде находит.
MiklPolikov
Разгадка глюка котрый я нашёл в том что после выхода из спящего режима нельзя сразу увеличивать системную частоту с очень низкой до HSI .
При этом виснет. Надо включить между ними какую-нибудь среднюю.

Может, это только у меня так, т.к. на плате не соблюдено количество керамических конденсаторов на всех ногах питания проца.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.