STM32 новичку в ARM что к чему

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

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

a5021, твой опыт неудачника совершенно никому неинтересен.
CB1
Прорезались зубы
Сообщения: 232
Зарегистрирован: Чт янв 01, 2015 13:44:12

Re: STM32 новичку в ARM что к чему

Сообщение CB1 »

Доброго времени суток! Подскажите может есть какой нибудь справочник по микроконтроллерам STM32 (на подобии справочника "Микроконтроллеры AVR семейства Mega" - А.В.Евстифеев)
Все гениальное - просто
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

CB1, Евстифеев -перевод даташита причем достаточно вольный и своеобразный.
Вы не знаете язык?
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

dosikus писал(а):a5021, твой опыт неудачника совершенно никому неинтересен.

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

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

а5021, ты надеешься что все забыли твой послужной список?
Опубликовать твои ляпы авр-ардуинщика? ЛИ умней тебя оказался, ему-то не нужны были твои подпевы-шакальи .
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: STM32 новичку в ARM что к чему

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

Досикус, помню мы много лет назад общались на другом форуме, и тогда вы производили впечатление нормального человека, не то что сейчас...
Будьте проще... Лучше промолчите, вместо того чтобы унижать других людей! Вас это не красит как человека!
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

dosikus писал(а):а5021, ты надеешься что все забыли твой послужной список?
Опубликовать твои ляпы авр-ардуинщика? ЛИ умней тебя оказался, ему-то не нужны были твои подпевы-шакальи .

Окончательно рехнулись, мистер? Список ляпов на бочку! С пруфами! Писатель-фантаст хренов.
CB1
Прорезались зубы
Сообщения: 232
Зарегистрирован: Чт янв 01, 2015 13:44:12

Re: STM32 новичку в ARM что к чему

Сообщение CB1 »

dosikus писал(а):CB1, Евстифеев -перевод даташита причем достаточно вольный и своеобразный.
Вы не знаете язык?

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

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

CB1, ну выжимки из даташита, это ничего не меняет.
Есть книги и книги хорошие на языке оригинала, есть RM , есть наконец-то сниппетсы на F0.
Что еще нужно-то?
Учите язык, а не ждите когда кто-то вам на блюдечке вывалит...
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Добрый день, подскажите пожалуйста, кроме как вручную можно как нибудь задать частоту системной шины в серии F3.
Типо строчку раскомментировать, как для серии F1.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

Подскажите почему код вида:
_____
#include <>

void main (void){
My_class object1;
object1.dosomething();
while(1){
i++;
}
_____
работает.
А код вида:
_____
#include <>
My_class object1;

void main (void){
object1.dosomething();
while(1){
i++;
}
_____
вываливается в Hard_fault с ошибкой по шине, на первой строчке в while.
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение RusikOk »

Ярослав555 писал(а):Подскажите почему код вида...
нужно увеличить размер стека и кучи
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

RusikOk писал(а):нужно увеличить размер стека и кучи

Делал. В два раза увеличивал. Возможно мало. Попробую больше. В AVR я запускал симуляцию в протеусе, он мне говорил что-то типа мемори аут оф рендж и я понимал что у меня стек переполнился. Эх ностальжи :)))
Аватара пользователя
RusikOk
Нашел транзистор. Понюхал.
Сообщения: 197
Зарегистрирован: Пн янв 24, 2011 01:51:48
Откуда: Украина, Киев
Контактная информация:

Re: STM32 новичку в ARM что к чему

Сообщение RusikOk »

Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: STM32 новичку в ARM что к чему

Сообщение Reflector »

Ярослав555, что в конструкторе?
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

Reflector писал(а):Ярослав555, что в конструкторе?

сброс ног порта. причем в одном из методов конструктор повторно вызывается.
Структура такова - есть обьект класса который должен переключать ноги порта (знаю что это лишнее, просто хотелось потренироваться с классами).
Есть таймер (номер три, если это важно), который генерит прерывание, которое вызывает один из методов. Поэтому мне нужен глобальный обьект, чтобы прерывание его видело.
Параллельно запускается АЦП (програмно) в цикле while(1), вот на строчке его запуска и вываливаюсь в хард фаулт. Если цикл пустой то все работает.
Кстати увеличивал стек и кучу в несколько раз - не помогает. Не в этом дело. Что-то куб мне сгенерировал не так. Надо пересмотреть инициализации.
P.S. Закоментил конструктор, сделал его пустым - ситуация не поменялась. Самое интересное, что я такое делал на 16й меге, и там все спокойно работало.
P.P.S Вываливание стабильно происходит на вот этой строчке
wait_loop_index = (ADC_STAB_DELAY_US * (SystemCoreClock / 1000000));
в процедуре ADC_Enable. Я пробовал удалить вычисление и оставить присвоение уже готового числа - не помогает.
P.P.P.S Была выключена оптимизация. Включил на высокий уровень - заработало. Странно. Причину надо найти.
P.P.P.P.S Эффект дает опция "static clustering" в настройках оптимизации. Все остальные выключил и работает

