Изучение STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Мурик, если HSE не стартанет там так же зависнет, а не 8МГц останется...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

В этом коде? http://www.radiokot.ru/forum/viewtopic. ... 6#p2881096
С чего бы ему виснуть?

Код: Выделить всё

  /* Wait till HSE is ready and if Time out is reached exit */
  do
  {
    HSEStatus = RCC->CR & RCC_CR_HSERDY;
    StartUpCounter++;
  } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Нет, уже говорил где. В самом нижнем участке

Код: Выделить всё

else
  { /* If HSE fails to start-up, the application will have wrong clock
         configuration. User can add here some code to deal with this error */
  }
Если HSE отсутствует или не готов ,мы попадаем в эту заглушку.Сам переведешь?

И повторю -это лишь примеры кода. Не надо к ним относиться как к идеальнейшим.
Это же справедливо и для SPL и калокуба.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Ладно, давайте разберем код и выясним как он работает.
Вначале производится попытка включить HSE и если она неудачная, выполняется пустое условие после else (где ничего не зацикливается) а дальше следует выход из функции. МК не повиснет, а будет работать от HSI с частотой 8 МГц.

В нескольких проектах я модифицировал эту функцию чтобы МК запускался в любом случае на нужной частоте. В main проверял от чего тактируется МК. Если от HSI, то блокировал все программные модули для которых важна стабильность частоты и сообщал о проблеме пользователю, типа "Произошел сбой, перезапустите железку, а если не поможет - несите на ремонт".
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Так dosikus об этом и говорил, об обработке аварийных ситуаций и исключениях. И что это пример, а не универсальный код на все случаи жизни. По хорошему там нужно обрабатывать не только как у вас, отказ кварца при запуске, но и отказ кварца при работе, и попадание в хардфаульт по превышению частоты. Ведь кварц может не только просто отвалиться, он может дать и завышенную частоту, в результате механических воздействий, например.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Именно так. Спасибо scorpiOn
Кстати ,Мурик в 042 и 072 HSI стабильный и используется для тактирования USB. Снова разрыв шаблона ?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

scorpi_0n писал(а):По хорошему там нужно обрабатывать не только как у вас, отказ кварца при запуске, но и отказ кварца при работе, и попадание в хардфаульт
Это само, собой, но в данном случае речь шла о сбое при запуске HSE.
dosikus писал(а):Кстати ,Мурик в 042 и 072 HSI стабильный и используется для тактирования USB
Не у всех моделей МК RC генератор настолько стабильный. В F030 к примеру, при тактировании от HSI, USART начинал сыпать ошибками на ровном месте...
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

А вот это уже весьма странно , UART то как раз от HSI работает на ура. И да же на F1 а на F0 и подавно. Рой у себя...
Chettuser

Сообщение Chettuser »

Ок, удалил.
Последний раз редактировалось Chettuser Сб окт 29, 2016 20:28:26, всего редактировалось 1 раз.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Chettuser писал(а): А вот этого момента нигде не описано, по крайней мере я не нашёл.
Что не описано? Есть же секвенции переключения. Везде писано, что сначала переводим тактирование на HSI без PLL ...
Chettuser

Сообщение Chettuser »

Открыл AN3116_FW_V1.0 Это где про АЦП.
Листаю пример (к сожалению на SPL). В примере Dual_FastInterleaved мне непонятно, почему ADC2:

Код: Выделить всё

ADC_ExternalTrigConvCmd(ADC2, ENABLE);
Хотя при этом:

Код: Выделить всё

  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
и ADC1 настроен на запуск по SWSTART.
В RM0008 ничего подобного не нашёл.
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Сообщение pixar »

ADC1 работает мастером и может запускаться командой или сигналом от таймера или внешним сигналом с ножки,
а ADC2 работает ведомым от АDC1 и запускается на 7-м такте автоматом от сигнала внутренней логики.
Поэтому для ADC2 нужно ставить бит запуска по сигналу .
Chettuser

Сообщение Chettuser »

Здрасьте, снова я.
Директива #define вообще позволяет дафайнить выражения?
Пример:

Код: Выделить всё

#define WR=1  (GPIOA->BSRR=GPIO_BSRR_BS8)
#define WR=0  (GPIOA->BSRR=GPIO_BSRR_BR8)
Хотел простой записи для разгрузки кода:

Код: Выделить всё

WR=1;
WR=0;
Однако компилятор воспринял дефайн в штыки. Этому эстету, видите ли, "=" не нравится!
По логике - какая ему разница что подставлять? :(
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Замени на WR_EN и WR_DIS , и то информативный.
Скобки лишние...
Chettuser

Сообщение Chettuser »

Уже так переделал:

Код: Выделить всё

#define WR_1  (GPIOA->BSRR=GPIO_BSRR_BS8)
#define WR_0  (GPIOA->BSRR=GPIO_BSRR_BR8)
Ну неужели нельзя выражение применить?! :evil:
Вымогатель припоя
Аватара пользователя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Сообщение scorpi_0n »

Можно, но тогда это будет уже не Си.
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Можно макросом:

Код: Выделить всё

#define WR(x)    (GPIOA->BSRR = (x) ? GPIO_BSRR_BS8 : GPIO_BSRR_BR8)
Использование:

Код: Выделить всё

WR(0);
WR(1);
Иван Сусанин - первый полупроводник :solder:
Chettuser

Сообщение Chettuser »

2 вопроса:
1. Где найти не разрозненное описание ассемблера под STM32 (все инструкции, команды и т.д., и т.п.)?
2. Где найти полное описание того же GCC (ARM) со всеми командами?
Прорезались зубы
Сообщения: 203
Зарегистрирован: Сб ноя 19, 2016 21:05:48

Сообщение Мурато Мяуконни »

1. В Programming manual на серию микроконтроллеров на сайте стм. Документ PM0215 для серии F0 (cortex m0), PM0056 для F1 (cortex m3), PM0214 для F4 (cortex m4)
2. На сайте компилятора, поиск по словам GCC Manual. https://gcc.gnu.org/onlinedocs/gcc/ARM- ... RM-Options
Подпись убрал вместе с автором. aen
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Мурато Мяуконни писал(а):1. В Programming manual на серию микроконтроллеров на сайте стм. Документ PM0215 для серии F0 (cortex m0), PM0056 для F1 (cortex m3), PM0214 для F4 (cortex m4)
На сайте арм...
Ответить

Вернуться в «ARM»