Easyelectronics.ru

Электроника для всех
Текущее время: 24 апр 2018, 15:55

Часовой пояс: UTC + 5 часов



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 21 ] 
Автор Сообщение
 Заголовок сообщения: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 30 дек 2017, 18:23 
Старожил

Зарегистрирован: 19 окт 2016, 13:57
Сообщения: 217
Подскажите, должен ли колебаться внешний осциллятор без инициализации в коде?
Пришла пора stm32l051 перевести на внешний кварц, но почему-то не работает даже пример из сниппетов/референсов.
Не знаю пока, толи плохо собрал прототип, толи в коде ошибка.
Осцилограф говорит, что на кварце тишина. Сам МК и плата работоспособны на внутреннем резонаторе.
А я вот не знаю, как-то не задумывался. По идее даже без кода должен кварц сам по себе дрыгаться?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 30 дек 2017, 18:24 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4201
HSE включили? Выводы генератора настроены правильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 30 дек 2017, 18:25 
Заглядывает иногда

Зарегистрирован: 12 дек 2013, 22:40
Сообщения: 131
Другой резонатор пробовали, они достаточно хрупкие. Емкости нагрузочные есть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 30 дек 2017, 18:41 
Старожил

Зарегистрирован: 19 окт 2016, 13:57
Сообщения: 217
Все три макета не работают.
Правда я не использовал там резистор 1Мом между выводами осциллятора, и брал кондеи 22пф.

#include "stm32l0xx.h"
#define SHORT_DELAY 200
#define LONG_DELAY 1000
#define ERROR_CSS 0x01
#define ERROR_HSE_LOST 0x02
#define ERROR_UNEXPECTED_RCC_IRQ 0x04
volatile uint16_t error = 0xFF; //initialized at 0xFF and modified by the functions
void ConfigureGPIO(void);
void StartHSE(void);
int main(void)
{
ConfigureGPIO();
SysTick_Config(8000);/* 1ms config with HSE 8MHz*/
StartHSE();
while (1) /* Infinite loop */
{
if ((RCC->CFGR & RCC_CFGR_SWS) == RCC_CFGR_SWS_HSE)
{
if (error == 0xFF)
{
error = 0;
}
}
else
{
if (error == 0)
{
error = ERROR_HSE_LOST;
}
}
}
}


__INLINE void ConfigureGPIO(void)
{
/* (1) Enable the peripheral clock of GPIOA and GPIOB */
/* (2) Select output mode (01) on GPIOA pin 5 */
/* (3) Select output mode (01) on GPIOB pin 4 */
RCC->IOPENR |= RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIOBEN; /* (1) */
GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODE5))
| (GPIO_MODER_MODE5_0); /* (2) */
GPIOB->MODER = (GPIOB->MODER & ~(GPIO_MODER_MODE4))
| (GPIO_MODER_MODE4_0); /* (3) */
}

__INLINE void StartHSE(void)
{
NVIC_EnableIRQ(RCC_CRS_IRQn); /* (1)*/
NVIC_SetPriority(RCC_CRS_IRQn,0); /* (2) */

RCC->CIER |= RCC_CIER_HSERDYIE; /* (1) */
RCC->CR |= RCC_CR_CSSHSEON | RCC_CR_HSEBYP | RCC_CR_HSEON; /* (2) */
}

void NMI_Handler(void)
{
if ((RCC->CIFR & RCC_CIFR_CSSF) != 0)
{
error = ERROR_CSS; /* Report the error */
RCC->CICR |= RCC_CICR_CSSC; /* Clear the flag */
}
}

void SysTick_Handler(void)
{
static uint32_t long_counter = LONG_DELAY;
static uint32_t short_counter = SHORT_DELAY;
static uint16_t error_temp = 0;

if (long_counter-- == 0)
{
if(error == 0)
{
GPIOB->ODR ^= (1 << 4);//toggle green led on PB4
long_counter = LONG_DELAY;
}
else if (error != 0xFF)
{
error_temp = (error << 1) - 1;
short_counter = SHORT_DELAY;
long_counter = LONG_DELAY << 1;
GPIOA->BSRR = (1 << 5); //set red led on PA5
GPIOB->BRR = (1 << 4); //switch off green led on PB4
}
}
GPIOA->ODR ^= (1 << 2);//toggle green led on PB4
for (int a=0; a<30000; a++) __NOP();
if (error_temp > 0)
{
if (short_counter-- == 0)
{
GPIOA->ODR ^= (1 << 5); //toggle red led
short_counter = SHORT_DELAY;
error_temp--;
}
}
}

