Изучение STM32
Re: Изучение STM32
Мурик, если HSE не стартанет там так же зависнет, а не 8МГц останется...
- Реклама
Re: Изучение STM32
В этом коде? 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));Re: Изучение STM32
Нет, уже говорил где. В самом нижнем участке
Если HSE отсутствует или не готов ,мы попадаем в эту заглушку.Сам переведешь?
И повторю -это лишь примеры кода. Не надо к ним относиться как к идеальнейшим.
Это же справедливо и для SPL и калокуба.
Код: Выделить всё
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 */
}И повторю -это лишь примеры кода. Не надо к ним относиться как к идеальнейшим.
Это же справедливо и для SPL и калокуба.
Re: Изучение STM32
Ладно, давайте разберем код и выясним как он работает.
Вначале производится попытка включить HSE и если она неудачная, выполняется пустое условие после else (где ничего не зацикливается) а дальше следует выход из функции. МК не повиснет, а будет работать от HSI с частотой 8 МГц.
В нескольких проектах я модифицировал эту функцию чтобы МК запускался в любом случае на нужной частоте. В main проверял от чего тактируется МК. Если от HSI, то блокировал все программные модули для которых важна стабильность частоты и сообщал о проблеме пользователю, типа "Произошел сбой, перезапустите железку, а если не поможет - несите на ремонт".
Вначале производится попытка включить HSE и если она неудачная, выполняется пустое условие после else (где ничего не зацикливается) а дальше следует выход из функции. МК не повиснет, а будет работать от HSI с частотой 8 МГц.
В нескольких проектах я модифицировал эту функцию чтобы МК запускался в любом случае на нужной частоте. В main проверял от чего тактируется МК. Если от HSI, то блокировал все программные модули для которых важна стабильность частоты и сообщал о проблеме пользователю, типа "Произошел сбой, перезапустите железку, а если не поможет - несите на ремонт".
Re: Изучение STM32
Так dosikus об этом и говорил, об обработке аварийных ситуаций и исключениях. И что это пример, а не универсальный код на все случаи жизни. По хорошему там нужно обрабатывать не только как у вас, отказ кварца при запуске, но и отказ кварца при работе, и попадание в хардфаульт по превышению частоты. Ведь кварц может не только просто отвалиться, он может дать и завышенную частоту, в результате механических воздействий, например.
- Реклама
Re: Изучение STM32
Именно так. Спасибо scorpiOn
Кстати ,Мурик в 042 и 072 HSI стабильный и используется для тактирования USB. Снова разрыв шаблона ?
Кстати ,Мурик в 042 и 072 HSI стабильный и используется для тактирования USB. Снова разрыв шаблона ?
Re: Изучение STM32
Это само, собой, но в данном случае речь шла о сбое при запуске HSE.scorpi_0n писал(а):По хорошему там нужно обрабатывать не только как у вас, отказ кварца при запуске, но и отказ кварца при работе, и попадание в хардфаульт
Не у всех моделей МК RC генератор настолько стабильный. В F030 к примеру, при тактировании от HSI, USART начинал сыпать ошибками на ровном месте...dosikus писал(а):Кстати ,Мурик в 042 и 072 HSI стабильный и используется для тактирования USB
Re: Изучение STM32
А вот это уже весьма странно , UART то как раз от HSI работает на ура. И да же на F1 а на F0 и подавно. Рой у себя...
-
Chettuser
Re: Изучение STM32
Ок, удалил.
Последний раз редактировалось Chettuser Сб окт 29, 2016 20:28:26, всего редактировалось 1 раз.
Re: Изучение STM32
Что не описано? Есть же секвенции переключения. Везде писано, что сначала переводим тактирование на HSI без PLL ...Chettuser писал(а): А вот этого момента нигде не описано, по крайней мере я не нашёл.
-
Chettuser
Re: Изучение STM32
Открыл AN3116_FW_V1.0 Это где про АЦП.
Листаю пример (к сожалению на SPL). В примере Dual_FastInterleaved мне непонятно, почему ADC2: Хотя при этом:
и ADC1 настроен на запуск по SWSTART.
В RM0008 ничего подобного не нашёл.
Листаю пример (к сожалению на SPL). В примере Dual_FastInterleaved мне непонятно, почему ADC2:
Код: Выделить всё
ADC_ExternalTrigConvCmd(ADC2, ENABLE);Код: Выделить всё
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;В RM0008 ничего подобного не нашёл.
Re: Изучение STM32
ADC1 работает мастером и может запускаться командой или сигналом от таймера или внешним сигналом с ножки,
а ADC2 работает ведомым от АDC1 и запускается на 7-м такте автоматом от сигнала внутренней логики.
Поэтому для ADC2 нужно ставить бит запуска по сигналу .
а ADC2 работает ведомым от АDC1 и запускается на 7-м такте автоматом от сигнала внутренней логики.
Поэтому для ADC2 нужно ставить бит запуска по сигналу .
-
Chettuser
Re: Изучение STM32
Здрасьте, снова я.
Директива #define вообще позволяет дафайнить выражения?
Пример:
Хотел простой записи для разгрузки кода:
Однако компилятор воспринял дефайн в штыки. Этому эстету, видите ли, "=" не нравится!
По логике - какая ему разница что подставлять?
Директива #define вообще позволяет дафайнить выражения?
Пример:
Код: Выделить всё
#define WR=1 (GPIOA->BSRR=GPIO_BSRR_BS8)
#define WR=0 (GPIOA->BSRR=GPIO_BSRR_BR8)Код: Выделить всё
WR=1;
WR=0;По логике - какая ему разница что подставлять?
Re: Изучение STM32
Замени на WR_EN и WR_DIS , и то информативный.
Скобки лишние...
Скобки лишние...
-
Chettuser
Re: Изучение STM32
Уже так переделал:
Ну неужели нельзя выражение применить?! 
Код: Выделить всё
#define WR_1 (GPIOA->BSRR=GPIO_BSRR_BS8)
#define WR_0 (GPIOA->BSRR=GPIO_BSRR_BR8)Re: Изучение STM32
Можно, но тогда это будет уже не Си.
Re: Изучение STM32
Можно макросом:
Использование:
Код: Выделить всё
#define WR(x) (GPIOA->BSRR = (x) ? GPIO_BSRR_BS8 : GPIO_BSRR_BR8)
Код: Выделить всё
WR(0);
WR(1);
Иван Сусанин - первый полупроводник 
-
Chettuser
Re: Изучение STM32
2 вопроса:
1. Где найти не разрозненное описание ассемблера под STM32 (все инструкции, команды и т.д., и т.п.)?
2. Где найти полное описание того же GCC (ARM) со всеми командами?
1. Где найти не разрозненное описание ассемблера под STM32 (все инструкции, команды и т.д., и т.п.)?
2. Где найти полное описание того же GCC (ARM) со всеми командами?
-
Мурато Мяуконни
- Прорезались зубы
- Сообщения: 203
- Зарегистрирован: Сб ноя 19, 2016 21:05:48
Re: Изучение STM32
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
2. На сайте компилятора, поиск по словам GCC Manual. https://gcc.gnu.org/onlinedocs/gcc/ARM- ... RM-Options
Подпись убрал вместе с автором. aen
Re: Изучение STM32
На сайте арм...Мурато Мяуконни писал(а):1. В Programming manual на серию микроконтроллеров на сайте стм. Документ PM0215 для серии F0 (cortex m0), PM0056 для F1 (cortex m3), PM0214 для F4 (cortex m4)


