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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Да. Туго... Но никто и не обещал простого.. Туго во всем, в чем разбираешься практически с фундамента. Даже в самом строительстве.
Зато потом будет проще. Я верю. И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше, т.к. либо будешь больше знать о работе МК, либо не будешь применять библиотеки практически совсем... Как-то так.
Станислав
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18783
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать... Поскольку ранее я утверждал, что не стоит, то и ищу факты, чтобы утвердиться во мнении или изменить его.
И чем больше смотрю, тем больше прихожу к мнению, что я не ошибся.
Эта область для тех, кто так и не смог самоутвердиться по жизни... Ничего полезного начинающим тут почти нет... Только демонстрация собственной крутости...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

ARV писал(а):Ничего полезного начинающим тут почти нет...
Вот с этим почти соглашусь... :( Помогают все же. Даже иногда очень. Но больше спорят про всякую ерунду, которая к начинающим отношения не имеет.
Если бы с таким же рвением объясняли и отвечали начинающим, пользы было бы больше. :)
Станислав
Друг Кота
Аватара пользователя
Сообщения: 25510
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="ARV",url="/forum/viewtopic.php?p=3904697#p3904697"]я не ошибся[/uquote]
Все гораздо проще.
Начинающим в контроллерах к АРМам нужно либо относиться как к Ардуинам, то есть никуда не вникать и копипастить некие типовые фрагменты кода, собирая из них несложные паззлы, либо долго и упорно осваивать фундаментальные основы архитектуры. Последнее годится только для самых настойчивых и серьезных - таким советы из этой темы совершенно ни к чему.
Все гораздо проще для тех, кто имеет значительный опыт в более простых платформах.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="ARV",url="/forum/viewtopic.php?p=3904697#p3904697"]Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать.[/uquote]
Задача у вас -- не позавидуешь.
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Я мало знаю про АВР, но все же на них собрал несколько устройств. Опечалился, когда кантору перекупил Микрочип. Да и в большинстве промышленных контроллеров, в том числе в автопроме применяются ПИК. А я их почти совсем не знаю.
Дальше, задумки мои многолетние уже, я понял, что на АВР не реализую. Мало и памяти и скорости. Вот и решился пойти на 32 бита.
А дается мне это тяжело, потому что у меня тупо со знанием Си проблемы... и времени сидеть днями перед компом нету. Использовать библиотеки не могу, потому что также, в соответствии задумок, устройство достаточно со специфичным алгоритмом. Ну это в моей голове так. Просто в природе нет библиотеки готовой, которая способна это реализовать.
Станислав
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25510
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904745#p3904745"]в природе нет библиотеки[/uquote]
Выстраивать будущее устройство нужно сверху вниз - от общего к частному. Тогда и выяснится - есть библиотека или ее нет...
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

СКАЗОЧНИК писал(а):Да. Туго... Но никто и не обещал простого..
Просто не Ищите простых путей. :dont_know:
Они есть. Как я уже писал - SPL, в крайнем случае HAL / LL.
СКАЗОЧНИК писал(а):Зато потом будет проще.
Расскажите это Эдди, который освоил F1 и F0 и считает F4 слишком сложными, а все потому что работает с регистрами, а не использует библиотеки. Вообще многое зависит от человека.
СКАЗОЧНИК писал(а):И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше
По регистрам будет гораздо больше вопросов чем по SPL и HAL вместе взятым. :dont_know:
ARV писал(а):Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать.
Лично вам не стоит. Используйте AVR дальше.
СКАЗОЧНИК писал(а):Но больше спорят про всякую ерунду, которая к начинающим отношения не имеет.
На форуме не только начинающие. И темы споров зависит от уровня знаний.
СКАЗОЧНИК писал(а):А дается мне это тяжело, потому что у меня тупо со знанием Си проблемы
Почему? Язык Си не сложный и его можно довольно быстро изучить.
СКАЗОЧНИК писал(а):Использовать библиотеки не могу, потому что также, в соответствии задумок, устройство достаточно со специфичным алгоритмом.
Алгоритм никак не связан с использованием библиотек. Тем более когда идет речь про периферийные библиотеки, которые для МК. Это примерно как дрова для компа.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