void RCC_CRS_IRQHandler(void)
{
if ((RCC->CIFR & RCC_CIFR_HSERDYF) != 0) /* (1) */
{
RCC->CICR |= RCC_CICR_HSERDYC; /* (2) */
RCC->CFGR = ((RCC->CFGR & (~RCC_CFGR_SW)) | RCC_CFGR_SW_HSE); /* (3) */
}
else
{
error = ERROR_UNEXPECTED_RCC_IRQ; /* Report an error */
}
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 30 дек 2017, 21:32 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 403
Я насчитал 12 ошибок.
Можно сказать так - в ваших ошибках разумного кода не обнаружено.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 31 дек 2017, 09:56 
Старожил
Аватара пользователя

Зарегистрирован: 28 мар 2012, 10:33
Сообщения: 1109
Откуда: Сочи
У меня было, что без резистора кварц не генерил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 01 янв 2018, 05:25 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
antonluba писал(а):
У меня было, что без резистора кварц не генерил.

У STMicro есть чудный апнот о дружбе кварцев с их микроконтроллерами - AN2867. И честно, лучше его прочитать. Кварцы штуки деликатные, там можно много чего сделать не так. И даже если запустится "на столе", еще не доказывает что потом схема запустится где-то еще или что будет запускаться всегда. В апноте есть несколько критериев, которые следует проверить, глядя в даташит кварца. А еще это нежная слаботочная высокочастотная цепь, критичная к шумам и паразитным параметрам. В апноте показано как ее делать правильно. И неправильно, чтобы не делать так. А еще STM здорово начудили местами, особенно с часовым кварцем в ранних сериях STM32. Половина процов by design не способны использовать 12.5пФ ("low drift") кварцы. Круто, блин.

Интересно, STM не приходило в голову перевыпустить ранние серии типа F1, L1 и т.п. с учетом грабель, внедрив новые версии периферийных блоков, где грабли устранены? Или я чего-то упускаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 01 янв 2018, 14:51 
Старожил
Аватара пользователя

Зарегистрирован: 17 апр 2010, 08:38
Сообщения: 4767
Откуда: Усинск, республика Коми
LinuxPowered писал(а):
Интересно, STM не приходило в голову перевыпустить ранние серии типа F1, L1 и т.п. с учетом грабель, внедрив новые версии периферийных блоков, где грабли устранены? Или я чего-то упускаю?

Чтобы окончательно забить голову разработчикам? Намного проще и эффективней, на самом деле, после выхода в серию создать список найденных грабель и выдать его разработчикам.

_________________
хаос это непознанный порядок


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 01 янв 2018, 17:54 
Старожил

Зарегистрирован: 19 окт 2016, 13:57
Сообщения: 217
Код скопирован из официальных сниппетов один в один. А какие в нем ошибки?
Так все таки должен или нет колебаться осцилятор, подключенный к stm32, но не проинициализированный?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 15:57 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
До явной установки бита HSE - не должен. Потому как выключен усилитель обратной связи внутри МК на выводах кварца.
Если используете сгенерированный в Кубе код, то кварц может включаться этим кодом, либо если не используете Куб, то кварц может включаться в результате исполнения стартового кода, написанного в файле system_stm32f???.с, который исполняется еще до точки остановки в main() и обычно не виден.
Просмотрите файл system_stm32f???.с - там увидите много интересного.
Вызов функции SystemInit() явным образом прописан в файле startup_stm32f????.s в виде ассемблерной инструкции bl SystemInit


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 17:23 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
BigLeha писал(а):
Чтобы окончательно забить голову разработчикам?

Назвать нормально, чтобы было явно понятно. STM32F1xx V2.0, unfucked edition. Я тут посмотрел на даташит F0 и осознал что у F1xx например RTC убог по сравнению с "младшей" серией F0. Это вообще нормально? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 17:46 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
Нет смысла переделывать F1. Если его переделать, это получится уже старшая серия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 18:03 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 4201
Вначале сделали F1, потом F0. Всё правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 18:41 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
А чой-то про F2 никто не вспоминает? :))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 02 янв 2018, 21:03 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 403
Jaguar_showjumping писал(а):
Код скопирован из официальных сниппетов один в один. А какие в нем ошибки?


1 RCC_CR_HSEBYP - использование внешнего генератора, stm использует один контакт для тактовой частоты, второй контакт можно использовать как угодно. "Кварц" генерировать не будет хоть ты тресни, автономный кварцевый генератор - да, причём даже без чипа st.

2 RCC_CRS_IRQHandler + NMI_Handler - странное использование сигнала сбоя тактовой частоты. В момент сбоя сбрасываются все таймеры, а так-же вырубаются блоки PLL, микшер автоматически выбирает внутренний генератор, но он у вас не включен явным образом... Прерывание само по себе предназначено для внеочередного выполнения кода, сбой генератора - это значительное событие, которое просто невозможно игнорировать. У вас произошёл сбой - глупо надеяться на контрольную точку где-то в основном коде, до которого ещё необходимо дойти - чтобы обработать исключение. До этого момента код на 100% упрётся в бесконечное ожидание от таймера. По этой причине необходимо выполнить настройку pll прямо в теле прерывания, с повторным инсталлом таймеров.

