-
- CH32V0xx не обольщайтесь. Самая большая проблема - не могут
манипулировать битами регистров или памяти без R-M-V и выделения
свободного регистра для временного значения. Атомарное изменение
бита - только через блокировку прерываний. Ну и относительно долгий
вход в прерывание. Не все задачи удастся решить, как на AVR. Nikolay_Po(211 знак., 08.04.2026 11:04)
- Ну а когда нужно то атомарное изменение бита? Чтобы никто чужой,
ни-ни? В какой-нить реальной многозадаче с семафорами и прочими
хераборами. А в реальной жизни, разве что доступ к портам. А порты
у СТМ и СН такие, что АВР сосёт в присядку. - mse homjak(08.04.2026 11:29)
- Это только если Хмеги за AVRы не считать. У них порты какие надо
порты. - AlexG(08.04.2026 12:51)
- С Хмегами, вообще, смешно. Хмегой должэн был быть микрочиповский
ДСПИК, а АВРы нужно было переводить на 3В и назвать как-нить
АтГига. Т.е. имеем обычные АтМега 5В 16-20МГц, АтГига 3В 32-40МГц,
Хмега 3В 16р 40-100МГц ДСП и САМы. Люто! Но, вместо этого, какое-то
унылое говно, типа АВР-32 и невнятные Хмеги. Вот нащщот портов
Хмег, не в курсе. Там можно, как у СТМов, одной командой
установить-сбросить все биты в порте? - mse homjak(08.04.2026 13:01)
- установить/сбросить все биты в порте одной командой можно у любого
АВР :) - Adept(08.04.2026 14:11)
- Одновременно и установить, и сбросить. - mse homjak(08.04.2026 18:53)
- чем, к примеру, претит команда out PORTx,R ?? - Adept(09.04.2026 17:00)
- Я неправильно выразился не "всех", а "любых". mse homjak(102 знак., 09.04.2026 17:37)
- а какая разница, всех или любых? вводишь нужную маску в порт и всё,
или в СТМ можно одной командой на разных портах битики менять? - Adept(09.04.2026 17:39)
- Принципиальная. В примере, одна команда сбрасывает одни биты и
устанавливает другие. Непричастные сохраняют состояние. АВР сперва
должэн вычитать порт, наложить маску для сброса, наложить маску для
установки и записать взад. - mse homjak(09.04.2026 17:44)
- у Хмег можно так: PORTF.OUTSET = pIN_CS0; есть еще регистры OUTCLR и OUTTGL. Произвольно одной командой часть установить, часть сбросить, остальные не трогать нельзя - AlexG(10.04.2026 18:18)
- "сбрасывает одни биты и устанавливает другие" делается одной
командой "out", ели нужно обращение к конкретным битам, то это
команды sbi/cbi, а та, чтобы выборочно, менять биты в порту зараз,
ну наверне только иксмега, но вот честно не очень понятно зачем. - Adept(09.04.2026 17:57)
- Да. Угу... Сбросьте одной командой "out" бит 0, установите бит 6, а
остальные пусть сохранят состояние. Побитно менять можно, но тогда
СТМ/РИСК5, дажэ сохраняя контент, обойдут АВР. - mse homjak(09.04.2026 18:11)
- в вашем конкретном примере это две команды :) cbi, sbi (проще не
бывает, и я не вижу причин делать по-другому в данном конкретном случае :)) в более
высосанных из пальцадругих случаях да, будет четыре команды, т.е. такта: - считать порт, очистить по маске, установить по маске, выкинуть в порт. ну и вопросы оптимизации схемотехники (т.е. выбора нужных пинов на нужных портах, чтобы менять их одной командой, если это так уж необходимо - не забываем Adept(3 знак., 09.04.2026 19:33)- Ну вот, две команды. За это время СТМ/РИСК5 сделает, либо 8, либо 5
своих, на 48МГц. Т.е даже самый дохлый вариант, по скорости, то на
то и выходит. А что касаемо схемотехники и высосанных пальцов, я на
М48, на 20МГц, поуродовался в своё время. Подбирал тайминги нопами,
т.к. в прерывания уже не успевал. А тут, подготовил массив в
памяти, дёрнул рубильник и оно улетело на утроенной скорости - mse homjak(09.04.2026 20:35)
- дык под задачу камень выбираем или задачу под камень, - кому как
нравится :) мне, к примеру, им в страшном сне не приснится делать,
скажем обработку видео или какие DSP-финты на АВР :) он для других,
более простых дел, хотя извратиться можно конечно, если есть
желание, да и то не всегда получится :)) В общем ключевой вопрос -
ЗАЧЕМ? По задаче и инстрУмент выбираем. Никто же не рисует, к
примеру, лопатой, а бензопилой не точат карандаши :)) - Adept(09.04.2026 20:47)
- Вотъ. А я делал. На м48. ДСП, конечно, такое себе, но тем не менее.
Ибо в те времена она была самым производительным и маложручим
вариантом изо всех доступных. Атмел завёл серию в тупик. Раньше это
был самый быстрый 8-битник, который по арифметике крыл и те
100МГцовые "51". И стоил боле-мене. А щас ch32v305fbp6, 144МГц
20-ношка, с плывучкой, стоит 120-200руб на Ефинде, в розницу. Ну и
чего выбирать "камень под задачу"? Зачем плодить номенклатуру? - mse homjak(09.04.2026 21:08)
- И скоро ждем stm32c5xx - Cortex-M33 в 20 пинах 144МГц (8K iCache) 256K Flash 64K RAM и за 68 центов (хи-хи) - Zikon(10.04.2026 07:15)
- Эта "ch32v305fbp6, 144МГц 20-ношка, с плывучкой " совершенно не
умеет в 5 вольт. А бывают и такие задачи (в чём предыдущий оратор
совершенно прав). Мир не крутится только вокруг DSP, RTOS и пр. - vpv.vpv(10.04.2026 07:13)
- Они умеют в 5В. Часть ног у них 5В-толерант. - mse homjak(10.04.2026 10:42, +1)
- Толерант означает всего лишь внутренний стабилитрон по входу,
вместо прямого диода на Vcc. Никакой толерант, при питании Vcc =
3,3В, не даст на выход 5В. - vpv.vpv(10.04.2026 13:34)
- 3,3В на выходе, для работы 5В логики, достаточно. Что ТТЛ, что КМОП. Есличо, у меня 5В М128 чудесно работают в паре с 3В Цыклонами и АСЕКСами. Лет 20+ ужэ. просто резисторов для ограничения токов с 5 в 3 хватает. А из 3 в 5 вообще, без проблем. - mse homjak(10.04.2026 17:05)
- Open-drain вполне может. - reZident(10.04.2026 14:00, +1)
- там "в единицу" затянутые фронты, разве не? (важно на всяких SPI и прочем скоростном, где как раз это и надо, к примеру для прикручивания 3V флеши к 5V МК, чаще всего приходится юзать конвертеры уровня, если хочется полной скорости :( - Adept(10.04.2026 15:03)
- Да и то - только если явно разрешено тянуть выше питания. - Toчкa oпopы(10.04.2026 15:00)
- Толерант означает всего лишь внутренний стабилитрон по входу,
вместо прямого диода на Vcc. Никакой толерант, при питании Vcc =
3,3В, не даст на выход 5В. - vpv.vpv(10.04.2026 13:34)
- Они умеют в 5В. Часть ног у них 5В-толерант. - mse homjak(10.04.2026 10:42, +1)
- Сейчас много азиатских Cortex-M4/M4F - недорогие совсем, и даже в
20 ногах, тот же N32G430F8S7 -128МГц и с FPU и с DSP от 30руб на
ефинд, или попроще без FPU AT32F421F8P7 -120МГц - от 32руб и разных
корпусов больше - qfn20,tssop20,qfn28,qfn32,lqfp32 и пр. - Zikon(10.04.2026 06:55)
- Есть ещё N32G401 - 72МГц ( младший брат N32G430 / нет CAN ) так тот
совсем от 19руб цена ( qfn32(4x4) ) - Zikon(10.04.2026 07:00)
- Кстати, а в чём их программируют и прошивают? - Звepoящep(20.04.2026 08:29)
- N32 - Keil, IAR, делаю шаблоны для VSCode+EIDE. Программатор
J-Link, CMSIS-DAP(WCH-LinkE, SLogic Combo, DAP-Link любой) , pyocd.
Для некоторых серий N32 совсем недавно вышел N32Cube - генерирует
код для Keil и IAR с использованием их библиотеки. - Zikon(20.04.2026 10:46)
- Как правило китайцы раздают на гитхабе паки для Keil и Iar под свои
контроллеры. Для всех, которые держал в руках, такое было. Вот N32
не доводилось, видимо свежий совсем. - Гyдвин(20.04.2026 11:08)
- просто сейчас на ОЗОН за недорого и на АЛИ тоже - вот и разбираюсь - что за "звери". Периферия подобна STM32, на BluePill встают без проблем за место F103. - Zikon(20.04.2026 11:39)
- Да не такой и новый первые были (2020г) N32G45x серия и даже ещё без AF у GPIO как у STM32F103. Далее N32G435(G432; L40x; L43x) очень неплохая группа чипов с совершенно одинаковой периферией и уже есть AF на GPIO и потребление очень даже неплохое, есть минусы, но куда без них. И далее уже N32G430 где сделали всё-таки FastIO, и потребление конечно выше и корпуса есть 20 выводов. А N32G401 - это больше похоже на отбраковку N32G430 - полное совпадение Zikon(36 знак., 20.04.2026 11:37)
- Как правило китайцы раздают на гитхабе паки для Keil и Iar под свои
контроллеры. Для всех, которые держал в руках, такое было. Вот N32
не доводилось, видимо свежий совсем. - Гyдвин(20.04.2026 11:08)
- N32 - Keil, IAR, делаю шаблоны для VSCode+EIDE. Программатор
J-Link, CMSIS-DAP(WCH-LinkE, SLogic Combo, DAP-Link любой) , pyocd.
Для некоторых серий N32 совсем недавно вышел N32Cube - генерирует
код для Keil и IAR с использованием их библиотеки. - Zikon(20.04.2026 10:46)
- Кстати, а в чём их программируют и прошивают? - Звepoящep(20.04.2026 08:29)
- Есть ещё N32G401 - 72МГц ( младший брат N32G430 / нет CAN ) так тот
совсем от 19руб цена ( qfn32(4x4) ) - Zikon(10.04.2026 07:00)
- а вот интересно, технологически можно АВР сделать мегагерц на
двести (ну такая 8-битная числодробилка :)) Архитектура же не в
пример проще тех же АРМов. Правда вот не могу придумать для какой
задачи... АЛУ для DSP слабоват (как и разрядность), памяти мало...
Но если бы это можно было сделать дёшево, то, думаю камень типа
хотя бы меги328 нашёл бы свою нишу (про иксмегу даж и не думаю,,
хотя она сюда вписалась бы кстати, Внутренней "рамы" бы ещё
докинули до 64К хотя б) - Adept(10.04.2026 00:30)
- Всё можно. Делаем флэшь с 64-128р шиной и фперде. Тока переходы будут тормозные. Или кэшь. Или, как у CH32V, где часть флэши отображается на ОЗУ: "zero wait flash". Тока зачем? - mse homjak(10.04.2026 10:38)
- Задача - замена мелких CPLD/FPGA? :-)) Но тогда придётся мутить
кэш-ОЗУ, либо вводить такты ожидания 10-8-8-8... для FLASH. Ибо
команды не смогут выбираться с такой скоростью. - vpv.vpv(10.04.2026 07:17)
- Заменять мелкие ФПГА проще, размещая мелкую ФПГА в МК. Вроде,
Микрочип туда пошёл. - mse homjak(10.04.2026 10:39)
- Дык была такая серия, кажется AT94 у Atmel'а. AVR (AtMega161) + ОЗУ
+ мелкая FPGA на одном кристалле. - vpv.vpv(10.04.2026 13:41)
- Ну да FPSLIC. Но там всё каг-то печально было. Я толком ИДЕшку завести не смог. Да и Атмел на это забил. - mse homjak(10.04.2026 17:08)
- Дык была такая серия, кажется AT94 у Atmel'а. AVR (AtMega161) + ОЗУ
+ мелкая FPGA на одном кристалле. - vpv.vpv(10.04.2026 13:41)
- Заменять мелкие ФПГА проще, размещая мелкую ФПГА в МК. Вроде,
Микрочип туда пошёл. - mse homjak(10.04.2026 10:39)
- Вотъ. А я делал. На м48. ДСП, конечно, такое себе, но тем не менее.
Ибо в те времена она была самым производительным и маложручим
вариантом изо всех доступных. Атмел завёл серию в тупик. Раньше это
был самый быстрый 8-битник, который по арифметике крыл и те
100МГцовые "51". И стоил боле-мене. А щас ch32v305fbp6, 144МГц
20-ношка, с плывучкой, стоит 120-200руб на Ефинде, в розницу. Ну и
чего выбирать "камень под задачу"? Зачем плодить номенклатуру? - mse homjak(09.04.2026 21:08)
- дык под задачу камень выбираем или задачу под камень, - кому как
нравится :) мне, к примеру, им в страшном сне не приснится делать,
скажем обработку видео или какие DSP-финты на АВР :) он для других,
более простых дел, хотя извратиться можно конечно, если есть
желание, да и то не всегда получится :)) В общем ключевой вопрос -
ЗАЧЕМ? По задаче и инстрУмент выбираем. Никто же не рисует, к
примеру, лопатой, а бензопилой не точат карандаши :)) - Adept(09.04.2026 20:47)
- Ну вот, две команды. За это время СТМ/РИСК5 сделает, либо 8, либо 5
своих, на 48МГц. Т.е даже самый дохлый вариант, по скорости, то на
то и выходит. А что касаемо схемотехники и высосанных пальцов, я на
М48, на 20МГц, поуродовался в своё время. Подбирал тайминги нопами,
т.к. в прерывания уже не успевал. А тут, подготовил массив в
памяти, дёрнул рубильник и оно улетело на утроенной скорости - mse homjak(09.04.2026 20:35)
- в вашем конкретном примере это две команды :) cbi, sbi (проще не
бывает, и я не вижу причин делать по-другому в данном конкретном случае :)) в более
- Да. Угу... Сбросьте одной командой "out" бит 0, установите бит 6, а
остальные пусть сохранят состояние. Побитно менять можно, но тогда
СТМ/РИСК5, дажэ сохраняя контент, обойдут АВР. - mse homjak(09.04.2026 18:11)
- Ну не совсем одна команда. НЯП, нужно сначала загрузить маску в
регистр, потом записать в регистр по адресу. Проблема в том, что
вместе, адрес регистра и маска - слишком велики, чтобы поместиться
в одну команду. Поэтому, несмотря на красоту одновременного
снятия/установки, команд несколько. Nikolay_Po(365 знак., 09.04.2026 17:55)
- Да, несколько. Но если устанавливать-сбрасывать несколько бит, то ужэ выигрышь за счот тактовой. - mse homjak(09.04.2026 18:14)
- Вот это вот "ввести маску", на RISC-V требует использования
регистра. Только лишь командами - нельзя. Nikolay_Po(134 знак., 09.04.2026 17:41)
- Но в РИСК-5 можно делать хитрые финты ушами. mse homjak(931 знак., 09.04.2026 18:07)
- Красиво! Но завести канал DMA, чтобы по прерыванию компаратора тока
ключей, быстро задисейблить драйвер - это будет слишком :) - Nikolay_Po(09.04.2026 19:51)
- Почему? Компаратор, походу, тока внешний. На какую-нить ножку
захвата таймера надрочить ДМА и пусть ждёт. Хорошая идея, кстате!
На какой-нить 144МГц машинке, на всё-про всё, в 20-30-40нс
уместиться можно. - mse homjak(09.04.2026 20:45)
- Не, если компаратор внешний, то я его выход сразу на драйвер и
заведу... - Nikolay_Po(09.04.2026 22:51)
- Но лучше выход компаратора завести на вход "R" триггера управления драйвером. ;-) - vpv.vpv(10.04.2026 07:26, +1)
- Дык, компаратор должэн коммутироваться на порт, вроде как. - mse homjak(09.04.2026 23:37)
- Для одних задач - напрямую на порт (внешний гистерезис). Для других - на сброс триггера порта. - vpv.vpv(13.04.2026 09:25)
- Не, если компаратор внешний, то я его выход сразу на драйвер и
заведу... - Nikolay_Po(09.04.2026 22:51)
- Почему? Компаратор, походу, тока внешний. На какую-нить ножку
захвата таймера надрочить ДМА и пусть ждёт. Хорошая идея, кстате!
На какой-нить 144МГц машинке, на всё-про всё, в 20-30-40нс
уместиться можно. - mse homjak(09.04.2026 20:45)
- Красиво! Но завести канал DMA, чтобы по прерыванию компаратора тока
ключей, быстро задисейблить драйвер - это будет слишком :) - Nikolay_Po(09.04.2026 19:51)
- Но в РИСК-5 можно делать хитрые финты ушами. mse homjak(931 знак., 09.04.2026 18:07)
- Принципиальная. В примере, одна команда сбрасывает одни биты и
устанавливает другие. Непричастные сохраняют состояние. АВР сперва
должэн вычитать порт, наложить маску для сброса, наложить маску для
установки и записать взад. - mse homjak(09.04.2026 17:44)
- а какая разница, всех или любых? вводишь нужную маску в порт и всё,
или в СТМ можно одной командой на разных портах битики менять? - Adept(09.04.2026 17:39)
- Я неправильно выразился не "всех", а "любых". mse homjak(102 знак., 09.04.2026 17:37)
- чем, к примеру, претит команда out PORTx,R ?? - Adept(09.04.2026 17:00)
- Одновременно и установить, и сбросить. - mse homjak(08.04.2026 18:53)
- установить/сбросить все биты в порте одной командой можно у любого
АВР :) - Adept(08.04.2026 14:11)
- С Хмегами, вообще, смешно. Хмегой должэн был быть микрочиповский
ДСПИК, а АВРы нужно было переводить на 3В и назвать как-нить
АтГига. Т.е. имеем обычные АтМега 5В 16-20МГц, АтГига 3В 32-40МГц,
Хмега 3В 16р 40-100МГц ДСП и САМы. Люто! Но, вместо этого, какое-то
унылое говно, типа АВР-32 и невнятные Хмеги. Вот нащщот портов
Хмег, не в курсе. Там можно, как у СТМов, одной командой
установить-сбросить все биты в порте? - mse homjak(08.04.2026 13:01)
- Это только если Хмеги за AVRы не считать. У них порты какие надо
порты. - AlexG(08.04.2026 12:51)
- Ну а когда нужно то атомарное изменение бита? Чтобы никто чужой,
ни-ни? В какой-нить реальной многозадаче с семафорами и прочими
хераборами. А в реальной жизни, разве что доступ к портам. А порты
у СТМ и СН такие, что АВР сосёт в присядку. - mse homjak(08.04.2026 11:29)
- А тольку-то от этих 44МГц в CH32V0**? Сколько процессорных тактов
уходит на влёт в прерывание? Этовсё равно, что вспомнить про i8051
- эх, уже в то время там была частота аж 12МГц! :)) - vpv.vpv(07.04.2026 06:59)
- Ну, дык, и АВР в прерывание не бесплатно влетает. 3-4 такта вынь да положь. А там ещо контекст сохранить, то-сё. Я тожэ, было дело, за колхоз агитировал. Но Атмел АВРы забросил, а Микрочип, таки, сделал АВР мечты, ДСПИК. Пока Атымел уродовался с АВР32, при живом-то АРМ. - mse homjak(07.04.2026 11:47)
- влёт в прерывание 13-20 тактов на CH32V003, на Cortex-M - 12 тактов, и не надо говорить про 12МГц i8051 там один машинный цикл был 12 тактов, это сейчас современные x51 однотактовые и на 35МГц (STC) шустрые - Zikon(07.04.2026 07:11)
- Слышал в интернете, что у STM32 при остановке тактирования портов
pull'ы превращаются в тыкву. Как "спать по настоящему"? Внешними
подтяжками обвешивать? - Toчкa oпopы(06.04.2026 14:21)
- Для более новых stm32g0xx ; stm32c0xx есть настройка PD/PU на
каждый порт в модуле PWR для Standby и Shutdown режимов. В более
старых stm32f0xx - нет такого и в документации написано что - "In
Standby mode, all I/O pins are high impedance except: RST,
PC13-15(if use RTC or LSE, WKUPx" - смотрим внимательно LP режимы -
всё описано в документации - Zikon(07.04.2026 07:04, +1)
- Спасибо. - Nikolay_Po(07.04.2026 07:46)
- Это откуда информация? Я больше поверю, что кто-то пользовался
кубом для "остановки тактирования", а оно, заодно, проходит по всем
GPIO меняет настройки "для лучшего энергосбережения". Не слышал
никогда... Не то, что не слышал, механизма такого (кроме неумелого
использования куба) представить себе не могу - как остановка
тактирования снимает статический логический уровень? - Nikolay_Po(06.04.2026 20:02)
- От Хабарки, наверное. Соврали? P.S. А может - это вообще про 103 было? - Toчкa oпopы(06.04.2026 22:16)
- Ну это так себе довод, я на подтяжки почти никогда не рассчитываю,
так как в момент появления питания на несколько мс такой сигнал
остается без подтяжки вовсе. Но иногда использую, к примеру чтобы
опросить стартовую конфигурационную перемычку - в этот момент проц
точно в режиме, ну и перемычке ничего не будет если пропадет пулап. - Ralex(06.04.2026 14:23)
- Пропадает не только pull, но и настройка выходов купно с их
уровнями. Хотя, конечно, переключение на LSE должно попускать... - Toчкa oпopы(06.04.2026 17:00)
- Есть упоминание в документации? Интересно было бы глянуть. - Nikolay_Po(06.04.2026 20:03)
- И прескалер. - mse homjak(06.04.2026 18:52)
- Пропадает не только pull, но и настройка выходов купно с их
уровнями. Хотя, конечно, переключение на LSE должно попускать... - Toчкa oпopы(06.04.2026 17:00)
- Для более новых stm32g0xx ; stm32c0xx есть настройка PD/PU на
каждый порт в модуле PWR для Standby и Shutdown режимов. В более
старых stm32f0xx - нет такого и в документации написано что - "In
Standby mode, all I/O pins are high impedance except: RST,
PC13-15(if use RTC or LSE, WKUPx" - смотрим внимательно LP режимы -
всё описано в документации - Zikon(07.04.2026 07:04, +1)
- ну это спец серии STM32 только, а там и производительность сразу не так высока, да всё ещё выше атмег, но уже далеко не полновесные серии. И кстати стоимость этих мелкожручих СТМ32 тоже не маленькая. - Ralex(06.04.2026 14:00)
- CH32V0xx не обольщайтесь. Самая большая проблема - не могут
манипулировать битами регистров или памяти без R-M-V и выделения
свободного регистра для временного значения. Атомарное изменение
бита - только через блокировку прерываний. Ну и относительно долгий
вход в прерывание. Не все задачи удастся решить, как на AVR. Nikolay_Po(211 знак., 08.04.2026 11:04)