для начала, я хочу организовать связь с 64 устройствами без проводов. в каждом устройстве пусть будет ТИНИ13 и один светодиод типа 2812. Управлять надо цветом, яркостью и динамикой. главный контрллер всем этим рулит и еще кучу некоторой другой работы выполняет. Каждое устройство имеет свой уникальный адрес.
Пока не знаю как это решить. )
Станислав
Друг Кота
Аватара пользователя
Сообщения: 25510
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904765#p3904765"]для начала, я хочу[/uquote]
Для начала нужно выстроить обозначенный список задач в общую диаграмму работы МК, чтобы понять пересечение этих задач во времени и возможность не применять ОСРВ для разруливания многозадачности, ну или применять ОСРВ. Отдельно нужно определить для себя интерфейс связи с Tiny13. Затем каждую из задач реализовать совершенно независимо.
Друг Кота
Аватара пользователя
Сообщения: 6598
Зарегистрирован: Сб янв 28, 2006 22:47:24

Сообщение Asmodey »

[uquote="Мурик",url="/forum/viewtopic.php?p=3904760#p3904760"]По регистрам будет гораздо больше вопросов чем по SPL и HAL вместе взятым.[/uquote]
Посмотрел я эти SPL и HAL, там имена функций такие, что пальцы вывихнешь набивая их с клавы. Запомнить их и вовсе нереально. Описание функций через пень-колоду и галопом по европам. У регистров хотя бы названия человеческие и нормальное описание в RM.
[uquote="Мурик",url="/forum/viewtopic.php?p=3904760#p3904760"]
СКАЗОЧНИК писал(а):Но больше спорят про всякую ерунду, которая к начинающим отношения не имеет.
На форуме не только начинающие. И темы споров зависит от уровня знаний[/uquote]
Да, но непонятно, зачем засорять высокоуровневыми спорами тему для начинающих. Которые вынуждены по крупицам потом выцарапывать полезную информацию из десятков страниц споров не имеющих отношения к конкретной теме. На форуме валом тем для опытных погроммистов.
Астролябия-сама меряет, было бы что мерять!!!
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Asmodey писал(а): набивая их с клавы
Для этого есть автозавершение.
Asmodey писал(а):Описание функций через пень-колоду и галопом по европам.
Описание битов в RM не лучше. :dont_know:
Asmodey писал(а):У регистров хотя бы названия человеческие и нормальное описание в RM.
Ну да, "очень понятные" названия. Например.

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

GPIOB->CRL |= GPIO_CRL_MODE4_1;
Новички без чтения RM однозначно поймут что означает эта строка и какой режим порта устанавливается. :)))
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="Мурик",url="/forum/viewtopic.php?p=3904848#p3904848"]Ну да, "очень понятные" названия. Например.

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

GPIOB->CRL |= GPIO_CRL_MODE4_1;
Новички без чтения RM однозначно поймут что означает эта строка и какой режим порта устанавливается. :)))[/uquote]

Смотря как записать. Можно, например, так:

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

#define I_ANALOG            (0ULL << 2)
#define I_FLOAT             (1ULL << 2)
#define I_PULL              (2ULL << 2)
#define O_PP                (0ULL << 2)
#define O_OD                (1ULL << 2)
#define O_AF                (2ULL << 2)
#define O_10MHZ             (1ULL)
#define O_2MHZ              (2ULL)
#define O_50MHZ             (3ULL)

#define PIN_CFG(PIN, MODE)  ((uint64_t)(MODE) << ((PIN) * 4))