3 SysTick_Handler для моргания светиками, как апофеоз стиля ардуино. Даже материться не хочется.

4 HSERDYIE прерывание в момент выхода внешнего кварца на нормальный рабочий режим. Может использоваться в момент начальной инициализации периферии в system_stm32fххх. Суть использования - экономия времени на совмещении двух задач в самой начальной стадии: ожидание стабилизации кварцев, PLL, и активный инсталл периферии не зависящей от сбоя часов. Для реализации конечного автомата необходим внешний флаг в памяти защищённой от сброса. По номеру флага выполняется поочерёдное выполнение алгоритма настойки всего тракта RCC_ - в момент срабатывания очередного хххRDYIE. То-есть вместо ожидания готовности очередного блока RCC_ в пустом цикле ожидания - выполняется вполне полезная работа по настройке периферии. Достигается экономия времени до 250мс, что иногда бывает очень критически.
После выхода из функции system_stm32fххх - прерывание по хххRDYIE теряет актуальность.

5 майн с возвратом (куда?) в бесконечном цикле проверки переключателя выбора внешнего кварца и rc генератора. Оно конечно будет работать, но не имеет смысла.

Мелкие ошибки я игнорировал, иначе получится слишком много текста. Но смысл очень простой - этот код предназначен для демонстрации автоматического переключения микшера. И он действительно работает, но только на макетке от st - с внешним тактированием. Демонстрация заключается в выдёргивании перемычки и наблюдением за состоянием флага. Достаточно глупое занятие.

И это всё потому, что у вас нет желания изучать официальную документацию по выбранному чипу. Алгоритм "скачал и запустил" не работает с чипами st, тут нужно думать собственной головой.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 03 янв 2018, 08:32 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
BusMaster писал(а):
Нет смысла переделывать F1. Если его переделать, это получится уже старшая серия.

F1 как раз и есть старший относительно F0. Что следует и из маркировки, более хорошего процессорного ядра, максимальных частот некоторых представителей, общего соотношения периферии и цен. А вот то что некоторые периферийные блоки F1 сливают облегченным и дешевым F0 - не логично нихрена. А старшие и так есть, F3, F4/L4 с еще более суровым процессорным ядром, кучей памяти и полным фаршем. Я ж не требую адской периферии и мег флеша, всего лишь подтянуть некоторые блоки до актуальных версий. Даже та же калибровка RTC. STM32F1 умеет толььо тормозить слишком быстрые часы. А разгонять слишком медленные не умеет. Офигенно, да? В ряде других серий этот тупняк исправлен, однако. Почему бы не сделать респин F1 с улучшенной версией блока, спрашивается? За столько лет можно наверное и сподвигнуться, если уж процесс поставлен на поток.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 03 янв 2018, 13:12 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
Я ж грю - на пьяну голову лучше ничего не пишите :))) потом по трезвянке прикините, покумекаете... да и плюнете, нафик там заморочки такие. ...это вам щас кажется, что бац - и одномоментно по всему миру вдруг стали везде F1 v2.0. Ан-нет, дедморозовое чудо закончилось, волшебства не будет :)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 03 янв 2018, 20:16 
Заглядывает иногда

Зарегистрирован: 15 окт 2017, 22:24
Сообщения: 180
Полазив по сайту STM обнаружил что что дед мороз в принципе бывает, но почему-то не там. С L1 как раз примерно что-то такое сделали, то что получилось стало называться L1 ... A. И там ряд улучшений, в том числе и блока RTC и проч. Но актуальнее было бы с F1xx это проделать, как мне кажется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 03 янв 2018, 21:17 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 1478
L1 - это отдельная серия, с другим набором периферии.
И че вы за этот RTC. Он не часто используется в принципе то.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 05 янв 2018, 14:37 
Старожил

Зарегистрирован: 19 окт 2016, 13:57
Сообщения: 217
BusMaster писал(а):
До явной установки бита HSE - не должен. Потому как выключен усилитель обратной связи внутри МК на выводах кварца.
Если используете сгенерированный в Кубе код, то кварц может включаться этим кодом, либо если не используете Куб, то кварц может включаться в результате исполнения стартового кода, написанного в файле system_stm32f???.с, который исполняется еще до точки остановки в main() и обычно не виден.
Просмотрите файл system_stm32f???.с - там увидите много интересного.
Вызов функции SystemInit() явным образом прописан в файле startup_stm32f????.s в виде ассемблерной инструкции bl SystemInit


Спасибо, парни! Так и сделал. Посмотрел system_stm32l0xx.c
Вырезал команды, пошуршал, и осцилkятор заколебался :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Должен ли колебаться внешний осциллятор без инициализации?
СообщениеДобавлено: 05 янв 2018, 19:02 
Старожил

Зарегистрирован: 19 окт 2016, 13:57
Сообщения: 217
ух ты блин.... тактирование выучил изнутри.... никогда бы не подумал, что придется....


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: kos, Редиска, Sergey_spb


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB