Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
STM32 новичку в ARM что к чему
Да нахрен вообще думать, калокуб юзай и все. Там все само генериться. 
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Ну, в отличии от ваших двух сегодняшних ляпов, порты оно, хотелось бы надеяться, без ошибок конфигурит.
Ты просто так ничего и не понял как юзается квалификатор
C++ кодерам это не понять.
C++ кодерам это не понять.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3904901#p3904901"]Боюсь даже представить размер "портянки" для какого-нибудь 240-ногого F7.[/uquote]
Бояться вам надо другого -- вы с десятого раза не въезжаете в суть простейших макросов. Портянка имеет максимальный размер в случае, когда от представления требуется максимальная подробность и самодокументируемость. Если этого не требуется, портянка может быть сокращена произвольным образом вплоть до какого-нибудь:Что означает "заинитить все пины порта А в режим OUTPUT/PUSH-PULL/2MHZ". Причем, здесь видно, что одна шестнадцатиричная цифра описывает конфигурацию одного пина. Всего этих цифр 16. При определенной сноровке, можно произвольно менять конфигурацию пинов порта, редактируя данную строку. А захочется иначе, можно добавлять "портянку" по вкусу:
Тут большинство пинов осталось, как и в предыдущем примере, но "прорезались" пины SPI1.
Как думаете, все ли тут "учтено" ?
Бояться вам надо другого -- вы с десятого раза не въезжаете в суть простейших макросов. Портянка имеет максимальный размер в случае, когда от представления требуется максимальная подробность и самодокументируемость. Если этого не требуется, портянка может быть сокращена произвольным образом вплоть до какого-нибудь:
Код: Выделить всё
*(volatile uint64_t *) GPIOA = 0x2222222222222222;Код: Выделить всё
*(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) */
);Число ног и число портов величины связанные. Не пытайтесь нагнать жути и выдать это за мультипликативные факторы. Касательно же F7, сообщаю вам, что GPIO там такое же, как и на F0. Можно было и не раздуваться до F7, но ведь хотелось максимального эффекта, правда?При том что у него и портов 11, и регистров конфигурации одного порта 7.
А почему помножить, а не возвести в 16-ую степень? Ну бредить, так от душе же!Да помножить это на 16 пинов.
Как приятно, что вы столь снисходительны. Только я уже упоминал недавно эти AF, а вы просто позабыли.На 16 AF просто забьём
Всенепременно. Вот PA0 в OUTUPT/PUSH-PULL/10MHZ, а остальные в аналоговом режиме:Кстати, не для всех режимов нужно все регистры порта конфигурировать. Это как-то учтем в портянке?
Код: Выделить всё
*(volatile uint64_t *) GPIOA = 1;- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]Всенепременно. Вот PA0 в OUTUPT/PUSH-PULL/10MHZ, а остальные в аналоговом режиме:
[/uquote]Вы дальше STM32F103 хоть раз ходили?
Код: Выделить всё
*(volatile uint64_t *) GPIOA = 1;- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
Опять бухаете?
Печально еще, что вы не читаете того, что вам пишут. Процитирую себя еще раз:
[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]
Вот там по ссылке моя инициализации, которая дает исчерпывающий ответ на вопрос "Вы дальше STM32F103 хоть раз ходили?". Вы этого просто не смгли разобрать, но зачем-то здесь продолжаете раздуваться. Выглядит глуповато.
Печально еще, что вы не читаете того, что вам пишут. Процитирую себя еще раз:
[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]
Как приятно, что вы столь снисходительны. Только я уже упоминал недавно эти AF, а вы просто позабыли.[/uquote]На 16 AF просто забьём
Вот там по ссылке моя инициализации, которая дает исчерпывающий ответ на вопрос "Вы дальше STM32F103 хоть раз ходили?". Вы этого просто не смгли разобрать, но зачем-то здесь продолжаете раздуваться. Выглядит глуповато.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[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
[uquote="Reflector",url="/forum/viewtopic.php?p=3904920#p3904920"]Так ведь никто кроме тебя не рискнул привести пример инициализации для LTDC...[/uquote]
Могу показать свой вариант для STM32F746BG.
Если есть заинтересованные - могу опубликовать код. Нужно выполнить копи/пасте "gpio_one_pin(zap_gpio" , а дальше автоподстановка подскажет нужный вам вариант, без ошибок. И да, все AF функции привязанные к ногам там уже есть.
Но показывать сразу не буду. Во первых он здесь не поместится, а во вторых некоторым товарищам может стать плохо (во всех смыслах).
Могу показать свой вариант для 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Но показывать сразу не буду. Во первых он здесь не поместится, а во вторых некоторым товарищам может стать плохо (во всех смыслах).
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="a5021",url="/forum/viewtopic.php?p=3905126#p3905126"]Касательно же F7, сообщаю вам, что GPIO там такое же, как и на F0. Можно было и не раздуваться до F7, но ведь хотелось максимального эффекта, правда?[/uquote]
Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум
Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
AVI-crak, а если сформировать массив из тех же данных и натравить на него одну функцию? Можно функцию умней сделать. Как минимум, по портам сгруппировать.
- Сообщения: 202
- Зарегистрирован: Сб янв 09, 2016 15:51:17
VladislavS Можно, но не нужно. Это лишь добавит хаоса в коде, если у нас ноги разной по функциям периферии будут разбросаны по странице - разобраться будет намного сложнее.
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
[uquote="VladislavS",url="/forum/viewtopic.php?p=3905152#p3905152"]Но дело то не во мне, а в ваших портянках плавно перетекающих в шифровки и обратно.[/uquote]
Что не так с возможностью выбирать уровень детализации в любом месте? Кроме капризов у вас есть претензии пообстоятельнее?
Детский лепет.
[uquote="Reflector",url="/forum/viewtopic.php?p=3905155#p3905155"]Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум
[/uquote]
Подход прекрасно масштабируется на любые семейства и любые количества ног. Вы что сказать-то хотели?
Что не так с возможностью выбирать уровень детализации в любом месте? Кроме капризов у вас есть претензии пообстоятельнее?
В операции присвоения нет никакого контроля ошибок? Проклятье, куда катится этот мир!Я уже молчу про то что в них никакого контроля на ошибки даже близко нет.
А дебильные выпады? Они добавляют? Вопросы тупые, ответы на которые звучали ранее?Думаете хамство добавляет вам аргументации в споре?
Детский лепет.
[uquote="Reflector",url="/forum/viewtopic.php?p=3905155#p3905155"]Согласен, от 240 ногих F0 эффект был бы минимальным, ведь у них 100 ног максимум
Подход прекрасно масштабируется на любые семейства и любые количества ног. Вы что сказать-то хотели?
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Знаете, я тоже начинал с макросов. И даже припоминаю, что как-то давно противопоставлял их вашим портянкам. Но так и не смог понять макросы. Пришлось уйти в метапрограммирование. А вы так на портянках и остались.
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
"Не смог понять макросы" -- это, конечно, печально. Чем вы решили заняться дальше, уже и не важно в таком случае.
[uquote="AVI-crak",url="/forum/viewtopic.php?p=3905154#p3905154"]Могу показать свой вариант для STM32F746BG.[/uquote]
Во что компилируется сей плотный текст?
[uquote="AVI-crak",url="/forum/viewtopic.php?p=3905154#p3905154"]Могу показать свой вариант для STM32F746BG.[/uquote]
Во что компилируется сей плотный текст?
Если говорить о размере кода мне не интересно это. Ну разве что если цель вписаться в 32кб кейла. Хотя есть тут индивидумы которые за байт лишний удавятся.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Сообщения: 6452
- Зарегистрирован: Пт сен 13, 2013 13:11:31
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="a5021",url="/forum/viewtopic.php?p=3905203#p3905203"]Во что компилируется сей плотный текст?[/uquote]
Как человек неумеющий программировать и непонимающий макросы рискну предположить, что gpio_one_pin это таки функция и код скомпилируется в загрузку константы в регистр и вызов функции повторённое количиство пинов раз.
Как человек неумеющий программировать и непонимающий макросы рискну предположить, что gpio_one_pin это таки функция и код скомпилируется в загрузку константы в регистр и вызов функции повторённое количиство пинов раз.