RusikOk писал(а):https://www.youtube.com/watch?v=6lm1xbv3PT0 18 минута

Да еще вчера смотел заполнение стека - пустой, не переполнен вообще.
Расшифровка состояния ядра показывает что это проблема с шиной/доступом. Есть подозрения на недонастроеный DMA, но тогда почему оптимизация убирает ошибку.
А если static clustering это какое-то выравнивание в памяти? Если у меня возникают проблемы в структуризации памяти? Если происходит наложение переменных по вине компилятора? Не хотелось бы чтобы так было на самом деле.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Добрый день, подскажите пожалуйста что такое ADC voltage regulator в stm32f303?
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

В догонку к своей проблеме - в один момент при попытке увеличить размер массива созданного в main() я вывалился в хард фаулт. Индикатор стека по прежнему не показывает переполнения. Сделал массив static (вынес из стека) - проблема ушла.
Дальше интересней - создаю одну интовую переменную в мейне - вывалился в хард фаулт. Сделал ее статик - прога работает.
Кстати, работаю в ИАРе 7.50, МК F100RB.
Не думаю что не работает индикатор стека.
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Re: STM32 новичку в ARM что к чему

Сообщение Ярослав555 »

Нашел причину, чисто случайно. Проблема в конструкции вида в методе:

void Indicator::Put_value(int value){
char n;
for(char i=0;i<=6;i++){
n=value%10;
value=value/10;
for(char k=0;k<=8;k++){
sequence[i][k]=symbol_table[n][k];
}
}
}
если учесть что один массив у меня на 6 ячеек, а второй на 8, то видно что в определенный момент цикл выходит за пределы массива :))) .
Как обнаружилось: экспериментировал с кодом (закоментировал блок кода, массивы данных, гонял по-шагово). И тут, внезапно, иар засветил мне стек красным цветом. Начал искать в какой точке кода это происходит, дошел до этого метода.
Теперь прога работает без оптимизации, как и положено. Надеюсь мой опыт однажды пригодится кому-нибудь.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: STM32 новичку в ARM что к чему

Сообщение a5021 »

В части GPIO, у STM32F030 есть регистровые пары, именуемые в референсе, как GPIOx_AFRH и GPIOx_AFRL -- регистры для переопределения выводов МК под альтернативные функции. Насчет того, что это и зачем, понятно. Непонятно, почему их в заголовочных файлах от самой же STMicro объявили каким-то противоестественным образом в виде массива AFR[2]:

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

typedef struct
{
  __IO uint32_t MODER;        /*!< GPIO port mode register,                     Address offset: 0x00      */
  __IO uint32_t OTYPER;       /*!< GPIO port output type register,              Address offset: 0x04      */
  __IO uint32_t OSPEEDR;      /*!< GPIO port output speed register,             Address offset: 0x08      */
  __IO uint32_t PUPDR;        /*!< GPIO port pull-up/pull-down register,        Address offset: 0x0C      */
  __IO uint32_t IDR;          /*!< GPIO port input data register,               Address offset: 0x10      */
  __IO uint32_t ODR;          /*!< GPIO port output data register,              Address offset: 0x14      */
  __IO uint32_t BSRR;         /*!< GPIO port bit set/reset register,      Address offset: 0x1A */
  __IO uint32_t LCKR;         /*!< GPIO port configuration lock register,       Address offset: 0x1C      */
  __IO uint32_t AFR[2];       /*!< GPIO alternate function low register,  Address offset: 0x20-0x24 */
  __IO uint32_t BRR;          /*!< GPIO bit reset register,                     Address offset: 0x28      */
} GPIO_TypeDef;


Для унификации с референсом и придания логичности общей картине, их вполне можно было объявить, как

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

  __IO uint32_t AFRL;       /*!< GPIO alternate function low register,  Address offset: 0x20*/

и

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

  __IO uint32_t AFRH;       /*!< GPIO alternate function high register,  Address offset: 0x24 */


Однако, мы имеем то, что имеем.
Кто-нибудь знает ответ на вопрос, зачем потребовалось объявлять данные регистры в виде массива? Должна же быть какая-то причина.
Ответить

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