реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Нашёл глюк то ли Keil то ли STM32, то ли я чего-то не знаю
MiklPolikov
сообщение May 25 2012, 14:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



#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();


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение May 25 2012, 14:34
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



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

1. А код пополнее сюда можно? Не понятно, что за i.
2. Кроме того, что за предыстория до кода? Подоплека: зачем вообще включать и переключаться на HSI, если таковой и так запущен и тактирует проц. после сброса, пока не переключить на другой источник насильно...
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 25 2012, 14:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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



Код полее - сложно. он большой.
1 . i- просто локальная переменная.
2. А что , нельзя включать и переключатся на какой-то генератор, когда проц и так на нём работает ? У меня вообще очень много переключений с одного генератора на другой, для снижения потребления.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение May 25 2012, 14:51
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



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

Можно. А откуда взялась эта i++ вообще? И что ассемблер показывает?
Go to the top of the page
 
+Quote Post
scifi
сообщение May 25 2012, 14:57
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Зачем такие странные макросы? Функции тут лучше вписались бы, ИМХО. К тому же длинные макросы принято заворачивать в do { ... } while (0).
Ну а по сути, конечно, никаких выводов сделать нельзя, так как информации очень мало.
Go to the top of the page
 
+Quote Post
andries5
сообщение May 25 2012, 17:54
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 15-01-09
Из: Moldova
Пользователь №: 43 421



Цитата(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)){} )

может поможет.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 25 2012, 19:01
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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


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

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

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

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

то всё хорошо.
А если она есть то под отладкой в какой-то момент программа виснет в ассемблерном коде. А не под отладкой не виснет.
Не понимаю, у меня даже нет никакого кварца на ногах HSE , на что может влиять его отключение кроме того что потребление падает на 1.5мА ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 25 2012, 20:50
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



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

Может системная частота становится слишком низкой для отладчика и он теряет процессор.
Если понизить частоту отлдки может и зависания пропадут?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 26 2012, 08:35
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение May 26 2012, 08:49
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(Сергей Борщ @ May 26 2012, 11:35) *
Так он и отключен после подачи питания. Где вы его включить успели? Может в том месте и собака зарыта?


Ни где его не включаю. Но если выключаю, ток потребления падает на 1.5ма


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 26 2012, 16:40
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MiklPolikov @ May 26 2012, 11:49) *
Ни где его не включаю. Но если выключаю, ток потребления падает на 1.5ма
Может быть вы не его отключаете? Или не только его? Ну чудес ведь не бывает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Onkel
сообщение Feb 22 2013, 11:45
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



help pl/
Вот константы вроде RCC_CR_HSION - никак не могу найти,где они определяются. keil ищу по всему проекту - находит только строки, где RCC_CR_HSION как аргумент, а определения найти не могу. камень f051
Go to the top of the page
 
+Quote Post
Lotor
сообщение Feb 22 2013, 17:10
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(Onkel @ Feb 22 2013, 15:45) *
help pl/
Вот константы вроде RCC_CR_HSION - никак не могу найти,где они определяются. keil ищу по всему проекту - находит только строки, где RCC_CR_HSION как аргумент, а определения найти не могу. камень f051

В файле аля stm32f05x.h, поищите по местам обитания CMSIS


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Onkel
сообщение Feb 23 2013, 06:19
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



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

Пасиб, только общим поиском и нашел. Теперь буду знать, что собственный поиск keil с секретами, не все ищет и не везде находит.
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Mar 1 2013, 02:35
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



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

Может, это только у меня так, т.к. на плате не соблюдено количество керамических конденсаторов на всех ногах питания проца.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016