*(volatile uint64_t *) GPIOA = (
  PIN_CFG(0,  O_2MHZ)            | /*  PA0:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
  PIN_CFG(1,  O_2MHZ)            | /*  PA1:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
  PIN_CFG(2,  O_2MHZ)            | /*  PA2:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
  PIN_CFG(3,  O_2MHZ)            | /*  PA3:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
  PIN_CFG(4,  O_2MHZ)            | /*  PA4:  OUTPUT (PUSH-PULL, LOW SPEEED)        */

  #if USE_SPI
    PIN_CFG(5,  O_AF + O_50MHZ)  | /*  PA5:  SPI1_SCK  (PUSH-PULL, HIGH SPEEED)    */
    PIN_CFG(6,  I_FLOAT)         | /*  PA6:  SPI1_MISO (INPUT, NO PULL)            */
    PIN_CFG(7,  O_AF + O_50MHZ)  | /*  PA7:  SPI1_MOSI (PUSH-PULL, HIGH SPEEED)    */
  #else
    PIN_CFG(5,  O_2MHZ)          | /*  PA5:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
    PIN_CFG(6,  O_2MHZ)          | /*  PA6:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
    PIN_CFG(7,  O_2MHZ)          | /*  PA7:  OUTPUT (PUSH-PULL, LOW SPEEED)        */
  #endif

  PIN_CFG(8,  I_ANALOG)          | /*           - unused -                         */

  #if USE_UART
    PIN_CFG(9,  O_AF + O_10MHZ)  | /*  PA9:  USART1 TX (PUSH-PULL, MEDIUM SPEEED)  */
    PIN_CFG(10, I_PULL)          | /*  PA10: USART1 RX (INPUT, PULL-DOWN)          */
  #else
    PIN_CFG(9,  I_ANALOG)        | /*           - unused -                         */
    PIN_CFG(10, I_ANALOG)        | /*           - unused -                         */
  #endif

  PIN_CFG(11, I_ANALOG)          | /*           - unused -                         */
  PIN_CFG(12, I_ANALOG)          | /*           - unused -                         */
  PIN_CFG(13, I_PULL)            | /*  PA13: SWDIO (INPUT, PULL-UP)                */
  PIN_CFG(14, I_PULL)            | /*  PA14: SWCLK (INPUT, PULL-DOWN)              */
  PIN_CFG(15, I_ANALOG)            /*           - unused -                         */
);
Вам что-то непонятно, Мурик?
Мудрый кот
Сообщения: 1762
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904765#p3904765"]для начала, я хочу организовать связь с 64 устройствами без проводов. в каждом устройстве пусть будет ТИНИ13 и один светодиод типа 2812. Управлять надо цветом, яркостью и динамикой. главный контрллер всем этим рулит и еще кучу некоторой другой работы выполняет.[/uquote]Отправить в эфир широковещательный кадр с заданием состояний/режимов лампочек для всех узлов, который все устройства примут. Каждый выберет из него свою инфу.
Это если все устройства в прямой радиовидимости мастера. Если нет - надо будет добавлять ретрансляцию. Или использовать готовое решение, имеющее оную (например ZigBee).
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

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

GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz
Кому тут не понятно что? Вы когда настраиваете комментарии пишите, чтобы знать что хотите и сами не забудете. Или тут нужен класс C++? :)))

Запоминать и не надо никому ни начинающим, ни профи есть мануал открываете на нужный микроконтроллер и настраиваете. Достаточно знать что нужно делать и как это работает. Так вы сможете любой микроконтроллер запрограммировать независимо от производителя в кратчайшие сроки.


GPIOB настраивается PORT B
-> доступ к полю по указателю
CRL младший регистр конфигурации
|= устанавливается через добавление (поразрядное ИЛИ)
GPIO_CRL_MODE4_1 настраивается поле MODE для 4 ножки, добавляется 1 бит (счет относительно поля с нуля) //10: Output mode, max speed 2 MHz.
Формат полей в референс мануале указан в бинарном формате.

Лево-присваивающий оператор |= кому не понятен это сокращенная запись этой:

GPIOB->CRL = GPIOB->CRL | GPIO_CRL_MODE4_1;

| это Поразрядное ИЛИ
*(volatile uint64_t *) GPIOA = (
a5021 зачем volatile обьявлять, здесь это не требуется. нда и доступ конечно вырви глаз. плюс идет увеличение выравнивания с 4 до 8 -Wcast-align
Поэтому не надо ничего придумывать.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]a5021 зачем volatile обьявлять, здесь это не требуется.[/uquote]
Требуется. Любые регистры всегда объявляются волатайл.
нда и доступ конечно вырви глаз.
Доступ? Не знаю, что значит здесь слово "доступ". Одна строка -- один пин. Весь блок инициализации -- одно присвоение. И наглядно и компактно. Через пять лет можно открыть исходник и без малейшего затруднения быстро поменять пины, как надо, если возникнет нужда.
плюс идет увеличение выравнивания с 4 до 8 -Wcast-align
Выравнивание ни при чем. Cortex-M3 не умеет в 64-битные инструкции, т.ч. операции все равно 32-битные.
Поэтому не надо ничего придумывать.
перепишите в вашем стиле, попросим сравнить кому интересно.
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="a5021",url="/forum/viewtopic.php?p=3904877#p3904877"][uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]a5021 зачем volatile обьявлять, здесь это не требуется.[/uquote]
Требуется. Любые регистры всегда объявляются волатайл.[/uquote]

