Зато потом будет проще. Я верю. И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше, т.к. либо будешь больше знать о работе МК, либо не будешь применять библиотеки практически совсем... Как-то так.
STM32 новичку в ARM что к чему
Да. Туго... Но никто и не обещал простого.. Туго во всем, в чем разбираешься практически с фундамента. Даже в самом строительстве.
Зато потом будет проще. Я верю. И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше, т.к. либо будешь больше знать о работе МК, либо не будешь применять библиотеки практически совсем... Как-то так.
Зато потом будет проще. Я верю. И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше, т.к. либо будешь больше знать о работе МК, либо не будешь применять библиотеки практически совсем... Как-то так.
Станислав
- Реклама
Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать... Поскольку ранее я утверждал, что не стоит, то и ищу факты, чтобы утвердиться во мнении или изменить его.
И чем больше смотрю, тем больше прихожу к мнению, что я не ошибся.
Эта область для тех, кто так и не смог самоутвердиться по жизни... Ничего полезного начинающим тут почти нет... Только демонстрация собственной крутости...
И чем больше смотрю, тем больше прихожу к мнению, что я не ошибся.
Эта область для тех, кто так и не смог самоутвердиться по жизни... Ничего полезного начинающим тут почти нет... Только демонстрация собственной крутости...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Вот с этим почти соглашусь...ARV писал(а):Ничего полезного начинающим тут почти нет...
Если бы с таким же рвением объясняли и отвечали начинающим, пользы было бы больше.
Станислав
[uquote="ARV",url="/forum/viewtopic.php?p=3904697#p3904697"]я не ошибся[/uquote]
Все гораздо проще.
Начинающим в контроллерах к АРМам нужно либо относиться как к Ардуинам, то есть никуда не вникать и копипастить некие типовые фрагменты кода, собирая из них несложные паззлы, либо долго и упорно осваивать фундаментальные основы архитектуры. Последнее годится только для самых настойчивых и серьезных - таким советы из этой темы совершенно ни к чему.
Все гораздо проще для тех, кто имеет значительный опыт в более простых платформах.
Все гораздо проще.
Начинающим в контроллерах к АРМам нужно либо относиться как к Ардуинам, то есть никуда не вникать и копипастить некие типовые фрагменты кода, собирая из них несложные паззлы, либо долго и упорно осваивать фундаментальные основы архитектуры. Последнее годится только для самых настойчивых и серьезных - таким советы из этой темы совершенно ни к чему.
Все гораздо проще для тех, кто имеет значительный опыт в более простых платформах.
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="ARV",url="/forum/viewtopic.php?p=3904697#p3904697"]Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать.[/uquote]
Задача у вас -- не позавидуешь.
Задача у вас -- не позавидуешь.
- Реклама
Я мало знаю про АВР, но все же на них собрал несколько устройств. Опечалился, когда кантору перекупил Микрочип. Да и в большинстве промышленных контроллеров, в том числе в автопроме применяются ПИК. А я их почти совсем не знаю.
Дальше, задумки мои многолетние уже, я понял, что на АВР не реализую. Мало и памяти и скорости. Вот и решился пойти на 32 бита.
А дается мне это тяжело, потому что у меня тупо со знанием Си проблемы... и времени сидеть днями перед компом нету. Использовать библиотеки не могу, потому что также, в соответствии задумок, устройство достаточно со специфичным алгоритмом. Ну это в моей голове так. Просто в природе нет библиотеки готовой, которая способна это реализовать.
Дальше, задумки мои многолетние уже, я понял, что на АВР не реализую. Мало и памяти и скорости. Вот и решился пойти на 32 бита.
А дается мне это тяжело, потому что у меня тупо со знанием Си проблемы... и времени сидеть днями перед компом нету. Использовать библиотеки не могу, потому что также, в соответствии задумок, устройство достаточно со специфичным алгоритмом. Ну это в моей голове так. Просто в природе нет библиотеки готовой, которая способна это реализовать.
Станислав
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904745#p3904745"]в природе нет библиотеки[/uquote]
Выстраивать будущее устройство нужно сверху вниз - от общего к частному. Тогда и выяснится - есть библиотека или ее нет...
Выстраивать будущее устройство нужно сверху вниз - от общего к частному. Тогда и выяснится - есть библиотека или ее нет...
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Просто не Ищите простых путей.СКАЗОЧНИК писал(а):Да. Туго... Но никто и не обещал простого..
Они есть. Как я уже писал - SPL, в крайнем случае HAL / LL.
Расскажите это Эдди, который освоил F1 и F0 и считает F4 слишком сложными, а все потому что работает с регистрами, а не использует библиотеки. Вообще многое зависит от человека.СКАЗОЧНИК писал(а):Зато потом будет проще.
По регистрам будет гораздо больше вопросов чем по SPL и HAL вместе взятым.СКАЗОЧНИК писал(а):И вопросов про различные библиотеки от СПЛ, ХАЛ и т.д. будет меньше
Лично вам не стоит. Используйте AVR дальше.ARV писал(а):Я в эту тему смотрю постоянно, с целью понять, что такое stm32 и стоит ли его осваивать.
На форуме не только начинающие. И темы споров зависит от уровня знаний.СКАЗОЧНИК писал(а):Но больше спорят про всякую ерунду, которая к начинающим отношения не имеет.
Почему? Язык Си не сложный и его можно довольно быстро изучить.СКАЗОЧНИК писал(а):А дается мне это тяжело, потому что у меня тупо со знанием Си проблемы
Алгоритм никак не связан с использованием библиотек. Тем более когда идет речь про периферийные библиотеки, которые для МК. Это примерно как дрова для компа.СКАЗОЧНИК писал(а):Использовать библиотеки не могу, потому что также, в соответствии задумок, устройство достаточно со специфичным алгоритмом.
для начала, я хочу организовать связь с 64 устройствами без проводов. в каждом устройстве пусть будет ТИНИ13 и один светодиод типа 2812. Управлять надо цветом, яркостью и динамикой. главный контрллер всем этим рулит и еще кучу некоторой другой работы выполняет. Каждое устройство имеет свой уникальный адрес.
Пока не знаю как это решить. )
Пока не знаю как это решить. )
Станислав
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904765#p3904765"]для начала, я хочу[/uquote]
Для начала нужно выстроить обозначенный список задач в общую диаграмму работы МК, чтобы понять пересечение этих задач во времени и возможность не применять ОСРВ для разруливания многозадачности, ну или применять ОСРВ. Отдельно нужно определить для себя интерфейс связи с Tiny13. Затем каждую из задач реализовать совершенно независимо.
Для начала нужно выстроить обозначенный список задач в общую диаграмму работы МК, чтобы понять пересечение этих задач во времени и возможность не применять ОСРВ для разруливания многозадачности, ну или применять ОСРВ. Отдельно нужно определить для себя интерфейс связи с Tiny13. Затем каждую из задач реализовать совершенно независимо.
- Сообщения: 6596
- Зарегистрирован: Сб янв 28, 2006 22:47:24
[uquote="Мурик",url="/forum/viewtopic.php?p=3904760#p3904760"]По регистрам будет гораздо больше вопросов чем по SPL и HAL вместе взятым.[/uquote]
Посмотрел я эти SPL и HAL, там имена функций такие, что пальцы вывихнешь набивая их с клавы. Запомнить их и вовсе нереально. Описание функций через пень-колоду и галопом по европам. У регистров хотя бы названия человеческие и нормальное описание в RM.
[uquote="Мурик",url="/forum/viewtopic.php?p=3904760#p3904760"]
Да, но непонятно, зачем засорять высокоуровневыми спорами тему для начинающих. Которые вынуждены по крупицам потом выцарапывать полезную информацию из десятков страниц споров не имеющих отношения к конкретной теме. На форуме валом тем для опытных погроммистов.
Посмотрел я эти SPL и HAL, там имена функций такие, что пальцы вывихнешь набивая их с клавы. Запомнить их и вовсе нереально. Описание функций через пень-колоду и галопом по европам. У регистров хотя бы названия человеческие и нормальное описание в RM.
[uquote="Мурик",url="/forum/viewtopic.php?p=3904760#p3904760"]
На форуме не только начинающие. И темы споров зависит от уровня знаний[/uquote]СКАЗОЧНИК писал(а):Но больше спорят про всякую ерунду, которая к начинающим отношения не имеет.
Да, но непонятно, зачем засорять высокоуровневыми спорами тему для начинающих. Которые вынуждены по крупицам потом выцарапывать полезную информацию из десятков страниц споров не имеющих отношения к конкретной теме. На форуме валом тем для опытных погроммистов.
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Для этого есть автозавершение.Asmodey писал(а): набивая их с клавы
Описание битов в RM не лучше.Asmodey писал(а):Описание функций через пень-колоду и галопом по европам.
Ну да, "очень понятные" названия. Например.Asmodey писал(а):У регистров хотя бы названия человеческие и нормальное описание в RM.
Код: Выделить всё
GPIOB->CRL |= GPIO_CRL_MODE4_1;- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Мурик",url="/forum/viewtopic.php?p=3904848#p3904848"]Ну да, "очень понятные" названия. Например. Новички без чтения RM однозначно поймут что означает эта строка и какой режим порта устанавливается.
[/uquote]
Смотря как записать. Можно, например, так:
Вам что-то непонятно, Мурик?
Код: Выделить всё
GPIOB->CRL |= GPIO_CRL_MODE4_1;Смотря как записать. Можно, например, так:
Код: Выделить всё
#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 - */
);
- Сообщения: 1760
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3904765#p3904765"]для начала, я хочу организовать связь с 64 устройствами без проводов. в каждом устройстве пусть будет ТИНИ13 и один светодиод типа 2812. Управлять надо цветом, яркостью и динамикой. главный контрллер всем этим рулит и еще кучу некоторой другой работы выполняет.[/uquote]Отправить в эфир широковещательный кадр с заданием состояний/режимов лампочек для всех узлов, который все устройства примут. Каждый выберет из него свою инфу.
Это если все устройства в прямой радиовидимости мастера. Если нет - надо будет добавлять ретрансляцию. Или использовать готовое решение, имеющее оную (например ZigBee).
Это если все устройства в прямой радиовидимости мастера. Если нет - надо будет добавлять ретрансляцию. Или использовать готовое решение, имеющее оную (например ZigBee).
Код: Выделить всё
GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHzЗапоминать и не надо никому ни начинающим, ни профи есть мануал открываете на нужный микроконтроллер и настраиваете. Достаточно знать что нужно делать и как это работает. Так вы сможете любой микроконтроллер запрограммировать независимо от производителя в кратчайшие сроки.
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;
| это Поразрядное ИЛИ
a5021 зачем volatile обьявлять, здесь это не требуется. нда и доступ конечно вырви глаз. плюс идет увеличение выравнивания с 4 до 8 -Wcast-align*(volatile uint64_t *) GPIOA = (
Поэтому не надо ничего придумывать.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]a5021 зачем volatile обьявлять, здесь это не требуется.[/uquote]
Требуется. Любые регистры всегда объявляются волатайл.
Требуется. Любые регистры всегда объявляются волатайл.
Доступ? Не знаю, что значит здесь слово "доступ". Одна строка -- один пин. Весь блок инициализации -- одно присвоение. И наглядно и компактно. Через пять лет можно открыть исходник и без малейшего затруднения быстро поменять пины, как надо, если возникнет нужда.нда и доступ конечно вырви глаз.
Выравнивание ни при чем. Cortex-M3 не умеет в 64-битные инструкции, т.ч. операции все равно 32-битные.плюс идет увеличение выравнивания с 4 до 8 -Wcast-align
перепишите в вашем стиле, попросим сравнить кому интересно.Поэтому не надо ничего придумывать.
[uquote="a5021",url="/forum/viewtopic.php?p=3904877#p3904877"][uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]a5021 зачем volatile обьявлять, здесь это не требуется.[/uquote]
Требуется. Любые регистры всегда объявляются волатайл.[/uquote]
Это ты где прочитал что так делать надо?
Требуется. Любые регистры всегда объявляются волатайл.[/uquote]
Это ты где прочитал что так делать надо?
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="Oxford",url="/forum/viewtopic.php?p=3904880#p3904880"]Это ты где прочитал что так делать надо?[/uquote]
В CMSIS, вестимо:
В 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;a5021 в данном случае не требуется. К тому же это отключает оптимизацию. Не всегда это нужно у регистров.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]
Кому тут не понятно что? Вы когда настраиваете комментарии пишите, чтобы знать что хотите и сами не забудете.[/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?
И у меня для вас плохие новости.
Начальное состояние GPIOB->CRL равно 0x44444444. Ваша инструкция задала не PushPull 2 MHz, а OpenDrain режим. Ошибка в такой примитивной операции, как конфигурация одного пина. ЧТД!!!
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Или тут нужен класс C++?
[/uquote]А почему нет? Я даже думать не буду что это за контроллер и напишуКомпилятор всё сделает за меня. На F1 он, в отличии от вас, старательно зачистил ненужные битыНа mdr1986ve8И тут точно не будет ошибок, как у вас.
Добавлено after 49 minutes 11 seconds:
[uquote="Oxford",url="/forum/viewtopic.php?p=3904888#p3904888"]a5021 в данном случае не требуется. К тому же это отключает оптимизацию. Не всегда это нужно у регистров.[/uquote]У меня для вас вторая плохая новость за это утро.
Вот так правильно.
А вот так фигняс получилась
Добавлено after 10 minutes 41 second:
[uquote="a5021",url="/forum/viewtopic.php?p=3904853#p3904853"]Смотря как записать. Можно, например, так:[/uquote]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7. При том что у него и портов 11, и регистров конфигурации одного порта 7. Да помножить это на 16 пинов. На 16 AF просто забьём
Кстати, не для всех режимов нужно все регистры порта конфигурировать. Это как-то учтем в портянке?
Код: Выделить всё
GPIOB->CRL |= GPIO_CRL_MODE4_1; // PORTB.4 OUTPUT 2MHz2. Я не хочу помнить есть ли там 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?
И у меня для вас плохие новости.
[uquote="Oxford",url="/forum/viewtopic.php?p=3904859#p3904859"]Или тут нужен класс C++?
Код: Выделить всё
PB_4::mode<PinMode::PushPull_LowSpeed<>>();Код: Выделить всё
LDR.W R5,??main_0 ;; 0x40010c00
LDR R0,[R5, #+0]
BIC R0,R0,#0xF0000
ORR R0,R0,#0x20000
STR R0,[R5, #+0]Код: Выделить всё
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]У меня для вас вторая плохая новость за это утро.
Вот так правильно.
А вот так фигняс получилась
Спойлер
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][uquote="a5021",url="/forum/viewtopic.php?p=3904853#p3904853"]Смотря как записать. Можно, например, так:[/uquote]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7. При том что у него и портов 11, и регистров конфигурации одного порта 7. Да помножить это на 16 пинов. На 16 AF просто забьём
Последний раз редактировалось VladislavS Вс окт 11, 2020 09:07:27, всего редактировалось 1 раз.


