STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
a5021, твой опыт неудачника совершенно никому неинтересен.
Re: STM32 новичку в ARM что к чему
Доброго времени суток! Подскажите может есть какой нибудь справочник по микроконтроллерам STM32 (на подобии справочника "Микроконтроллеры AVR семейства Mega" - А.В.Евстифеев)
Все гениальное - просто
Re: STM32 новичку в ARM что к чему
CB1, Евстифеев -перевод даташита причем достаточно вольный и своеобразный.
Вы не знаете язык?
Вы не знаете язык?
Re: STM32 новичку в ARM что к чему
dosikus писал(а):a5021, твой опыт неудачника совершенно никому неинтересен.
Привыкайте за себя говорить, мистер "удачник". Иначе выходит, что подсознательно своему собственному авторитету вы не особо доверяете. Это явствует из попыток вещать от имени неопределенного круга воображаемых единомышленников.
Re: STM32 новичку в ARM что к чему
а5021, ты надеешься что все забыли твой послужной список?
Опубликовать твои ляпы авр-ардуинщика? ЛИ умней тебя оказался, ему-то не нужны были твои подпевы-шакальи .
Опубликовать твои ляпы авр-ардуинщика? ЛИ умней тебя оказался, ему-то не нужны были твои подпевы-шакальи .
Re: STM32 новичку в ARM что к чему
Досикус, помню мы много лет назад общались на другом форуме, и тогда вы производили впечатление нормального человека, не то что сейчас...
Будьте проще... Лучше промолчите, вместо того чтобы унижать других людей! Вас это не красит как человека!
Будьте проще... Лучше промолчите, вместо того чтобы унижать других людей! Вас это не красит как человека!
Re: STM32 новичку в ARM что к чему
dosikus писал(а):а5021, ты надеешься что все забыли твой послужной список?
Опубликовать твои ляпы авр-ардуинщика? ЛИ умней тебя оказался, ему-то не нужны были твои подпевы-шакальи .
Окончательно рехнулись, мистер? Список ляпов на бочку! С пруфами! Писатель-фантаст хренов.
Re: STM32 новичку в ARM что к чему
dosikus писал(а):CB1, Евстифеев -перевод даташита причем достаточно вольный и своеобразный.
Вы не знаете язык?
Это не совсем даташит, в даташите описывается отдельный микроконтроллер, а в данной книге собрана информация о целом семействе микроконтроллеров (конечно много в данной книге взято из даташитов - как без этого). Хотелось бы найти такой справочник по микроконтроллерам STM32, очень желательно что бы на русском.
Все гениальное - просто
Re: STM32 новичку в ARM что к чему
CB1, ну выжимки из даташита, это ничего не меняет.
Есть книги и книги хорошие на языке оригинала, есть RM , есть наконец-то сниппетсы на F0.
Что еще нужно-то?
Учите язык, а не ждите когда кто-то вам на блюдечке вывалит...
Есть книги и книги хорошие на языке оригинала, есть RM , есть наконец-то сниппетсы на F0.
Что еще нужно-то?
Учите язык, а не ждите когда кто-то вам на блюдечке вывалит...
Re: STM32 новичку в ARM что к чему
Добрый день, подскажите пожалуйста, кроме как вручную можно как нибудь задать частоту системной шины в серии F3.
Типо строчку раскомментировать, как для серии F1.
Типо строчку раскомментировать, как для серии F1.
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
Подскажите почему код вида:
_____
#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.
_____
#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 что к чему
нужно увеличить размер стека и кучиЯрослав555 писал(а):Подскажите почему код вида...
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
RusikOk писал(а):нужно увеличить размер стека и кучи
Делал. В два раза увеличивал. Возможно мало. Попробую больше. В AVR я запускал симуляцию в протеусе, он мне говорил что-то типа мемори аут оф рендж и я понимал что у меня стек переполнился. Эх ностальжи
Re: STM32 новичку в ARM что к чему
Ярослав555, что в конструкторе?
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
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 это какое-то выравнивание в памяти? Если у меня возникают проблемы в структуризации памяти? Если происходит наложение переменных по вине компилятора? Не хотелось бы чтобы так было на самом деле.
Re: STM32 новичку в ARM что к чему
Добрый день, подскажите пожалуйста что такое ADC voltage regulator в stm32f303?
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
В догонку к своей проблеме - в один момент при попытке увеличить размер массива созданного в main() я вывалился в хард фаулт. Индикатор стека по прежнему не показывает переполнения. Сделал массив static (вынес из стека) - проблема ушла.
Дальше интересней - создаю одну интовую переменную в мейне - вывалился в хард фаулт. Сделал ее статик - прога работает.
Кстати, работаю в ИАРе 7.50, МК F100RB.
Не думаю что не работает индикатор стека.
Дальше интересней - создаю одну интовую переменную в мейне - вывалился в хард фаулт. Сделал ее статик - прога работает.
Кстати, работаю в ИАРе 7.50, МК F100RB.
Не думаю что не работает индикатор стека.
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
Нашел причину, чисто случайно. Проблема в конструкции вида в методе:
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, то видно что в определенный момент цикл выходит за пределы массива
.
Как обнаружилось: экспериментировал с кодом (закоментировал блок кода, массивы данных, гонял по-шагово). И тут, внезапно, иар засветил мне стек красным цветом. Начал искать в какой точке кода это происходит, дошел до этого метода.
Теперь прога работает без оптимизации, как и положено. Надеюсь мой опыт однажды пригодится кому-нибудь.
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, то видно что в определенный момент цикл выходит за пределы массива
Как обнаружилось: экспериментировал с кодом (закоментировал блок кода, массивы данных, гонял по-шагово). И тут, внезапно, иар засветил мне стек красным цветом. Начал искать в какой точке кода это происходит, дошел до этого метода.
Теперь прога работает без оптимизации, как и положено. Надеюсь мой опыт однажды пригодится кому-нибудь.
Re: STM32 новичку в ARM что к чему
В части 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 */
Однако, мы имеем то, что имеем.
Кто-нибудь знает ответ на вопрос, зачем потребовалось объявлять данные регистры в виде массива? Должна же быть какая-то причина.