|
Нашёл глюк то ли Keil то ли STM32, то ли я чего-то не знаю |
|
|
|
 |
Ответов
(1 - 14)
|
May 25 2012, 14:34
|
Знающий
   
Группа: Участник
Сообщений: 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, если таковой и так запущен и тактирует проц. после сброса, пока не переключить на другой источник насильно...
|
|
|
|
|
May 25 2012, 14:39
|

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

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

Группа: Участник
Сообщений: 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)){} ) может поможет.
|
|
|
|
|
May 25 2012, 19:01
|

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

|
Цитата(andries5 @ May 25 2012, 20:54)  Хоть в скобки заключите содержимое #define. За скобочки спасибо. Какой-то баг связан с переключением системных частот и частот генераторов. Меняю в программе мелочи , и глюк пропадает. Пока не понимаю что сказать и о чём спросить . Если в начале программы нет строчки RCC->CR &=~RCC_CR_HSEON; //выключили генератор HSE то всё хорошо. А если она есть то под отладкой в какой-то момент программа виснет в ассемблерном коде. А не под отладкой не виснет. Не понимаю, у меня даже нет никакого кварца на ногах HSE , на что может влиять его отключение кроме того что потребление падает на 1.5мА ?
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|
|
|
|
|
Feb 22 2013, 17:10
|
Местный
  
Группа: Свой
Сообщений: 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
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|