Это ты где прочитал что так делать надо?
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904880#p3904880"]Это ты где прочитал что так делать надо?[/uquote]
В CMSIS, вестимо:

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

#define     __IO    volatile             /*!< Defines 'read / write' permissions */
typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

a5021 в данном случае не требуется. К тому же это отключает оптимизацию. Не всегда это нужно у регистров.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]

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

GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz
Кому тут не понятно что? Вы когда настраиваете комментарии пишите, чтобы знать что хотите и сами не забудете.[/uquote]1. Я не хочу помнить что значит в каждом конкретном чипе из всех что у меня в работе ничегонеговорящее GPIO_CRL_MODE4_1.
2. Я не хочу помнить есть ли там GPIO_CRL_MODE4_0 и GPIO_CRL_MODE4_2 и что значат они. А может там еще и CNF биты есть? Да ну на.
3. Я не хочу помнить начальное состояние GPIOB->CRL. Оно может отличаться от GPIOA->CRL и других. А не помня этого как можно тут |= применить?

[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Запоминать и не надо никому ни начинающим, ни профи есть мануал открываете на нужный микроконтроллер и настраиваете.[/uquote]Чтобы сконфигурировать на выход один пин лезть в RM?

И у меня для вас плохие новости. :cry: Начальное состояние GPIOB->CRL равно 0x44444444. Ваша инструкция задала не PushPull 2 MHz, а OpenDrain режим. Ошибка в такой примитивной операции, как конфигурация одного пина. ЧТД!!!

[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Или тут нужен класс C++? :)))[/uquote]А почему нет? Я даже думать не буду что это за контроллер и напишу

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

PB_4::mode<PinMode::PushPull_LowSpeed<>>();
Компилятор всё сделает за меня. На F1 он, в отличии от вас, старательно зачистил ненужные биты

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

LDR.W    R5,??main_0      ;; 0x40010c00
LDR      R0,[R5, #+0]
BIC      R0,R0,#0xF0000
ORR      R0,R0,#0x20000
STR      R0,[R5, #+0]
На mdr1986ve8

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

        LDR.N    R0,??DataTable1  ;; 0x40081010
        MOVS     R1,#+16
        STR      R1,[R0, #+0]
        STR      R1,[R0, #+40]
        STR      R1,[R0, #+68]
        STR      R1,[R0, #+52]
        STR      R1,[R0, #+60]
        MOV      R2,#+512
        MOV      R1,#+256
        STR      R1,[R0, #+72]
        STR      R2,[R0, #+80]
        MOV      R1,#+983040
        STR      R1,[R0, #+24]
И тут точно не будет ошибок, как у вас.

Добавлено after 49 minutes 11 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3904888#p3904888"]a5021 в данном случае не требуется. К тому же это отключает оптимизацию. Не всегда это нужно у регистров.[/uquote]У меня для вас вторая плохая новость за это утро. :cry:

Вот так правильно.Изображение

А вот так фигняс получиласьИзображение
СпойлерIAR, чуть похитрее даже поступил.

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

*(volatile uint64_t *) GPIOA = 0xFFFFFFFF'00000000;
        LDR.W    R5,??main_0      ;; 0x40010800
        MOVS     R0,#+0
        MOV      R1,#-1
        STRD     R0,R1,[R5, #+0]
*(volatile uint64_t *) GPIOA = 0x00000000'FFFFFFFF;
        MOVS     R3,#+0
        STRD     R1,R3,[R5, #+0]
vol.png
(60.82 КБ) 433 скачивания
nvol.png
(53.86 КБ) 431 скачивание
Добавлено after 10 minutes 41 second:
[uquote="a5021",url="/forum/viewtopic.php?p=3904853#p3904853"]Смотря как записать. Можно, например, так:[/uquote]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7. При том что у него и портов 11, и регистров конфигурации одного порта 7. Да помножить это на 16 пинов. На 16 AF просто забьём :) Кстати, не для всех режимов нужно все регистры порта конфигурировать. Это как-то учтем в портянке?
Последний раз редактировалось VladislavS Вс окт 11, 2020 09:07:27, всего редактировалось 1 раз.
Ответить

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