Мурик, извини, подставил тебя, но это лишний раз показывает "прозрачность" кода. А представь, в таком стиле не один регистр записан, а все!
STM32 новичку в ARM что к чему
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
a5021, подгорает? Я три дня за вами скакал, чтобы сказать как вы мне безразличны? Отобрали победу в упражнении "последнее слово за мной" ввиду неявки соперника ? 
Мурик, извини, подставил тебя, но это лишний раз показывает "прозрачность" кода. А представь, в таком стиле не один регистр записан, а все!
Мурик, извини, подставил тебя, но это лишний раз показывает "прозрачность" кода. А представь, в таком стиле не один регистр записан, а все!
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=3493949#p3493949"]a5021, подгорает? Я три дня за вами скакал, чтобы сказать как вы мне безразличны? Отобрали победу в упражнении "последнее слово за мной" ввиду неявки соперника ?
[/uquote]
У вас довольно причудливые фантазии. Лучше бы на вопросы ответили по поводу вашего аутентичного бреда.
Тут мне подумалось, что нельзя инвалидов умственного труда бросать в трудную минуту. Если у вас трясутся руки, двоится в глазах, звенит в ушах и мысли с глухим стуком бьются друг об друга, что копирование нескольких строк представляет непосильную задачу, то предлагаю воспользоваться специальным протезом когнитивных способностей, что я для вас только что сваял на коленке:
Это скрипт на питоне. Двенадцать строк на все про все. Со стандартного ввода он берет содержимое CMSIS файла для соответствующего МК STM32. Также в командной строке указывается регистр, инициализацию которого надлежит сформировать. Например, для получения кода инициализации регистра SPI->CR1 для STM32F103xb вызов скрипта должен выглядеть так:
Все дифайны и комментарии выдираются, форматируются и подаются в удобной для дальнейшей ручной подгонки форме. Поклонники волшебных чисел, разумеется, не оценят, но мне показалось вполне употребимым. Покрутил на разных заголовочных файлах и разных регистрах, вроде формируется все правильно.
У вас довольно причудливые фантазии. Лучше бы на вопросы ответили по поводу вашего аутентичного бреда.
Кем он так записан и почему? В силу каких подвижек сознания могли образоваться такие искажения окружающей действительности? Даже крайние криворучки вполне могут перенести копипастой дифайны из заголовочного файла без ошибок. Какая нелегкая так надругалась над двумя славными программерами, что они не в состоянии без ошибок скопировать несколько строк?Мурик, извини, подставил тебя, но это лишний раз показывает "прозрачность" кода. А представь, в таком стиле не один регистр записан, а все!
Тут мне подумалось, что нельзя инвалидов умственного труда бросать в трудную минуту. Если у вас трясутся руки, двоится в глазах, звенит в ушах и мысли с глухим стуком бьются друг об друга, что копирование нескольких строк представляет непосильную задачу, то предлагаю воспользоваться специальным протезом когнитивных способностей, что я для вас только что сваял на коленке:
Спойлер
Код: Выделить всё
import sys, re
(p, q, d, t, pad, rxp) = (0, 0, [], sys.argv[1].split('->'), lambda a, b, c : (len(a[1]) if len(a[1]) > b else b, len(a[0]) if len(a[0]) > c else c), re.compile(r'//.*?(\r\n?|\n)|/\*.*?\*/'))
for line in sys.stdin:
if line.find(t[0] + "_" + t[1]) != -1:
w = line.split()
if w[0] == "#define" and not w[1].endswith("_Pos"):
s = rxp.search(line)
w[0] = s.group(0).replace("!<", " ").rstrip(' \t\n\r\*\/') if s else "/* "
d.append((w[1], w[0]));
(p, q) = pad(w, p, q)
for x in d:
print(" ", sys.argv[1] + " = (\n " if x[0] == d[0][0] else "", " 0 *", x[0].ljust(p), "| " + x[1].ljust(q + 1) + "*/" if x[0] != d[-1][0] else " " + x[1].ljust(q + 1) + "*/" + "\n );")
код на выходе при этом получится такой:reg_init.py "SPI->CR1" < Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f103xb.h
Спойлер
Код: Выделить всё
SPI->CR1 = (
0 * SPI_CR1_CPHA_Msk | /* 0x00000001 */
0 * SPI_CR1_CPHA | /* Clock Phase */
0 * SPI_CR1_CPOL_Msk | /* 0x00000002 */
0 * SPI_CR1_CPOL | /* Clock Polarity */
0 * SPI_CR1_MSTR_Msk | /* 0x00000004 */
0 * SPI_CR1_MSTR | /* Master Selection */
0 * SPI_CR1_BR_Msk | /* 0x00000038 */
0 * SPI_CR1_BR | /* BR[2:0] bits (Baud Rate Control) */
0 * SPI_CR1_BR_0 | /* 0x00000008 */
0 * SPI_CR1_BR_1 | /* 0x00000010 */
0 * SPI_CR1_BR_2 | /* 0x00000020 */
0 * SPI_CR1_SPE_Msk | /* 0x00000040 */
0 * SPI_CR1_SPE | /* SPI Enable */
0 * SPI_CR1_LSBFIRST_Msk | /* 0x00000080 */
0 * SPI_CR1_LSBFIRST | /* Frame Format */
0 * SPI_CR1_SSI_Msk | /* 0x00000100 */
0 * SPI_CR1_SSI | /* Internal slave select */
0 * SPI_CR1_SSM_Msk | /* 0x00000200 */
0 * SPI_CR1_SSM | /* Software slave management */
0 * SPI_CR1_RXONLY_Msk | /* 0x00000400 */
0 * SPI_CR1_RXONLY | /* Receive only */
0 * SPI_CR1_DFF_Msk | /* 0x00000800 */
0 * SPI_CR1_DFF | /* Data Frame Format */
0 * SPI_CR1_CRCNEXT_Msk | /* 0x00001000 */
0 * SPI_CR1_CRCNEXT | /* Transmit CRC next */
0 * SPI_CR1_CRCEN_Msk | /* 0x00002000 */
0 * SPI_CR1_CRCEN | /* Hardware CRC calculation enable */
0 * SPI_CR1_BIDIOE_Msk | /* 0x00004000 */
0 * SPI_CR1_BIDIOE | /* Output enable in bidirectional mode */
0 * SPI_CR1_BIDIMODE_Msk | /* 0x00008000 */
0 * SPI_CR1_BIDIMODE /* Bidirectional data mode enable */
);Re: STM32 новичку в ARM что к чему
Пока парсил CMSIS файлы, на глаза иногда попадались индусские перлы, типа таких:
это из Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h753xx.h
На второй строке комментариев силы покинули неизвестного индуса и он начал копипастить что попало. Регистров данных набралось в итоге чуть больше, чем дофига.
Это еще хорошо, что ихние индусы копипастят не внося грубых ошибок в код. Не то, что специалисты на здешнем форуме.
Код: Выделить всё
typedef struct
{
__IO uint32_t CR1; /*!< SPI Control register 1, Address offset: 0x00 */
__IO uint32_t CR2; /*!< SPI Control register 2, Address offset: 0x04 */
__IO uint32_t CFG1; /*!< SPI Status register, Address offset: 0x08 */
__IO uint32_t CFG2; /*!< SPI Status register, Address offset: 0x0C */
__IO uint32_t IER; /*!< SPI data register, Address offset: 0x10 */
__IO uint32_t SR; /*!< SPI data register, Address offset: 0x14 */
__IO uint32_t IFCR; /*!< SPI data register, Address offset: 0x18 */
uint32_t RESERVED0; /*!< SPI data register, Address offset: 0x1C */
__IO uint32_t TXDR; /*!< SPI data register, Address offset: 0x20 */
uint32_t RESERVED1[3]; /*!< Reserved, 0x24-0x2C */
__IO uint32_t RXDR; /*!< SPI data register, Address offset: 0x30 */
uint32_t RESERVED2[3]; /*!< Reserved, 0x34-0x3C */
__IO uint32_t CRCPOLY; /*!< SPI data register, Address offset: 0x40 */
__IO uint32_t TXCRC; /*!< SPI data register, Address offset: 0x44 */
__IO uint32_t RXCRC; /*!< SPI data register, Address offset: 0x48 */
__IO uint32_t UDRDR; /*!< SPI data register, Address offset: 0x4C */
__IO uint32_t I2SCFGR; /*!< SPI data register, Address offset: 0x50 */
} SPI_TypeDef;На второй строке комментариев силы покинули неизвестного индуса и он начал копипастить что попало. Регистров данных набралось в итоге чуть больше, чем дофига.
Это еще хорошо, что ихние индусы копипастят не внося грубых ошибок в код. Не то, что специалисты на здешнем форуме.
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
a5021
У меня на F407 делители шин запускались, если только их по одному прописывать. Побитно.
Так что, и в новых камнях, всё может быть..
У меня на F407 делители шин запускались, если только их по одному прописывать. Побитно.
Так что, и в новых камнях, всё может быть..
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
В документации от производителя это где-то указывается? Откуда вы почерпнули эту "последовательную" методику?
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="Мяукните!",url="/forum/viewtopic.php?p=3495764#p3495764"]У меня на F407 делители шин запускались, если только их по одному прописывать. Побитно.[/uquote]
Все там нормально с делителями, можно все за раз установить и не только их.
Все там нормально с делителями, можно все за раз установить и не только их.
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
a5021
Методом "научного тыка". Если за один раз целым регистром загрузить, делители не стартовали....
Методом "научного тыка". Если за один раз целым регистром загрузить, делители не стартовали....
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
речь про RCC->PLLCFGR ?
Re: STM32 новичку в ARM что к чему
Мяукните, перестаньте из чуши легенды складывать. Вам же могут поверить нубы.
Изучайте - http://mcu.goodboard.ru/viewtopic.php?id=11
Изучайте - http://mcu.goodboard.ru/viewtopic.php?id=11
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
a5021
Регистр RCC_CFGR. Только он. Единственный )
Добавлено after 24 minutes 47 seconds:
p.s. немного материалов по теме.
На хабре, когда афтар брал мой код, очевидно его проверил!
Практика раздельной установки регистра RCC_CFGR просматривается и в других камушках. Но это уже си, проверить нет никакой возможности...
У меня только ассемблер
Регистр RCC_CFGR. Только он. Единственный )
Добавлено after 24 minutes 47 seconds:
p.s. немного материалов по теме.
На хабре, когда афтар брал мой код, очевидно его проверил!
Практика раздельной установки регистра RCC_CFGR просматривается и в других камушках. Но это уже си, проверить нет никакой возможности...
У меня только ассемблер
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
Испытываю некоторый скепсис по поводу вами сказанного. Если операции необходимо выполнять в какой-то последовательности, то такая последовательность должна быть описана явным образом в документации. С другой стороны, конфигурацию задавать допустимо только для выключенного PLL и кто бы мне объяснил в чем волшебство пораздельного переключения делителей, если блок в останове?
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Попробовал на другом камушке 407 серии. Не на дискавери. Код выполнялся из RAM. Частота ядра 280 МГц.
Работает! Код можно сократить до 3 строк.
С флешкой на 168МГц не пробовал. Лень.. 
И потом, на этапе конфигурирования камня, не стоит всё лепить в одну строку. Нет смысла экономить каждую фемтосекунду. Лучше растягивать действия на несколько строк и хорошенько описывать их. В будущем, будет легче понять, что делается на этапе подъёма камня.
Кстати, AS для ARM не позволяет разбивать одну строку на несколько. Символ "\" работает только в ассемблере на AVR8....
Работает! Код можно сократить до 3 строк.
Код: Выделить всё
LDR R1, [R0, RCC_CFGR]
BIS R1, RCC_CFGR_HPRE_DIV1 + RCC_CFGR_PPRE2_DIV2 + RCC_CFGR_PPRE1_DIV4
STR R1, [R0, RCC_CFGR]
И потом, на этапе конфигурирования камня, не стоит всё лепить в одну строку. Нет смысла экономить каждую фемтосекунду. Лучше растягивать действия на несколько строк и хорошенько описывать их. В будущем, будет легче понять, что делается на этапе подъёма камня.
Кстати, AS для ARM не позволяет разбивать одну строку на несколько. Символ "\" работает только в ассемблере на AVR8....
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
[uquote="Мяукните!",url="/forum/viewtopic.php?p=3496780#p3496780"]И потом, на этапе конфигурирования камня, не стоит всё лепить в одну строку. Нет смысла экономить каждую фемтосекунду. Лучше растягивать действия на несколько строк[/uquote]
Чем лучше-то? Вот вы, например, уже дорастягивались до удивительных результатов.
Чем лучше-то? Вот вы, например, уже дорастягивались до удивительных результатов.
Хорошенько описывать и делать массу бессмысленных действий -- это существенно разные занятия.и хорошенько описывать их.
- Мяукните!
- Открыл глаза
- Сообщения: 63
- Зарегистрирован: Пн апр 20, 2015 14:00:32
- Контактная информация:
Re: STM32 новичку в ARM что к чему
В исходниках на запуск AM3358 был найден удивительный код, который показался сверх-излишним. Казалось, делается куча ненужных телодвижений. Но всё приходит с опытом. Поэтому в своих проектах я использовал подход, скопированный с исходников на си.
Что касаемо случая с F407, то условие было явно обнаружено. Когда речь пойдёт о высоконадёжном коде, то эти 9 строк могут растянуться и на 30! И даже больше.
Хотите - пишите в одну строку
Что касаемо случая с F407, то условие было явно обнаружено. Когда речь пойдёт о высоконадёжном коде, то эти 9 строк могут растянуться и на 30! И даже больше.
Хотите - пишите в одну строку
NXP i.MX7D на чистом ассемблере
Re: STM32 новичку в ARM что к чему
Вроде это не GD32 и цена довольно интересная. По даташиту оно на stm32f103c8t6 вполне походит.

Никто не в курсе, что это за чудо природы?

Никто не в курсе, что это за чудо природы?
Re: STM32 новичку в ARM что к чему
А у меня не ищется на али по таким данным...
А не нашлось, единственный продован с нулем продаж по сабжу и с 5ю жалобами на другие.
Мяукните, ваш неудачный опыт в кодинге на асме, это лишь ваши неудачи и неболее. Не баги в камнях и не какая-то там ахинея...
А не нашлось, единственный продован с нулем продаж по сабжу и с 5ю жалобами на другие.
Мяукните, ваш неудачный опыт в кодинге на асме, это лишь ваши неудачи и неболее. Не баги в камнях и не какая-то там ахинея...
Re: STM32 новичку в ARM что к чему
Я бы не придал значения, какие там китайцы какой самобытной хренью торгуют, если бы не история с продвинутым клоном атмеги328 от этого же продавца. У меня нет никаких подтверждений, но не ровен час, что и с этим CS32 может выйти похожая история.
Re: STM32 новичку в ARM что к чему
a5021, не я пока пасс. Сейчас перевожу мануал на HC32, затем на очереди SYNWIT...
Re: STM32 новичку в ARM что к чему
Загадаю присутствующим загадку: почему в таком обработчике
блинк мигает, а в таком
нет?
PS. Строки абсолютно идентичные, просто идут в разной последовательности. F103, если что.
Код: Выделить всё
void TIM4_IRQHandler(void) {
TIM4->SR = ~TIM_SR_UIF;
GPIOA->ODR ^= 1;
}Код: Выделить всё
void TIM4_IRQHandler(void) {
GPIOA->ODR ^= 1;
TIM4->SR = ~TIM_SR_UIF;
}
PS. Строки абсолютно идентичные, просто идут в разной последовательности. F103, если что.
Re: STM32 новичку в ARM что к чему
[uquote="a5021",url="/forum/viewtopic.php?p=3501529#p3501529"]Загадаю присутствующим загадку[/uquote]
Придумай что-то поинтереснее, такие загадки на каком-то из форумов соответствующей тематики наверно каждую неделю разгадывают, на этой была тема на easyelectronics
Придумай что-то поинтереснее, такие загадки на каком-то из форумов соответствующей тематики наверно каждую неделю разгадывают, на этой была тема на easyelectronics


