_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 1 сентября 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Если у Артерий честная флешка на кристалле, то это только в плюс.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 1 сентября 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн сен 22, 2025 14:26:01
Нашел транзистор. Понюхал.
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 169
Рейтинг сообщения:0
Я все-таки подожду честных отзывов. И если окажется, что прямо вообще один-в-один (т.е. не придется переделывать стартап, заголовочные файлы и тонну сниппетов), можно будет переходить. А пока - я уже говорил: st-flash не понимает их идентификатора и не может прошить. Возможно, если "пропатчить" и выдать за STM32 этот идентификатор, оно и заработает, но мне на такие эксперименты время тратить не хочется. Да и запасов STM32 у меня вполне прилично, чипов триста всяких разных, если не больше. Разве что F303 еще побольше прикупить бы. Да исследовать более детально G и H серии, особенно последнюю (правда, там вроде как USB OTG - т.е. все равно придется переделывать USB-сниппет): вдруг там есть что-то интересное. А мне, например, не хватает наличия у МК хотя бы пары десятков таймеров, чтобы 8 были с ШИМ и 8 с "режимом энкодера" (соответственно, корпус будет или 100- или даже 144-ногим; но это не страшно: на пайку 144-ногого я трачу максимум 20 минут).
А пока - я уже говорил: st-flash не понимает их идентификатора и не может прошить. Возможно, если "пропатчить" и выдать за STM32 этот идентификатор, оно и заработает,
боюсь, что придется писать драйвер работы с флеш-памятью чипа, при полной отсутствии документации для этого дела в Linux Artery прошиваются через: 1)JLink, 2) openocd 3) pyocd
Цитата:
Я все-таки подожду честных отзывов. И если окажется, что прямо вообще один-в-один
если нужно один в один, то следует брать stm32, полагаю это очевидно даже ребенку
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн сен 22, 2025 16:54:16
Нашел транзистор. Понюхал.
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 169
Рейтинг сообщения:0
JackSmith, ну, если openocd прошивает, то и st-flash, наверное, сможет. Ну или можно просто одну строчку поменять в Makefile, и тоже openocd прошивать (все-таки, в те редкие моменты, когда мне нужна внутрисхемная отладка, я запускаю сервер gdb на openocd, а не на st-util.
Цитата:
если нужно один в один, то следует брать stm32
Ну так выше было сказано, что "артери" - прямо точный клон STM32 по прошивке…
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн сен 22, 2025 17:11:43
Нашел транзистор. Понюхал.
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 169
Рейтинг сообщения:0
Да openocd в репозитории есть - зачем его непонятно откуда качать? Тем более, сборка из live-git чревата, там хотя бы по тегам нужно сливать последнюю stable, а то можно на какой-нибудь еще не улаженный косяк наткнуться.
Я все-таки подожду честных отзывов. И если окажется, что прямо вообще один-в-один (т.е. не придется переделывать стартап, заголовочные файлы и тонну сниппетов), можно будет переходить.
Он не один в один, на большинстве китайцев унылая периферия. В частности у этого AT32F421 нет 32-х битных таймеров и SPI без FIFO, т.е. в этом планет он хуже даже F0, а сравнивать следовало бы хотя бы с G0.
linux_rulezz писал(а):
Да исследовать более детально G и H серии, особенно последнюю (правда, там вроде как USB OTG - т.е. все равно придется переделывать USB-сниппет): вдруг там есть что-то интересное
У H5 не OTG, а HOST, как у G0 и младших U5, но это буквально пару лишних бит поверх старого USB, правда там есть и другие отличия, для примера: Спойлер
Если у Артерий честная флешка на кристалле, то это только в плюс.
Если соотношение ОЗУ/ПЗУ изменяется, то увы и ах. Хотя флэш всегда честная, правда доступ к ней идёт с двумя циклами ожидания вместо доступа без ожидания, когда код находится в той части флэш, которая не отобразилась на ОЗУ, но это так, мелочи, написанные в сноске мелкими буковками. И всю расчудесную производительность эти МК демонстрируют при исполнении кода из ОЗУ.
Хотя флэш всегда честная, правда доступ к ней идёт с двумя циклами ожидания
Это всё равно быстрее, чем с бутербродной QSPI.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 1 сентября 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Я все-таки подожду честных отзывов. И если окажется, что прямо вообще один-в-один (т.е. не придется переделывать стартап, заголовочные файлы и тонну сниппетов), можно будет переходить.
По AT32F421k8T7 как замена STM32F030K6T6 Запаяли образцы в наши изделия. Программатор ST-LINKv2 (и ПО ST-Link Utility) с ними отказался работать , т.к. ID-CODE в регистрах DUBUG модуля имеет другое значение или расположен по другому адресу (для СМ0). Пришлось применять программатор AT-LINK и ПО этого программатора. Заливка готовой прошивки (.нех файла ) от проекта для STM показала неработоспособность нашей прошивки для STM Изучение RM (reference manual) показало, что некоторые модули совсем или неполно совместимы с регистрами модулей STM. ЭТО USART, ADC, SPI. Базовые адреса модулей и вектора прерываний те же, а регистры модулей отличаются. Для SPI всё совпадает кроме 16 битного режима. В USART AT нет регистра и прерывания по таймауту (применялся для обнаружения конца MODBUS пакетов) Пришлось для этой цели задействовать дополнительный таймер. Совпадают (или имеют несущественные для наших проектов- помечены*) следующие модули: GPIO* - отличия в OSPEEDR – у АТ нет скорости M- средней. У STM 00=L; 01=M; 11=H У AT 00=L; 01=H; 11=L. Для нас несущественно RCC*- У АТ есть больше значений для управлениями частотами PLL до 300Мгц. В пределах 48 Мгц всё совпадает. Поэтому стартовая функция CMSIS system_stm32f0xx.c для STM работает штатно в АТ. SYSCFG* (CR1 bits 0&1) управление переносом таблицы прерываний в STM (CM0) пишется и читается. В АТ(СМ4)- только читается. Перенос в АТ возможен через SCB_VTOR (есть в СМ4 и нет в СМ0). Управление EXTI полностью совпадает. SysTick, NVIC, WDT, TIM3, TIM6,Tim7, TIM14, TIM16, TIM17- отличий не нашел (не пришлось что-то менять в проекте для STM32F030K6T6).
Ядро СМ4, включая системный таймер и прерывания работает с прошивкой для СМ0 без нареканий. Если в проекте не применяются USART, ADC, SPI (16 битный режим) то возможно прошивка для STM заработает на АТ без доработки (прошивать правда придется родным АТ-Link или J-Link программаторами)
Удалось у АТ найти недокументированную возможность для определения при старте прошивки где она работает? В STM или АТ? Далее запоминаем где работаем и при работе с USART, ADC, SPI работаем с регистрами STM или AT. В Результате удалось разработать универсальную прошивку для наших изделий, которая работает одинаково с AT32F421k8T7 и STM32F030K6T6. Компилировался универсальный проект в KEIL CMSIS (без CUBE и HAL) для STM32F030. Для работы с регистрами АТ создал .h файл описания регистров и битов для АТ USART_AT, ADC_AT, SPI_AT. Недокументированную возможность следующая: ID-CODE в СМ4 читается в регистре которого нет в СМ0. DEBUG_IDCODE (адрес 0xE0042000) . Чтение в СМ0 приведет к ошибке. У СМ0 ID-code читается в DBGMCU->IDCODE (адрес 0x40015800), Для STM030 значение с маcкой 0xfff равно 0x444. Этот адрес в доке у АТ написан как резервный, Но реально там читается без ошибки копия адреса 0xE0042000, те тот же ID_CODE.
вроде бы выходит, что можно взять проект от F030 и минимальными правками адаптировать его для F421. я пошел чуть другим путем и дописал в стиле CMSIS (китайцы почему-то от него отказались) необходимые дифайны, оставив китайские названия регистров:
Спойлер
Код:
/** * AT32F421 CRM (Clock and Reset Management) Configuration * * Purpose: Configure AT32F421 CRM module for system clock and peripheral clocks * Features: Supports both internal HICK and external HEXT crystal sources * Performance: Optimized with Flash prefetch buffers and auto-step mode * Usage: Define HEXT_FREQUENCY (4,8,12,16,20,25) for external crystal or leave * undefined to use internal 4MHz HICK oscillator * * Configuration Options: * • HICK (default): 4MHz × 30 = 120MHz * • HEXT 4MHz: 4MHz × 30 = 120MHz * • HEXT 8MHz: 8MHz × 15 = 120MHz * • HEXT 12MHz: 12MHz × 10 = 120MHz * • HEXT 16MHz: 16MHz/2 × 15 = 120MHz * • HEXT 20MHz: 20MHz/2 × 12 = 120MHz * • HEXT 25MHz: 25MHz/2 × 10 = 125MHz (Warning: Not exactly 120MHz) * * Key Features: * ✓ System clock configuration (up to 120MHz) * ✓ Single function to enable all used peripheral clocks * ✓ Automatic PLL multiplication calculation * ✓ Flash wait cycles optimized for high frequency * ✓ Dual prefetch buffers enabled for maximum performance * ✓ Auto-step mode for smooth clock transitions * ✓ Robust timeout handling for all clock operations * ✓ Compile-time configuration validation * ✓ Centralized system clock definitions for all modules * * Example Usage: * #define HEXT_FREQUENCY 8 // Use 8MHz external crystal * crm_config(); // Configure system clock and enable peripheral clocks */
#ifndef CRM_H #define CRM_H
#include "at32f421.h"
/* Configuration macro - define external crystal frequency to use HEXT */ // #define HEXT_FREQUENCY 8 // External crystal frequency in MHz (uncomment to use HEXT)
/* Timeout values for clock operations - avoid naming conflicts with HAL */ #define CRM_HEXT_TIMEOUT 50000U #define CRM_PLL_TIMEOUT 50000U #define CRM_SWITCH_TIMEOUT 50000U
/******************************************************************************* * System Clock Definitions - Single Source of Truth ******************************************************************************/
/* System clock frequency - depends on crystal configuration */ #if defined(HEXT_FREQUENCY) && (HEXT_FREQUENCY == 25) #define SYSTEM_CLOCK_HZ 125000000U /* 25MHz crystal case */ #else #define SYSTEM_CLOCK_HZ 120000000U /* All other cases: HICK, 4/8/12/16/20MHz crystals */ #endif
/* Derived bus frequencies (all running at system clock speed) */ #define AHB_CLOCK_HZ SYSTEM_CLOCK_HZ #define APB1_CLOCK_HZ SYSTEM_CLOCK_HZ #define APB2_CLOCK_HZ SYSTEM_CLOCK_HZ
/* Peripheral clock sources for modules to use */ #define TIMER_CLOCK_HZ APB1_CLOCK_HZ #define USART1_CLOCK_HZ APB2_CLOCK_HZ #define GPIO_CLOCK_HZ AHB_CLOCK_HZ
/******************************************************************************* * CRM CFG Register Bit Definitions ******************************************************************************/
/******************************************************************************* * Flash PSR Register Bit Definitions ******************************************************************************/
/******************************************************************************* * PLL Configuration Based on Clock Source ******************************************************************************/
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Пн сен 22, 2025 21:29:57
Нашел транзистор. Понюхал.
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 169
Рейтинг сообщения:0
a5021, я всякими калокубами и SPL не пользуюсь, не страшно. А вот что интересно: неужто китайцы не выложили заголовочные файлы со всеми этими регистрами? В случае STM32 вообще на гитхабе лежат подборки подо все семейства (оттуда я их и таскаю), остается лишь сишный стартап написать и маленький линкер-файл с описанием размеров флеша и оперативки (иногда еще бывает CCRAM, но я пока не дошел до ее использования); а из этого линкер-файла инклюдится основной, общий для всех семейств (там у меня размечены свободные области - отдельно для хранения настроек и отдельно для логов, или только для настроек).
с регистрами выложили, только регистры они почему-то стали именовать в малыми буквами. Например, регистр статуса у блока CRM называется ctrlsts, а если мы хотим обращаться к битовым полям, то запись становится и вовсе вырвиглазной: CRM->ctrlsts_bit.lickstbl = 0. ArteryTek написали что-то вроде SPL, где все регистры дергают через битовые поля. с полями все хорошо и к ним есть все нужные дифайны, но вот дифайнов в стиле CMSIS они не приложили. я сначала попробовал писать код с записью в битовые поля, но стало получаться довольно громоздко. если прямая записью в регистр (в духе STM32) это одна операция присваивания, то в случае битовых полей -- несколько. не понравилось. показалось проще дифайны нужные добавить.
Все есть в этих программных кодах. Возможно, чтобы МК не были похожи друг на друга В APM32 то же самое: RCM->APB2CLKEN_B.PAEN = BIT_SET; Поменяли имена. Беспорядок. Особенно интересно xxx_B . Привыкаешь после первого часа, но поначалу это сбивает с толку. (+транслейт)
у apm32 и stm32 довольно высокая степень подобия и совместимость на уровне бинарей. в этом смысле не вижу целесообразности вообще заглядывать в родные библиотеки apm32.
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
Добавлено: Вс окт 12, 2025 21:19:24
Нашел транзистор. Понюхал.
Зарегистрирован: Пн сен 15, 2025 08:43:23 Сообщений: 169
Рейтинг сообщения:0
a5021, все-таки, стоит сначала документацию сравнить. Вдруг какие-то регистры или флаги различаются? Чтобы потом не сидеть непонимающе: в коде все ОК, gdb показывает, что все ОК, а периферия работает не так, как надо (или вообще не работает).
Цитата:
RCM->APB2CLKEN_B.PAEN = BIT_SET;
У, какая замечательная китайщина! Т.е. они думают, что если побитно будут выставлять флажки в регистре, то gcc это все в одну инструкцию соберет! Видимо, что значит volatile, они не догадываются… Ну и, тем паче, если это делается не через битбанг (в чем я тоже сильно сомневаюсь), то каждая подобная инструкция на самом деле выльется в три: чтение-модификация-запись. Уж лучше сразу, по-классике:
Попробовал скомпилированный код, работает в обоих направлениях: APM2F103CBT6 <-> STM32F103CBT6 Входы/выходы, работа с выводами, прерывания, таймеры, HSE, I2C ... Как будто одинаковые. А для APM 96 MHz заявляют? И оба работали всю ночь на частоте 128 MHz в разгоне . Даже не знаю, что у меня МК есть (оригинал или фейк). Наконец-то куплю хотя бы один "оригинал" (напр. STM32F103) из "за океном", чтобы было с чем сравнивать .
Больше чем уверен, что там структура с битовыми полями определена параллельно с обычным 32-битным регистром и что-то типа RCM->APB2CLKEN = PAEN | PBEN | ...; будет работать. Как хочешь (надо в конкретном случае) так и пользуйся.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения