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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Да нахрен вообще думать, калокуб юзай и все. Там все само генериться. :tea:
Инженер R@D

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

Сообщение VladislavS »

Ну, в отличии от ваших двух сегодняшних ляпов, порты оно, хотелось бы надеяться, без ошибок конфигурит.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Ты просто так ничего и не понял как юзается квалификатор
C++ кодерам это не понять.
Инженер R@D

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

Сообщение VladislavS »

:)

ЗЫ: Научишь? :)))
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3904901#p3904901"]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7.[/uquote]
Бояться вам надо другого -- вы с десятого раза не въезжаете в суть простейших макросов. Портянка имеет максимальный размер в случае, когда от представления требуется максимальная подробность и самодокументируемость. Если этого не требуется, портянка может быть сокращена произвольным образом вплоть до какого-нибудь:

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

*(volatile uint64_t *) GPIOA = 0x2222222222222222;
Что означает "заинитить все пины порта А в режим OUTPUT/PUSH-PULL/2MHZ". Причем, здесь видно, что одна шестнадцатиричная цифра описывает конфигурацию одного пина. Всего этих цифр 16. При определенной сноровке, можно произвольно менять конфигурацию пинов порта, редактируя данную строку. А захочется иначе, можно добавлять "портянку" по вкусу:

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

*(volatile uint64_t *) GPIOA = 0x2222222200022222 + (
  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) */
);
Тут большинство пинов осталось, как и в предыдущем примере, но "прорезались" пины SPI1.
При том что у него и портов 11, и регистров конфигурации одного порта 7.
Число ног и число портов величины связанные. Не пытайтесь нагнать жути и выдать это за мультипликативные факторы. Касательно же F7, сообщаю вам, что GPIO там такое же, как и на F0. Можно было и не раздуваться до F7, но ведь хотелось максимального эффекта, правда?
Да помножить это на 16 пинов.
А почему помножить, а не возвести в 16-ую степень? Ну бредить, так от душе же!
На 16 AF просто забьём :)
Как приятно, что вы столь снисходительны. Только я уже упоминал недавно эти AF, а вы просто позабыли.
Кстати, не для всех режимов нужно все регистры порта конфигурировать. Это как-то учтем в портянке?
Всенепременно. Вот PA0 в OUTUPT/PUSH-PULL/10MHZ, а остальные в аналоговом режиме:

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

*(volatile uint64_t *) GPIOA = 1;
Как думаете, все ли тут "учтено" ?
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]Всенепременно. Вот PA0 в OUTUPT/PUSH-PULL/10MHZ, а остальные в аналоговом режиме:

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

*(volatile uint64_t *) GPIOA = 1;
[/uquote]Вы дальше STM32F103 хоть раз ходили?
Реклама
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Приятно видеть, что вам больше нечего сказать.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Аргументацию "сам дурак" приберегите для кого-нибудь другого.
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Опять бухаете?

Печально еще, что вы не читаете того, что вам пишут. Процитирую себя еще раз:

[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]
На 16 AF просто забьём :)
Как приятно, что вы столь снисходительны. Только я уже упоминал недавно эти AF, а вы просто позабыли.[/uquote]

Вот там по ссылке моя инициализации, которая дает исчерпывающий ответ на вопрос "Вы дальше STM32F103 хоть раз ходили?". Вы этого просто не смгли разобрать, но зачем-то здесь продолжаете раздуваться. Выглядит глуповато.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3905147#p3905147"]Вы этого просто не смгли разобрать[/uquote]Да сегодня уже выяснилось, что я и программировать то не умею. Но дело то не во мне, а в ваших портянках плавно перетекающих в шифровки и обратно. Я уже молчу про то что в них никакого контроля на ошибки даже близко нет.
Спойлер[uquote="a5021",url="/forum/viewtopic.php?p=3905147#p3905147"]Опять бухаете?[/uquote]Думаете хамство добавляет вам аргументации в споре?
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17

Сообщение AVI-crak »

[uquote="Reflector",url="/forum/viewtopic.php?p=3904920#p3904920"]Так ведь никто кроме тебя не рискнул привести пример инициализации для LTDC...[/uquote]
Могу показать свой вариант для STM32F746BG.
Спойлер

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

    gpio_one_pin(zap_gpio.H.pin05.v_af12_fmc_sdnwe.speed4.pull_up.lock_on);            /// FMC_sdnwe
    gpio_one_pin(zap_gpio.F.pin11.v_af12_fmc_sdnras.speed4.pull_up.lock_on);           /// FMC_sdnras
    gpio_one_pin(zap_gpio.H.pin03.v_af12_fmc_sdne0.speed4.pull_up.lock_on);            /// FMC_sdne0
    gpio_one_pin(zap_gpio.G.pin15.v_af12_fmc_sdncas.speed4.pull_up.lock_on);           /// FMC_sdncas
    gpio_one_pin(zap_gpio.G.pin08.v_af12_fmc_sdclk.speed4.pull_up.lock_on);            /// FMC_sdclk
    gpio_one_pin(zap_gpio.H.pin02.v_af12_fmc_sdcke0.speed4.pull_up.lock_on);           /// FMC_sdcke0
    gpio_one_pin(zap_gpio.E.pin01.v_af12_fmc_nbl1.speed4.pull_up.lock_on);             /// FMC_nbl1
    gpio_one_pin(zap_gpio.E.pin00.v_af12_fmc_nbl0.speed4.pull_up.lock_on);             /// FMC_nbl0
    gpio_one_pin(zap_gpio.D.pin10.v_af12_fmc_d15_da15.speed4.pull_down.lock_on  );            /// FMC_d15
    gpio_one_pin(zap_gpio.D.pin09.v_af12_fmc_d14_da14.speed4.pull_down.lock_on);            /// FMC_d14
    gpio_one_pin(zap_gpio.D.pin08.v_af12_fmc_d13_da13.speed4.pull_down.lock_on);            /// FMC_d13
    gpio_one_pin(zap_gpio.E.pin15.v_af12_fmc_d12_da12.speed4.pull_down.lock_on);            /// FMC_d12
    gpio_one_pin(zap_gpio.E.pin14.v_af12_fmc_d11_da11.speed4.pull_down.lock_on);            /// FMC_d11
    gpio_one_pin(zap_gpio.E.pin13.v_af12_fmc_d10_da10.speed4.pull_down.lock_on);            /// FMC_d10
    gpio_one_pin(zap_gpio.E.pin12.v_af12_fmc_d9_da9.speed4.pull_down.lock_on);             /// FMC_d9
    gpio_one_pin(zap_gpio.E.pin11.v_af12_fmc_d8_da8.speed4.pull_down.lock_on);             /// FMC_d8
    gpio_one_pin(zap_gpio.E.pin10.v_af12_fmc_d7_da7.speed4.pull_down.lock_on);             /// FMC_d7
    gpio_one_pin(zap_gpio.E.pin09.v_af12_fmc_d6_da6.speed4.pull_down.lock_on);             /// FMC_d6
    gpio_one_pin(zap_gpio.E.pin08.v_af12_fmc_d5_da5.speed4.pull_down.lock_on);             /// FMC_d5
    gpio_one_pin(zap_gpio.E.pin07.v_af12_fmc_d4_da4.speed4.pull_down.lock_on);             /// FMC_d4
    gpio_one_pin(zap_gpio.D.pin01.v_af12_fmc_d3_da3.speed4.pull_down.lock_on);             /// FMC_d3
    gpio_one_pin(zap_gpio.D.pin00.v_af12_fmc_d2_da2.speed4.pull_down.lock_on);             /// FMC_d2
    gpio_one_pin(zap_gpio.D.pin15.v_af12_fmc_d1_da1.speed4.pull_down.lock_on);         /// FMC_d1
    gpio_one_pin(zap_gpio.D.pin14.v_af12_fmc_d0_da0.speed4.pull_down.lock_on);          /// FMC_d0

    gpio_one_pin(zap_gpio.G.pin05.v_af12_fmc_a15_ba1.speed4.pull_up.lock_on);          /// FMC_ba1
    gpio_one_pin(zap_gpio.G.pin04.v_af12_fmc_a14_ba0.speed4.pull_up.lock_on);          /// FMC_ba0
    gpio_one_pin(zap_gpio.G.pin02.v_af12_fmc_a12.speed4.lock_on);                      /// FMC_a12
    gpio_one_pin(zap_gpio.G.pin01.v_af12_fmc_a11.speed4.lock_on);                      /// FMC_a11
    gpio_one_pin(zap_gpio.G.pin00.v_af12_fmc_a10.speed4.lock_on);                      /// FMC_a10
    gpio_one_pin(zap_gpio.F.pin15.v_af12_fmc_a9.speed4.lock_on);                       /// FMC_a9
    gpio_one_pin(zap_gpio.F.pin14.v_af12_fmc_a8.speed4.lock_on);                       /// FMC_a8
    gpio_one_pin(zap_gpio.F.pin13.v_af12_fmc_a7.speed4.lock_on);                       /// FMC_a7
    gpio_one_pin(zap_gpio.F.pin12.v_af12_fmc_a6.speed4.lock_on);                       /// FMC_a6
    gpio_one_pin(zap_gpio.F.pin05.v_af12_fmc_a5.speed4.lock_on);                       /// FMC_a5
    gpio_one_pin(zap_gpio.F.pin04.v_af12_fmc_a4.speed4.lock_on);                       /// FMC_a4
    gpio_one_pin(zap_gpio.F.pin03.v_af12_fmc_a3.speed4.lock_on);                       /// FMC_a3
    gpio_one_pin(zap_gpio.F.pin02.v_af12_fmc_a2.speed4.lock_on);                       /// FMC_a2
    gpio_one_pin(zap_gpio.F.pin01.v_af12_fmc_a1.speed4.lock_on);                       /// FMC_a1
    gpio_one_pin(zap_gpio.F.pin00.v_af12_fmc_a0.speed4.lock_on);                       /// FMC_a0

    gpio_one_pin(zap_gpio.D.pin05.v_af12_fmc_nwe.speed4.pull_up.lock_on);              /// FMC_nwe
    gpio_one_pin(zap_gpio.D.pin04.v_af12_fmc_noe.speed4.pull_up.lock_on);              /// FMC_noe
    gpio_one_pin(zap_gpio.D.pin07.v_af12_fmc_ne1.speed4.pull_up.lock_on);              /// FMC_NE1
    gpio_one_pin(zap_gpio.E.pin03.v_af12_fmc_a19.speed4.pull_up.lock_on);              /// FMC_a1

    gpio_one_pin(zap_gpio.J.pin07.input.pull_up.lock_on);                               /// LCD_Fmark
    gpio_one_pin(zap_gpio.J.pin08.out.speed4.lock_on);                                 /// LCD_Reset

    /// SPI4
    gpio_one_pin(zap_gpio.E.pin02.v_af05_spi4_sck.speed4.pull_up.lock_on);             /// spi4_sck
    gpio_one_pin(zap_gpio.E.pin04.out.speed4.lock_on);                                 /// spi4_nss
    gpio_one_pin(zap_gpio.E.pin05.v_af05_spi4_miso.speed4.pull_up.lock_on);            /// spi4-mo
    gpio_one_pin(zap_gpio.E.pin06.v_af05_spi4_mosi.speed4.pull_up.lock_on);            /// spi4_mi
    gpio_one_pin(zap_gpio.A.pin00.analog.lock_on);                                      /// adc1-0 - PA0. 43
    gpio_one_pin(zap_gpio.A.pin03.analog.lock_on);                                      /// adc2-2 - PA3. 50
    gpio_one_pin(zap_gpio.C.pin03.analog.lock_on);                                      /// adc3-13 - PC3. 38



    gpio_one_pin(zap_gpio.C.pin13.out.speed4.lock_on);                                 /// светик
    gpio_one_pin(zap_gpio.A.pin08.v_af00_rcc_mco_1.speed4.lock_on);                         /// 40mg  out pin

    /// TIM3
    gpio_one_pin(zap_gpio.C.pin06.v_af02_tim3_ch1.speed4.lock_on);/// TIM3_CH1
    gpio_one_pin(zap_gpio.C.pin07.v_af02_tim3_ch2.speed4.lock_on);/// TIM3_CH2
    gpio_one_pin(zap_gpio.B.pin00.v_af02_tim3_ch3.speed4.lock_on);/// TIM3_CH3
    gpio_one_pin(zap_gpio.B.pin01.v_af02_tim3_ch4.speed4.lock_of);/// TIM3_CH4

    /// sk6812.h
    gpio_one_pin(zap_gpio.A.pin08.v_af01_tim1_ch1.speed4.lock_on);/// sk6812
Если есть заинтересованные - могу опубликовать код. Нужно выполнить копи/пасте "gpio_one_pin(zap_gpio" , а дальше автоподстановка подскажет нужный вам вариант, без ошибок. И да, все AF функции привязанные к ногам там уже есть.
Но показывать сразу не буду. Во первых он здесь не поместится, а во вторых некоторым товарищам может стать плохо (во всех смыслах).
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]Касательно же F7, сообщаю вам, что GPIO там такое же, как и на F0. Можно было и не раздуваться до F7, но ведь хотелось максимального эффекта, правда?[/uquote]
Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум :)
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

AVI-crak, а если сформировать массив из тех же данных и натравить на него одну функцию? Можно функцию умней сделать. Как минимум, по портам сгруппировать.
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Сб янв 09, 2016 15:51:17

Сообщение AVI-crak »

VladislavS Можно, но не нужно. Это лишь добавит хаоса в коде, если у нас ноги разной по функциям периферии будут разбросаны по странице - разобраться будет намного сложнее.
Контактная информация:
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3905152#p3905152"]Но дело то не во мне, а в ваших портянках плавно перетекающих в шифровки и обратно.[/uquote]
Что не так с возможностью выбирать уровень детализации в любом месте? Кроме капризов у вас есть претензии пообстоятельнее?
Я уже молчу про то что в них никакого контроля на ошибки даже близко нет.
В операции присвоения нет никакого контроля ошибок? Проклятье, куда катится этот мир!
Думаете хамство добавляет вам аргументации в споре?
А дебильные выпады? Они добавляют? Вопросы тупые, ответы на которые звучали ранее?

Детский лепет.

[uquote="Reflector",url="/forum/viewtopic.php?p=3905155#p3905155"]Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум :)[/uquote]
Подход прекрасно масштабируется на любые семейства и любые количества ног. Вы что сказать-то хотели?
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Знаете, я тоже начинал с макросов. И даже припоминаю, что как-то давно противопоставлял их вашим портянкам. Но так и не смог понять макросы. Пришлось уйти в метапрограммирование. А вы так на портянках и остались.
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

"Не смог понять макросы" -- это, конечно, печально. Чем вы решили заняться дальше, уже и не важно в таком случае.

[uquote="AVI-crak",url="/forum/viewtopic.php?p=3905154#p3905154"]Могу показать свой вариант для STM32F746BG.[/uquote]
Во что компилируется сей плотный текст?
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Если говорить о размере кода мне не интересно это. Ну разве что если цель вписаться в 32кб кейла. Хотя есть тут индивидумы которые за байт лишний удавятся.
Инженер R@D

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

Сообщение a5021 »

Если ни размер, ни качество не важны, то HAL + Cube = наше все.
Собутыльник Кота
Аватара пользователя
Сообщения: 2567
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="a5021",url="/forum/viewtopic.php?p=3905203#p3905203"]Во что компилируется сей плотный текст?[/uquote]
Как человек неумеющий программировать и непонимающий макросы рискну предположить, что gpio_one_pin это таки функция и код скомпилируется в загрузку константы в регистр и вызов функции повторённое количиство пинов раз.
Ответить

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