Вы видите копию треда, сохраненную 24 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Нужно максимальное количество АЦП для обработки звука.
Какую среду разработки лучше использовать?
Тут есть ARM-тред, в котором ты вполне мог бы задать свой вопрос. Хотя действительно есть некоторый смысл в раздельных тредах.
>Или может вообще, что то другое.
Именно. Ты бы посмотрел какие АЦП используют для звука. У тебя в компьютере сколько разрядов в АЦП для звука? А сколько в STM32?
>Какую среду разработки лучше использовать?
Это не не оказывает существенного влияния на процесс вкатывания. Но если спрашиваешь, то это будет в самый раз: https://www.instructables.com/id/Quick-Start-to-STM-Nucleo-on-Arduino-IDE/
>А сколько в STM32?
Написано что 12 разрядов. Для моих задач, запись голоса с низким качеством, вполне должно подойти
Нет. С тчк зрения программиста.
Ждал этот тред больше 3 лет. Мимо начинал свой путь освоения контроллеров с AVR в AtmelStudio и теперь сижу на STM32 с STM32CubeMX как на герыче сука. Если совсем с нуля хочешь вкатиться, возьми на али пару простых отладочных плат и программатор:
https://ru.aliexpress.com/item/1PCS-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming-With-Cover/32792513237.html
https://ru.aliexpress.com/item/48-STM32F030F4P6-s-CORTEX-M0-Core-32bit/32881417785.html
https://ru.aliexpress.com/item/Free-Shipping-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32525208361.html
Эти платы пригодятся всегда, когда надо будет собрать что-то относительно простое и оставить работать на неопределенный срок, чтоб не дергать основную плату.
STM32F030F4P6 - самое ходове дерьмо для проверки датчиков, дисплеев и создания всяких тестовых простых девайсов, кароче аналог ардуины, только быстрее и лучше.
STM32F103C8T6 - второе ходовое дерьмо из-за своей дешивизны и предоставляемых возможностей, достаточно памяти, интерфейсов и всего остального, чтоб сделать йобу с кучей датчиков, цветным дисплеем и всякими передающими модулями или прицепить к пеке по USB.
У меня еще валяются такие же платы с STM32F103RET6 и STM32F103RFT6, когда нужно совсем много памяти для графики или больших массивов данных, да и в целом 103я серия очень нравится. Также есть STM32F429I-DISCO - это былая моя первая отладочная плата STM32, с которой я начал свое изучение и пилил тогда фо фан систему использующую DSP для распознавания цветов и простых форм с Omnivision камеры + наложение информации на кадры и трансляция через ESP8266 модуль по WiFi, чтоб через обычный браузер смотреть - было очень интересно.
Насчет Nucleo, так себе варчик, особенно если больше 1 покупаешь - неоправданная переплата за програматор на плате и кучу перефирии - она будет только мешать (не будешь же ты выпаивать каждый раз какую-то лабуду с нее, когда нужны будут ножки на которой она висит). Лучше взять у китайцев с голой разводкой (если имеются нужные тебе варианты) и навешивать все свое, единственную Nucleo которую я б купил это с контроллером STM32F334R8 из-за наличия в нем таймера разрешением 217 пикосекунд и отсутствия самого контроллера на али.
По звуку ничего определенного не могу посоветовать, но как писали выше - бери плату с DSP. А по среде разработки советую связку STM32CubeMX + Keil + STMStudio. Сгенерил проект в кубе и пишешь себе код в лучшей IDE для ARM, а потом тестишь всякие баги или проводишь наблюдения в STMStudio, которая будет строить график изменения значения наблюдаемых переменных хоть целый день.
Ждал этот тред больше 3 лет. Мимо начинал свой путь освоения контроллеров с AVR в AtmelStudio и теперь сижу на STM32 с STM32CubeMX как на герыче сука. Если совсем с нуля хочешь вкатиться, возьми на али пару простых отладочных плат и программатор:
https://ru.aliexpress.com/item/1PCS-ST-LINK-Stlink-ST-Link-V2-Mini-STM8-STM32-Simulator-Download-Programmer-Programming-With-Cover/32792513237.html
https://ru.aliexpress.com/item/48-STM32F030F4P6-s-CORTEX-M0-Core-32bit/32881417785.html
https://ru.aliexpress.com/item/Free-Shipping-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32525208361.html
Эти платы пригодятся всегда, когда надо будет собрать что-то относительно простое и оставить работать на неопределенный срок, чтоб не дергать основную плату.
STM32F030F4P6 - самое ходове дерьмо для проверки датчиков, дисплеев и создания всяких тестовых простых девайсов, кароче аналог ардуины, только быстрее и лучше.
STM32F103C8T6 - второе ходовое дерьмо из-за своей дешивизны и предоставляемых возможностей, достаточно памяти, интерфейсов и всего остального, чтоб сделать йобу с кучей датчиков, цветным дисплеем и всякими передающими модулями или прицепить к пеке по USB.
У меня еще валяются такие же платы с STM32F103RET6 и STM32F103RFT6, когда нужно совсем много памяти для графики или больших массивов данных, да и в целом 103я серия очень нравится. Также есть STM32F429I-DISCO - это былая моя первая отладочная плата STM32, с которой я начал свое изучение и пилил тогда фо фан систему использующую DSP для распознавания цветов и простых форм с Omnivision камеры + наложение информации на кадры и трансляция через ESP8266 модуль по WiFi, чтоб через обычный браузер смотреть - было очень интересно.
Насчет Nucleo, так себе варчик, особенно если больше 1 покупаешь - неоправданная переплата за програматор на плате и кучу перефирии - она будет только мешать (не будешь же ты выпаивать каждый раз какую-то лабуду с нее, когда нужны будут ножки на которой она висит). Лучше взять у китайцев с голой разводкой (если имеются нужные тебе варианты) и навешивать все свое, единственную Nucleo которую я б купил это с контроллером STM32F334R8 из-за наличия в нем таймера разрешением 217 пикосекунд и отсутствия самого контроллера на али.
По звуку ничего определенного не могу посоветовать, но как писали выше - бери плату с DSP. А по среде разработки советую связку STM32CubeMX + Keil + STMStudio. Сгенерил проект в кубе и пишешь себе код в лучшей IDE для ARM, а потом тестишь всякие баги или проводишь наблюдения в STMStudio, которая будет строить график изменения значения наблюдаемых переменных хоть целый день.
А зачем тебе куб нужен, только ради схемки тактирования и пинов? Я просто сразу с регистров начал и Keil и не понимаю зачем вообще эти говнокубы и говнохалы. Единственное - приходится читать исходники хала и комментарии ибо бывает сложно понять что и в какой последовательности врубать для того чтобы врубить какую-нибудь периферию ибо в RM не всё так понятно расписано.
>А они разве не все с DSP? Если я не путаю это просто набор инструкций процессора?
Нет, только F4 и F7
stm32f7 вне кубика дюже сложно будет сконфигурировать
Ради инициализации периферии, меня это заебывало на AVR - постоянно лезть в мануал потому что на каждой атмеге свои регистры и комбинации флагов для одной и той же настройки частоты шима или параметров uart. Потом то я надрочился с ними и запомнил, но когда перекатился на stm, решил ну его нахуй пусть генерит - за 3 года никаких проблем не было, тем более HAL'овские функции довольно хорошо написаны, изи понимать что там происходит когда дебажишь. А в кубе все задал, оно сгенерило функцию с инициализацией двух десятков параметров и тебе не надо лезть каждый раз в мануал на 300 страниц если надо что-то изменить, особенно это касается всяких DCMI, FMC, встроенного LCD-TFT контроллера и прочего.
Открыл шебм, изображение на экране посыпалось, все в полоску стало, пришлось ресет жать, теперь стремно снова открывать, что это за хуйня была.
>Какие подводные?
Поморгаешь диолдами и положишь на полку. Анус ставлю.
мимовладелец 429-discovery
Лучше бы накидали литературы, желательно на русском. А также плюсы-минусы разных средств разработки.
И все это желательно с ориентиром на массовую дурино-подобную плату с STM32F103C8T6, дабы вкатиться мог любой бомж.
Тебе для чего? Как можно быстрее что-то сделать или основательно вкатиться? Если первое - бери ардуину.
>литературы, желательно на русском.
1) Без книг по Си по любому не обойтись. Конечно можно это заменить каким-то кратким курсом, но тогда знания останутся поверхностными. Для начала микроконтроллеры можно вообще не трогать, а примеры с упражнениями компилировать под винду (или что там у тебя).
Хороших книг тут две:
- Подбельский и Фомин http://publ.lib.ru/ARCHIVES/P/PODBEL'SKIY_Vadim_Valerievich/_Podbel'skiy_V.V..html
- Керниган и Ричи. http://publ.lib.ru/ARCHIVES/K/KERNIGAN_Brayan_Vil'son/_Kernigan_B.V..html
Но в этих книгах есть существенная проблема - не рассматриваются нововведения C99, без которых (хотя и совсем малой части) для микроконтроллеров не обойтись. Об этих нововведениях нужно где-нибудь прочитать, хотя бы статейку нагуглить.
2) Нужно что-то для понимания того что такое процессор. Нужно понимание о том что такое система команд, гарвардская/фон-неймановская архитектура, CISC/RISC и прочее. В рамках этого пункта, для общего развития, неплохо было бы разобрать систему команд какого-нибудь простенького процессора и написать десяток строк на ассемблере. Тут я не знаю какую литературу советовать.
3) Ядро Cortex-МЗ компании ARM. Полное руководство. Джозеф Ю. Стоит прочитать, хотя бы по диагонали.
4) После того как осилишь предыдущие пункты, остается только открыть документацию на микроконтроллер, посмотреть примеры и понять куда тыкать в IDE.
>А также плюсы-минусы разных средств разработки.
Это по вкусу.
>И все это желательно с ориентиром на массовую дурино-подобную плату с STM32F103C8T6, дабы вкатиться мог любой бомж.
Вообще без разницы. Все отличие этих плат лишь в наличии/отсутствии встроенного отладчика и количестве светодиодов.
>Тебе для чего?
Для махараек.
>бери ардуину.
С нее и AVR заинтересован в перекате.
>Без книг по Си по любому не обойтись
В дроч регистров, ногодрыг и битовые операции могу, книг особо не читал. Думаешь, стоит? Для аврок вроде знаний хватало. Библиотеки с классами и ООП, конечно, не делал, но оно мне вроде и не нужно.
>Нужно что-то для понимания того что такое процессор. Нужно понимание о том что такое система команд, гарвардская/фон-неймановская архитектура, CISC/RISC и прочее
Зачем? Вещатели о CISC/RISC и прочих общих определениях в 99% случаев тоже нихуя не смогут объяснить внутреннее устройство процессора, глубже чем "вот этот квадратик - АЛУ, а вот эти стрелочки - шина данных".
>для общего развития, неплохо было бы разобрать систему команд какого-нибудь простенького процессора и написать десяток строк на ассемблере
Так открываем даташит на те же аврки и пишем, список команд с кратким описанием там дан. Чего тут разбирать-то? Ну и смысла в этом нет, только для общего развития.
>3) Ядро Cortex-МЗ компании ARM. Полное руководство. Джозеф Ю. Стоит прочитать, хотя бы по диагонали.
По диагонали определенно стоит изучить.
>После того как осилишь предыдущие пункты, остается только открыть документацию на микроконтроллер, посмотреть примеры и понять куда тыкать в IDE.
Т.е. я уже практически готов к секасу?
>Это по вкусу.
Ну, допустим. А какие самые популярные у махарайщиков, с большим коммьюнити?
>отличие этих плат лишь в наличии/отсутствии встроенного отладчика
Вот, кстати, важный момент. Где на компе тестить и симулировать код внутри МК? С аврками Протеус в этом деле все решает, а вот с стм32 полные непонятки.
>В дроч регистров, ногодрыг и битовые операции могу, книг особо не читал. Думаешь, стоит?
Ну если ты можешь сказать (не подглядывая) чем отличается i++ от ++i и знаешь, что в выражениях типы короче чем int, неявно приводятся к int, то наверное не нужно ничего читать. Даже если не знаешь, то для махараек и так сойдет.
>Зачем?
В основном для общего развития. Для махараек вобщем то не нужно. Но можно ли нормально программировать те же AVR, не зная что у них раздельные адресные пространства кода и данных? А это уже отличие фон-феймановской архитектуры от гарвардской и модифицированной гарвардской.
>Так открываем даташит на те же аврки и пишем, список команд с кратким описанием там дан. Чего тут разбирать-то? Ну и смысла в этом нет, только для общего развития.
Может и нет смысла. Но дает некоторое представление о том что может процессор. Например, явно не лишним будет знать, что в cortex-M0 и M1 нет команды деления, а в M3 остальных она есть. Те же DSP инструкции, которые выше обсуждали.
>Ну, допустим. А какие самые популярные у махарайщиков, с большим коммьюнити?
Бери кейл.
Остальные варианты те же что для AVR - это практически любые, не заточенные под микроконтроллеры IDE. Преимущество тут во множестве мелочей, которыми IDE отличается от блокнота. Недостатки и так должны быть понятны.
>Где на компе тестить и симулировать код внутри МК?
На компе - толком нигде. Пошаговая отладка и прочие штуки - прямо на микроконтроллере через ST-Link, J-Link и прочие. ST-Link, как видно из названия, только для ST. J-Link для всех ARM.
>Посоны, я правильно понял
Может правильно, а может и вовсе неправильно. Особенно подозрительно про "ардуиновский язык".
>А по SPL какой положняк?
В первом приближении это мало чем отличается от CMSIS. Вот например на картинке код одной из функций SPL. Как видно, берутся поля из структуры и практически напрямую запихиваются в регистры. Преимущество по сравнению с CMSIS в том что не нужно помнить какой бит в каком регистре и меньше шансов что-то пропустить и ошибиться.
ST постепенно отказываются от SPL, поэтому использовать SPL не стоит. Сейчас у них есть LL, которая мало чем отличается от SPL. Хотя может я в чем-то не прав, т.к. за STM наблюдаю издали, так сложилось что мне приходится использовать другие микроконтроллеры.
>Как видно, берутся поля из структуры
Дополню, а то вдруг не совсем понятно окажется. В эту структуру уже все вручную пихается. Получается что документацию в части регистров все равно, как правило, необходимо читать.
CMSIS - по сути просто набор определений регистров, чтоб тебе не пришлось в одном контроллере писать значения в TFIT1 и TFIT2, а в другом для той же настройки в TFIT3 и TFIT4, можно с помощью CMSIS в обоих случаях задавать через REGISTER_ZALYPI_1 и REGISTER_ZALYPI_2.
SPL - набор высокоуровневых либ, по сути надстройка над CMSIS, тебе уже не надо вписывать значения в регистры, а просто вызвать функцию с параметрами и она сама их впишет или прочитает. Это говно лишилось поддержки 4-5 лет назад и оставило после себя кучи говна примеров русскоязычного комьюнити, которые теперь бесполезны.
HAL - так как SPL было корявым поделием с кучей багов и проблем переноски кода с одного контроллера на другой, ST создали новый набор либ с учетом всех проебов и он оказался просто 10 из 10, если тебе надо написать что-то сложнее мигания лампочки по таймеру.
LL - низкоуровневый API, который ST выкатили относительно недавно, по сути является аналогом CMSIS, но лучше и полностью совместим с STM32Cube и HAL, тоесть можно использовать в проекте написанном на HAL в качестве оптимизированных вставок.
>>339849
>С аврками Протеус в этом деле все решает
Чет вообще вголос с этого, ведь есть AtmelStudio, купи только программатор нормальный и наслаждайся всеми плюшками бесплатной IDE от производителя микросхем.
>SPL - набор высокоуровневых либ, по сути надстройка над CMSIS
>LL - низкоуровневый API, который ST выкатили относительно недавно, по сути является аналогом CMSIS
Что-то ты странное пишешь. Вот на на картинке код функции из LL, выше код аналогичной функции из SPL. Как говорится, найди 10 отличий (кроме имен). Ну да, записываются чуть разные биты (назначение функций немного отличается). Еще вместо переменных tmpreg в LL используется макрос MODIFY_REG. Но существенных отличий нет.
>по сути является аналогом CMSIS
Вот только как видно из приведенного кода, LL это такая же надстройка над CMSIS как SPL. И LL ничуть не заменяет CMSIS, а наоборот его использует.
>Поморгаешь диолдами и положишь на полку. Анус ставлю.
Ну у меня есть конкретная, промышленная задача под STM. Нужно писать звук с АЦП и передавать в комп. Желательно минимум 8 каналов одновременно. Максимум 16 хотелось бы. Качество звука не волнует. Главное чтобы речь можно было разобрать.
>>339878
Сразу не понял что это именно ты, а то похоже тут пишут уже все вкатывальщики подряд.
Если не делать цифровую фильтрацию, то по вычислительным возможностям слишком жирно для твоих задач, впрочем это не плохо. Немного хуже то, что периферия там сложнее, будет сложнее освоить. Если цифровую фильтрацию не делать, то DSP инструкции тоже почти не пригодятся. Зато АЦП наоборот слабенький, но все равно должно хватить. Насколько я помню, у NXP были микроконтроллеры с более серьезными АЦП, но тебе это вроде не требуется.
Я правильно понял, ты писать на компе собираешься? Тогда суммарная скорость передачи на ПК будет небольшая - 16 бит на канал, частота дискретизации максимум 16 кГц и на 16 каналов - получается 4 МБит/с, это вообще ерунда.
>Я правильно понял, ты писать на компе собираешься?
Да надо передавать звук из АЦП на комп и там писать
>получается 4 МБит/с, это вообще ерунда.
а COM порт на плате сможет пропустить столько? У него вроде максимальная скорость 128000 байт в секунду.
>а COM порт на плате сможет пропустить столько? У него вроде максимальная скорость 128000 байт в секунду.
На материнской плате компа? По разному, но я больше 921600 бод/с (это 737280 бит/с) я не встречал. А микроконтроллер вполне может несколько мегабит выдать.
У тебя два варианта - USB и Ethernet. На счет USB посоветовать ничего толком не могу, т.к. делал только HID и то давно. Знаю только что есть стандартный аудио класс, но не знаю можно ли в нем сделать столько каналов. Впрочем можно сделать составное USB устройство, т.е. чтобы компьютером виделось как несколько устройств.
Другой способ - это использовать FT232H или другие микросхемы от FTDI. Программно это намного проще, только для компа придется что-то придумывать. Сам я это не делал, но пользовался устройством где они применялись для передачи видео из ПЛИС.
С Ethernet все можно сделать совсем просто. Если воткнуть в сетевуху компа напрямую, то можно обойтись без TCP/IP и слать RAW пакеты. С TCP/IP тоже не сложнее, только требований к микроконтроллеру может быть чуть больше.
Есть же прекрасные мемс-микрофоны с полкой 20-20000 Гц, которые выдают уже цифровой выход правда, нужна обработка фильтром. Один такой даже стоит на stm32f4discovery
> С TCP/IP тоже не сложнее, только требований к микроконтроллеру может быть чуть больше.
Я поднимал lwip стек на m4, работал прекрасно с потоком примерно 10мбит/с. Главное, с буферами не мельчить
Пссст, там Дейв создал хайп про китайские МК по 3 цента в розницу. На сайте производителя есть IDE и шиты на ангельском. Реально найти и купить программатор. Т.е. все есть, только разбирайся.
Фанатики STM8, по 40 центов за штуку, массово режут себе вены и вешаются.
STM32-господа тоже в легком недоумении от китайского чуда.
Но есть один подводный камень: все эти мк однократно программируемые.
И это еще что, на том сайте есть китайские 16-битные ЦАПы по 30 центов и 16-битные АЦП по 50 центов... Вот это реально ШОК. Полагаю, ОП ёбнется под стол от охуения.
Ну а смысл? Будто есть разница для единичных самоделок - 100 рублей или два рубля. Обычно в любом изделии, микроконтроллер это не самое дорогое, если это конечно не мигалка одним светодиодом. Или ты свои поделки делаешь сериями по тысяче штук?
Тематике треда тоже не соответствует. Это восьмибитный микроконтроллер, а тут тред про STM32.
>Полагаю, ОП ёбнется под стол от охуения.
Полагаю ему будет без разницы. Тем более ты наверное про одноканальные или двухканальные пишешь. На диджикее PCM1681PWP с восемью каналами стоит 4 доллара поштучно.
А еще, внезапно, разрядность и частота дискретизации - это не единственные характеристики АЦП.
>>339981
>Тем не менее, магаз с китайскими брендами - это охуенная находка.
Ты свои самоделки делаешь сериями по несколько тысяч штук?
1)Тяжело ли новичку адаптироваться к сфере?
2)Актуально ли вообще в 2018 году вкатываться в встраивыемые системы?
3)Стоит ли заниматься этим, если вообще нет знаний по электронике дальше закона ОМА? Прогать под железо нравиться на отладочниках, но не нравиться разводка плат, расчёты электротехнические и прочее...
4)Насколько это творческая деятельность и насколько оплачиваемая? Куда может расти разработчик дальше?
Изучаю геймдев и параллельно веб-макакинг, ещё в параллель на онлайн-курсы ардуино записался. Там видно будет когда всё развалится.
У меня создалось впечатление, что он тоже особо плотно не занимается. Фотки одни и те же, готовых девайсов не показывал. Наверняка ошибаюсь, но впечатление создалось именно такое.
Ок ладно, согласен, LL не заменяет CMSIS, но нет особой разницы использовать чистый CMSIS или LL, который используется для инициализации периферии, а потом код пишется снова на CMSIS. Я например вообще HAL'о адепт, не понимаю почему его постоянно поливают грязью в ру комьюнити, при том что за рубежом все пользуются и довольны кроме небольшого количества заядлых байтодрочеров.
Та нечего показывать, разработал 2,5 девайса, собираю и продаю их (в течении пары дней паяю платы и подготавливаю корпуса, которые продаю за 1-2 недели, остальное время кинчики смотрю или играю - на жизнь и обновление пеки/смартфона каждые пару лет хватает), последний год ничего нового на STM32 не писал, кроме ковыряния всяких новых датчиков и дисплеев с али. Пару раз в месяц достаю с ящика ESP32 в ожидании того, что наконец-то запилили нормальные библиотеки для асинхронного веб сервера под ESP-IDF...
Найс. Тоже, видимо, созрел до этого. Осталось только родить что-нибудь стоящее.
MPASM и поверх адаптированный под них СИ. Вроде во многих универах это распространённый набор. Правда умирающий.
Что за девайсы? Может дашь каких советов, как найти свою нишу? Я хиккан-программист-фрилансер, имею средненькие знания электроники, паю махарайки для себя. Крутится идея создать стартап какой-то или типа того, в общем делать реальные вещи.
>Я например вообще HAL'о адепт, не понимаю почему его постоянно поливают грязью в ру комьюнити, при том что за рубежом все пользуются и довольны кроме небольшого количества заядлых байтодрочеров.
Потому что кроилово на себестоимости и вытекающая из него байтооптимизация головного мозга.
>>340693
Не хочу палить то что я делаю, потму что довольно востребованная херовина среди обычных людей и продается изи.
Двигайся в направлении бытовых систем автоматизации, которые будут дешевые по себестоимости и при этом не будет особо аналогов, кроме китайского говна с али. Например простой контроль температуры и влажности при помощи тэна/лампы и увлажнителя/осушителя - он лежит в основе инкубаторов, сушилок, хранилищ продуктов, климат контроля в доме. Добавляешь к этому свои фишки которые нужны пользователям или которых еще никто не делал и у тебя уже несколько устройств для разной целевой аудитории но с одинаковым принципом работы и элементной базой.
https://ideone.com/tUfssc
Что делаю:
17-30: инициализирую периферию
32: подключаю USART6_TX к PC6
34-42: светодиодик для индикации
44-50: настройка PC6 (AF)
52-56: инициализация USART6
58-64: шлю байтик
Так вот, светодиод моргает, но PC6 как сидит в +3В, так и сидит, никаких данных не передает. В чем косяк может быть? Собираю arm-gcc-none-eabi в linux x64, шью через openocd.
>никаких данных не передает
Осциллографом или логическим анализатором смотрел? Может у тебя скорость неправильная?
Возможно у тебя проблема из-за неправильного определения тактовой частоты. Я давно ничего не делал с STM32, могу ошибаться. Если я правильно помню, то в дефолтном startup файле вызывается функция SystemInit (это не только у STM32, кажется это требование CMSIS), которая включает тактирование от кварца. Функция USART_Init, для того чтобы правильно посчитать делители, определяет тактовую частоту с помощью еще одной функции, которая использует дефайны с частотами генераторов, которые определяются (если не были определены) в stm32f4xx.h.
Наверное тебе следует глобально определить HSE_VALUE. Ну и еще ты зря используешь SPL.
Осциллографом, пик 2. Данные должны иди через канал 1 (желтый) сразу после включения светодиода (канал 2, синий). Тактовая частота вроде верно настроена, пик 1.
я немного ошибся, массивов два, один объявлен статически в XXX_rcc.c (APBAHBPrescTable), второй - глобально в system_XXX.c (AHBPrescTable). если вернуть все как было, то AHBPrescTable попадает в секцию .data в бинарнике.
>>341441
Возможно ты это и так знаешь, но на всякий случай скажу. Очевидно, что секция .data должна инициализироваться в самом начале из флешки. Код этой инициализации находится в startup файле. И в скрипте линкера это тоже должно быть отражено.
Если все переменные из секции .data не инициализируются, то это может быть из-за неправильного startup или скрипта линкера.
Цвет и яркость по всему кадру? Или по краям экрана? Мне кажется что микроконтроллер тут лишний, хватит какой-нибудь телевизионной микросхемы TDA для выделения цветоразностных сигналов. Для получения средней яркости так вообще достаточно лишь пропустить привязанный по уровню видеосигнал через RC-цепочку.
На микроконтроллере выделить цветоразностные сигналы должно быть затруднительно, как минимум потребуется довольно высокая частота дискретизации.
Спасибо. Немного не так выразился. Нужно разбить кадр на участки квадратно-гнездовым способом (т.е. что-то типа таблицы) и определить средние цвет и яркость каждого участка (ячейки таблицы).
Ерунду выдумываешь. Достаточно лишь получить цветоразностные сигналы на какой-нибудь телевизионной микросхеме, пропустить их через ФНЧ (в соответствии с ячейками таблицы) и в нужные моменты времени запустить АЦП. Длительность строки 64 мкс, даже на ардуине можно сделать запуск АЦП в нужный момент, если конечно ячейки не слишком мелкие.
Это скорее задача для компьютера (может одноплатника) с easycap для видеозахвата.
Я вообще адекватно задачи ставлю по вкату?
Потом, если чё, докуплю макет за 200 рублёв с диодами разноцветными.
Думаю, что это гораздо адекватнее чем покупать пачку модулей или всякие демоплаты типа дискавырей. Лично мне идеальным видится вариант покупки под конкретную задумку, когда сначала придумываешь охуительный велосипед, а затем подбираешь под него железо, которое и осваиваешь в процессе.
мимо
>придумываешь охуительный велосипед
и начинаешь ЛУТить до дыму, запарывать детальки, пока Дискавери-боярин занимается написанием кода.
Да, хотеть писать код.
Так что, в принципе кроме стлинка ничего не надо?
Вернуть на комп результат вычислений и бенчить МИПСы можно будет?
>Дискавери-боярин занимается написанием кода
Велосипед потом поедет по назначению, а дискавери отправится в небытие. Это примерно как делать детей или дрочить.
>Велосипед потом поедет в помойку,
а Дискавери-боярин будет отлаживать код вывода на дисплей и работу с памятью. Данную связку велосипедо-нищенка не сможет спаять своими кривыми ручонками и забросит затею. А почтенный Дискавери-господин закончит написание кода, отрисует схему своего йоба-устройства, спокойно сочинит печатку и закажет ее изготовление китайским мастерам. Затем спаяет свое устройство и зальет в него отлаженный и рабочий код.
>дисплей и работу с памятью
То есть во всех твоих самоделках, кроме микроконтроллера, дисплея, памяти и может быть батарейки, ничего более существенного нет?
Так, а что с дискавырей станет по итогу?
>нищенка
Щас бы всерьёз думать, что у кого-то нет денег на дисковырь.
>ничего
Ну чому ты так? Есть памяти 8Мб, есть GPRS-модем, есть порт Ethernet, 7" touch-LCD 800х640
Ну а смысл делать такое на STM32? Не проще ли и дешевле взять одноплатный компьютер?
Толку от дискавери не так много. Допустим захочется отмакетировать синтезатор частоты для радиоприемника или часы на неонках, сильно поможет дискавери по сравнению с простейшей платой? Или взять к примеру задачу ОП-а, ему будет какой-то толк от дискавери только если он решит использовать ethernet.
> usb-uart
Пичаль, а что тогда вообще st-link v2 делает? Я читал, он и шьёт, и дебажит.
Т.е. доступ к памяти МК у него есть.
Так почему бы через него не возвращать результаты?
>Я читал, он и шьёт, и дебажит.
>Т.е. доступ к памяти МК у него есть.
Это все верно. Но printf-ами удобнее срать в UART. В отладчик тоже можно, например через SWO или semihosting, но по моему это не так удобно. Так что USB-UART дополняет отладчик.
Можешь нищепример кинуть?
Просто плата 120, отладчик столько же, а эти уарты нахожу по 800.
Проще тогда борду докупить за 200 и моргать диодами, так там ещё фоторезюки в комплекте.
Эт что ты за 800 нашел?
Пик1 можно брать, или на chg340 что-то, но лучше пик2 - им можно как gpio/i2c/spi over usb пользоваться.
>примитивный логический анализатор
На Хабаре была статья про логаналайзер на стм32ф4ххх, думаю можно адаптировать под твои нужды. Гугл ит!
>SPI
>serial pereprherial interface
>SERIAL
Ну почему в вопросе опять ответ, а задавший его этого не видит? Конечно можно! Главное не мешай ему работать и всё. Тебе надо слушать MOSI, MISO по тактам через SCK.
У него там осциллограф с аналоговой частью. Мне просто надо посмотреть, что стм8 передает модулю нрф24.
Где такой булыжник купить? Помню батя паял телевизоры и постоянно тыкал паяльником в него. А как он называется не знаю. Ищу его лет 10 уже.
Первая сцылка из гугла по словам "кусковая сосновая канифоль" http://prodiel.ru/product_info.php?products_id=468
>Тебе надо слушать MOSI, MISO по тактам через SCK.
Я только вчера с ардуины слез. Всё в теории выглядит довольно очевидно. Но где посмотреть пример кода для стм?
А что ещё может STM32 передавать nRF24I01+ , кроме команд и данных? Или тебе лень проверять ВЕСЬ ЭФИР, НА ВСЕХ АДРЕСАХ И КАНАЛАХ? А ведь там 5 байт на адрес, лол.
Спасибо
Аноны, купил на али stm32f4.., до этого только с авр дело имел.
Битый час уже пытаюсь лед зажечь. Что я делаю не так? https://pastebin.com/K5FH5SCr
Не игрался с 40x серией, но ради интереса попробую помочь.
1) Вроде бы светодиоды на той плате сидят начиная с 12. Т.е. ты должен написать: GPIOD->MODER |= GPIO_MODER_MODE12_0;
2) Для светодиода можешь не трогать GPIOD->OSPEEDR
3) GPIOD->PUPDR тоже, ибо там 0 должны быть
4) Ну и далее уже GPIOD->ODR = GPIO_ODR_ODR12; (вроде, так, но ты понял в общем).
5) Если светодиод не зажёгся, возможно, следует писать 0 для зажигания(Это зависит от того где он сидит - на минусе или плюсе).
Для начала выкинул бы строчку GPIOD->OTYPER &= ~(GPIO_OTYPER_OT0);
Заглянул в документацию (ни камня, ни название доски) что висит на выводе PD0 и чем зажигать светодиод (есть вариант что его надо нулем зажигать). Без схемы ловить нечего.
>>347275
Доска на пике.
Использую свой внешний LED, хочу его через пин зыжечь, так что должно с любого пина работать, или я ошибаюсь? Собираю из под линукса с помощью arm-none-eabi-gcc, флешу через st-link v2. Флешится всё без проблем (по крайней мере так говорит мне программер). Говорит ли это о том, что я правильно компилирую? Может я там флагов каких-нибудь левых понапихал или еще чего...
Вот мэйкфайл вдогонку pastebin.com/HaR59pbT
Очевидно же, что если ты написал: "GPIOD->MODER |= GPIO_MODER_MODE0_0;" и так дальше всё, то у тебя светодиод будет зажигаться только от pd0.
Попробуй перебить свой код на портА вывод 6 или 7. Обрати внимание - светодиоды зажигаются НУЛЕМ, те по идее сразу засветится после строчки "GPIOA->MODER |= GPIO_MODER_MODE6_0;".
Кейл говорит код компилится в такой набор инструкций. По ним можно примерно сравнить компилируемость кода.
;;;3 int main(void)
000000 4813 LDR r0,|L1.80|
;;;4 {
;;;5
;;;6 RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
000002 6800 LDR r0,[r0,#0]
000004 f0400008 ORR r0,r0,#8
000008 4911 LDR r1,|L1.80|
00000a 6008 STR r0,[r1,#0]
;;;7 GPIOD->MODER |= GPIO_MODER_MODE0_0;
00000c 4811 LDR r0,|L1.84|
00000e 6800 LDR r0,[r0,#0]
000010 f0400001 ORR r0,r0,#1
000014 490f LDR r1,|L1.84|
000016 6008 STR r0,[r1,#0]
;;;8 GPIOD->OSPEEDR |= (GPIO_OSPEEDR_OSPEED0);
000018 480e LDR r0,|L1.84|
00001a 3008 ADDS r0,r0,#8
00001c 6800 LDR r0,[r0,#0]
00001e f0400003 ORR r0,r0,#3
000022 490c LDR r1,|L1.84|
000024 3108 ADDS r1,r1,#8
000026 6008 STR r0,[r1,#0]
;;;9 GPIOD->OTYPER &= ~(GPIO_OTYPER_OT0);
000028 1f08 SUBS r0,r1,#4
00002a 6800 LDR r0,[r0,#0]
00002c f0200001 BIC r0,r0,#1
000030 1f09 SUBS r1,r1,#4
000032 6008 STR r0,[r1,#0]
;;;10 GPIOD->PUPDR &= ~(GPIO_PUPDR_PUPD0);
000034 4807 LDR r0,|L1.84|
000036 300c ADDS r0,r0,#0xc
000038 6800 LDR r0,[r0,#0]
00003a f0200003 BIC r0,r0,#3
00003e 4905 LDR r1,|L1.84|
000040 310c ADDS r1,r1,#0xc
000042 6008 STR r0,[r1,#0]
;;;11
;;;12 GPIOD->ODR = 1;
000044 2001 MOVS r0,#1
000046 4903 LDR r1,|L1.84|
000048 3114 ADDS r1,r1,#0x14
00004a 6008 STR r0,[r1,#0]
;;;13 while (1) {
00004c bf00 NOP
|L1.78|
00004e e7fe B |L1.78|
;;;14
;;;15 }
;;;16 }
ENDP
Попробуй перебить свой код на портА вывод 6 или 7. Обрати внимание - светодиоды зажигаются НУЛЕМ, те по идее сразу засветится после строчки "GPIOA->MODER |= GPIO_MODER_MODE6_0;".
Кейл говорит код компилится в такой набор инструкций. По ним можно примерно сравнить компилируемость кода.
;;;3 int main(void)
000000 4813 LDR r0,|L1.80|
;;;4 {
;;;5
;;;6 RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
000002 6800 LDR r0,[r0,#0]
000004 f0400008 ORR r0,r0,#8
000008 4911 LDR r1,|L1.80|
00000a 6008 STR r0,[r1,#0]
;;;7 GPIOD->MODER |= GPIO_MODER_MODE0_0;
00000c 4811 LDR r0,|L1.84|
00000e 6800 LDR r0,[r0,#0]
000010 f0400001 ORR r0,r0,#1
000014 490f LDR r1,|L1.84|
000016 6008 STR r0,[r1,#0]
;;;8 GPIOD->OSPEEDR |= (GPIO_OSPEEDR_OSPEED0);
000018 480e LDR r0,|L1.84|
00001a 3008 ADDS r0,r0,#8
00001c 6800 LDR r0,[r0,#0]
00001e f0400003 ORR r0,r0,#3
000022 490c LDR r1,|L1.84|
000024 3108 ADDS r1,r1,#8
000026 6008 STR r0,[r1,#0]
;;;9 GPIOD->OTYPER &= ~(GPIO_OTYPER_OT0);
000028 1f08 SUBS r0,r1,#4
00002a 6800 LDR r0,[r0,#0]
00002c f0200001 BIC r0,r0,#1
000030 1f09 SUBS r1,r1,#4
000032 6008 STR r0,[r1,#0]
;;;10 GPIOD->PUPDR &= ~(GPIO_PUPDR_PUPD0);
000034 4807 LDR r0,|L1.84|
000036 300c ADDS r0,r0,#0xc
000038 6800 LDR r0,[r0,#0]
00003a f0200003 BIC r0,r0,#3
00003e 4905 LDR r1,|L1.84|
000040 310c ADDS r1,r1,#0xc
000042 6008 STR r0,[r1,#0]
;;;11
;;;12 GPIOD->ODR = 1;
000044 2001 MOVS r0,#1
000046 4903 LDR r1,|L1.84|
000048 3114 ADDS r1,r1,#0x14
00004a 6008 STR r0,[r1,#0]
;;;13 while (1) {
00004c bf00 NOP
|L1.78|
00004e e7fe B |L1.78|
;;;14
;;;15 }
;;;16 }
ENDP
Попробуй залить этот кекс (светодиод PA6 на плате). Его исходник (включая стартап код):
#include <stm32f407xx.h>
int main(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER |= GPIO_MODER_MODE6_0;
GPIOA->OSPEEDR |= (GPIO_OSPEEDR_OSPEED6);
GPIOA->ODR = 0x0000;
while (1) {
}
}
(в состоянии же скопипастить текст ниже в файл и прошить его?)
:020000040800F2
:10000000600600200D020008150200081702000813
:10001000190200081B0200081D0200080000000071
:100020000000000000000000000000001F020008A7
:100030002102000800000000230200082502000839
:1000400027020008270200082702000827020008EC
:1000500027020008270200082702000827020008DC
:1000600027020008270200082702000827020008CC
:1000700027020008270200082702000827020008BC
:1000800027020008270200082702000827020008AC
:10009000270200082702000827020008270200089C
:1000A000270200082702000827020008270200088C
:1000B000270200082702000827020008270200087C
:1000C000270200082702000827020008270200086C
:1000D000270200082702000827020008270200085C
:1000E000270200082702000827020008270200084C
:1000F000270200082702000827020008270200083C
:10010000270200082702000827020008270200082B
:10011000270200082702000827020008270200081B
:10012000270200082702000827020008270200080B
:1001300027020008270200082702000827020008FB
:1001400027020008270200082702000827020008EB
:1001500027020008270200082702000827020008DB
:1001600027020008270200082702000827020008CB
:1001700027020008270200082702000800000000EC
:10018000270200082702000800F002F800F02EF80D
:100190000AA090E8000C82448344AAF10107DA45E2
:1001A00001D100F023F8AFF2090EBAE80F0013F006
:1001B000010F18BFFB1A43F001031847B0010000FC
:1001C000C00100000023002400250026103A28BFAB
:1001D00078C1FBD8520728BF30C148BF0B607047B9
:1001E0001FB500F0BDF81FBD10B510BD00F031F80F
:1001F0001146FFF7F5FF00F099F800F04FF803B44F
:10020000FFF7F2FF03BC00F057F8000009488047F1
:1002100009480047FEE7FEE7FEE7FEE7FEE7FEE7E8
:10022000FEE7FEE7FEE7FEE704480549054A064B00
:1002300070470000C9020008890100086000002022
:1002400060060020600200206002002070477047B6
:100250007047754600F02CF8AE46050069465346D7
:1002600020F00700854618B020B5FFF7DDFFBDE898
:1002700020404FF000064FF000074FF000084FF00D
:10028000000B21F00701AC46ACE8C009ACE8C0099E
:10029000ACE8C009ACE8C0098D46704710B504460B
:1002A000AFF300802046BDE81040FFF7A8BF000074
:1002B000004870470000002001491820ABBEFEE74F
:1002C00026000200704700001448006840F47000E7
:1002D000124908601248006840F0010010490860A7
:1002E00000200F49083108600D4800680D4908409A
:1002F0000B4908600C48091D0860081F006820F4BD
:100300008020091F0860002005490C3108604FF06B
:1003100000600249803908607047000088ED00E005
:1003200000380240FFFFF6FE103000240A48006843
:1003300040F00100084908600848006840F4805017
:10034000064908600846806840F4405088600020F4
:10035000486100BFFEE70000303802400000024064
:100360004FF04070E1EE100A704700007C03000877
:0C0370000000002060060000C40100082E
:040000050800018965
:00000001FF
Попробуй залить этот кекс (светодиод PA6 на плате). Его исходник (включая стартап код):
#include <stm32f407xx.h>
int main(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
GPIOA->MODER |= GPIO_MODER_MODE6_0;
GPIOA->OSPEEDR |= (GPIO_OSPEEDR_OSPEED6);
GPIOA->ODR = 0x0000;
while (1) {
}
}
(в состоянии же скопипастить текст ниже в файл и прошить его?)
:020000040800F2
:10000000600600200D020008150200081702000813
:10001000190200081B0200081D0200080000000071
:100020000000000000000000000000001F020008A7
:100030002102000800000000230200082502000839
:1000400027020008270200082702000827020008EC
:1000500027020008270200082702000827020008DC
:1000600027020008270200082702000827020008CC
:1000700027020008270200082702000827020008BC
:1000800027020008270200082702000827020008AC
:10009000270200082702000827020008270200089C
:1000A000270200082702000827020008270200088C
:1000B000270200082702000827020008270200087C
:1000C000270200082702000827020008270200086C
:1000D000270200082702000827020008270200085C
:1000E000270200082702000827020008270200084C
:1000F000270200082702000827020008270200083C
:10010000270200082702000827020008270200082B
:10011000270200082702000827020008270200081B
:10012000270200082702000827020008270200080B
:1001300027020008270200082702000827020008FB
:1001400027020008270200082702000827020008EB
:1001500027020008270200082702000827020008DB
:1001600027020008270200082702000827020008CB
:1001700027020008270200082702000800000000EC
:10018000270200082702000800F002F800F02EF80D
:100190000AA090E8000C82448344AAF10107DA45E2
:1001A00001D100F023F8AFF2090EBAE80F0013F006
:1001B000010F18BFFB1A43F001031847B0010000FC
:1001C000C00100000023002400250026103A28BFAB
:1001D00078C1FBD8520728BF30C148BF0B607047B9
:1001E0001FB500F0BDF81FBD10B510BD00F031F80F
:1001F0001146FFF7F5FF00F099F800F04FF803B44F
:10020000FFF7F2FF03BC00F057F8000009488047F1
:1002100009480047FEE7FEE7FEE7FEE7FEE7FEE7E8
:10022000FEE7FEE7FEE7FEE704480549054A064B00
:1002300070470000C9020008890100086000002022
:1002400060060020600200206002002070477047B6
:100250007047754600F02CF8AE46050069465346D7
:1002600020F00700854618B020B5FFF7DDFFBDE898
:1002700020404FF000064FF000074FF000084FF00D
:10028000000B21F00701AC46ACE8C009ACE8C0099E
:10029000ACE8C009ACE8C0098D46704710B504460B
:1002A000AFF300802046BDE81040FFF7A8BF000074
:1002B000004870470000002001491820ABBEFEE74F
:1002C00026000200704700001448006840F47000E7
:1002D000124908601248006840F0010010490860A7
:1002E00000200F49083108600D4800680D4908409A
:1002F0000B4908600C48091D0860081F006820F4BD
:100300008020091F0860002005490C3108604FF06B
:1003100000600249803908607047000088ED00E005
:1003200000380240FFFFF6FE103000240A48006843
:1003300040F00100084908600848006840F4805017
:10034000064908600846806840F4405088600020F4
:10035000486100BFFEE70000303802400000024064
:100360004FF04070E1EE100A704700007C03000877
:0C0370000000002060060000C40100082E
:040000050800018965
:00000001FF
Та плата, что на прошлом моём пике, оказалась чуть другой. Нашел схему своей. Можешь для PF9 хекс запилить, пожалуйста? Прошил своим - опять ноль эмоций.
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN;
GPIOF->MODER |= GPIO_MODER_MODE9_0;
GPIOF->OSPEEDR |= (GPIO_OSPEEDR_OSPEED9);
GPIOF->ODR = 0x0000;
:020000040800F2
:10000000600600200D020008150200081702000813
:10001000190200081B0200081D0200080000000071
:100020000000000000000000000000001F020008A7
:100030002102000800000000230200082502000839
:1000400027020008270200082702000827020008EC
:1000500027020008270200082702000827020008DC
:1000600027020008270200082702000827020008CC
:1000700027020008270200082702000827020008BC
:1000800027020008270200082702000827020008AC
:10009000270200082702000827020008270200089C
:1000A000270200082702000827020008270200088C
:1000B000270200082702000827020008270200087C
:1000C000270200082702000827020008270200086C
:1000D000270200082702000827020008270200085C
:1000E000270200082702000827020008270200084C
:1000F000270200082702000827020008270200083C
:10010000270200082702000827020008270200082B
:10011000270200082702000827020008270200081B
:10012000270200082702000827020008270200080B
:1001300027020008270200082702000827020008FB
:1001400027020008270200082702000827020008EB
:1001500027020008270200082702000827020008DB
:1001600027020008270200082702000827020008CB
:1001700027020008270200082702000800000000EC
:10018000270200082702000800F002F800F02EF80D
:100190000AA090E8000C82448344AAF10107DA45E2
:1001A00001D100F023F8AFF2090EBAE80F0013F006
:1001B000010F18BFFB1A43F001031847B8010000F4
:1001C000C80100000023002400250026103A28BFA3
:1001D00078C1FBD8520728BF30C148BF0B607047B9
:1001E0001FB500F0C1F81FBD10B510BD00F031F80B
:1001F0001146FFF7F5FF00F099F800F04FF803B44F
:10020000FFF7F2FF03BC00F057F8000009488047F1
:1002100009480047FEE7FEE7FEE7FEE7FEE7FEE7E8
:10022000FEE7FEE7FEE7FEE704480549054A064B00
:1002300070470000C9020008890100086000002022
:1002400060060020600200206002002070477047B6
:100250007047754600F02CF8AE46050069465346D7
:1002600020F00700854618B020B5FFF7DDFFBDE898
:1002700020404FF000064FF000074FF000084FF00D
:10028000000B21F00701AC46ACE8C009ACE8C0099E
:10029000ACE8C009ACE8C0098D46704710B504460B
:1002A000AFF300802046BDE81040FFF7A8BF000074
:1002B000004870470000002001491820ABBEFEE74F
:1002C00026000200704700001448006840F47000E7
:1002D000124908601248006840F0010010490860A7
:1002E00000200F49083108600D4800680D4908409A
:1002F0000B4908600C48091D0860081F006820F4BD
:100300008020091F0860002005490C3108604FF06B
:1003100000600249803908607047000088ED00E005
:1003200000380240FFFFF6FE103000240C48006841
:1003300040F020000A4908600A48006840F4802024
:100340000849086007480830006840F44020054923
:1003500008310860002003491431086000BFFEE73F
:1003600030380240001402404FF04070E1EE100AB5
:1003700070470000840300080000002060060000B1
:04038000C4010008AC
:040000050800018965
:00000001FF
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOFEN;
GPIOF->MODER |= GPIO_MODER_MODE9_0;
GPIOF->OSPEEDR |= (GPIO_OSPEEDR_OSPEED9);
GPIOF->ODR = 0x0000;
:020000040800F2
:10000000600600200D020008150200081702000813
:10001000190200081B0200081D0200080000000071
:100020000000000000000000000000001F020008A7
:100030002102000800000000230200082502000839
:1000400027020008270200082702000827020008EC
:1000500027020008270200082702000827020008DC
:1000600027020008270200082702000827020008CC
:1000700027020008270200082702000827020008BC
:1000800027020008270200082702000827020008AC
:10009000270200082702000827020008270200089C
:1000A000270200082702000827020008270200088C
:1000B000270200082702000827020008270200087C
:1000C000270200082702000827020008270200086C
:1000D000270200082702000827020008270200085C
:1000E000270200082702000827020008270200084C
:1000F000270200082702000827020008270200083C
:10010000270200082702000827020008270200082B
:10011000270200082702000827020008270200081B
:10012000270200082702000827020008270200080B
:1001300027020008270200082702000827020008FB
:1001400027020008270200082702000827020008EB
:1001500027020008270200082702000827020008DB
:1001600027020008270200082702000827020008CB
:1001700027020008270200082702000800000000EC
:10018000270200082702000800F002F800F02EF80D
:100190000AA090E8000C82448344AAF10107DA45E2
:1001A00001D100F023F8AFF2090EBAE80F0013F006
:1001B000010F18BFFB1A43F001031847B8010000F4
:1001C000C80100000023002400250026103A28BFA3
:1001D00078C1FBD8520728BF30C148BF0B607047B9
:1001E0001FB500F0C1F81FBD10B510BD00F031F80B
:1001F0001146FFF7F5FF00F099F800F04FF803B44F
:10020000FFF7F2FF03BC00F057F8000009488047F1
:1002100009480047FEE7FEE7FEE7FEE7FEE7FEE7E8
:10022000FEE7FEE7FEE7FEE704480549054A064B00
:1002300070470000C9020008890100086000002022
:1002400060060020600200206002002070477047B6
:100250007047754600F02CF8AE46050069465346D7
:1002600020F00700854618B020B5FFF7DDFFBDE898
:1002700020404FF000064FF000074FF000084FF00D
:10028000000B21F00701AC46ACE8C009ACE8C0099E
:10029000ACE8C009ACE8C0098D46704710B504460B
:1002A000AFF300802046BDE81040FFF7A8BF000074
:1002B000004870470000002001491820ABBEFEE74F
:1002C00026000200704700001448006840F47000E7
:1002D000124908601248006840F0010010490860A7
:1002E00000200F49083108600D4800680D4908409A
:1002F0000B4908600C48091D0860081F006820F4BD
:100300008020091F0860002005490C3108604FF06B
:1003100000600249803908607047000088ED00E005
:1003200000380240FFFFF6FE103000240C48006841
:1003300040F020000A4908600A48006840F4802024
:100340000849086007480830006840F44020054923
:1003500008310860002003491431086000BFFEE73F
:1003600030380240001402404FF04070E1EE100AB5
:1003700070470000840300080000002060060000B1
:04038000C4010008AC
:040000050800018965
:00000001FF
На 429 камне стартанул код. Здесь PG14 зажигается единицей. Пикрил горит красным и сеанс отладки за заднем фоне. Мне кажется как-то не так прошиваешь хекс или страницы памяти не чистишь. В самом дубовом варианте попробуй через uart прошить - кажется бут0=1 , бут1=0 и через какую-то утилиту от st можно по компорту заливать прошивку. Нужен преобразователь уровней, напрямую к компорту подключать нельзя. Нужен как минимум usb-uart ttl преобразователь.
Вы на каком-то неправильном наречии базарите с контроллером. Используйте HAL и не ебите себе моск
Есть один вариант на проверку..
"install: main.bin
st-flash write main.bin 0x8000000"
Обращаем внимание - тут бин файл указываем, а тебе кидался хекс. Использовал внешнюю программу чтобы из HEX получить BIN? Кажется в этом косяк. Так и гуглить hex2bin.exe - старая консольная программка и обратная ей bin2hex.
спасибо, буду курить
>>347302
st-flash хексы тоже кушает - https://github.com/texane/stlink/blob/master/doc/man/st-flash.md
Может ИДЕ какую-нибудь на линукс накатить? Посоветуете что-нибудь для этих целей?
а в хекс через всё тот же arm-none-eabi-objcopy, только с ihex вместо binary
> st-flash хексы тоже кушает
"Flash binary files to arbitrary sections of memory, or read arbitrary addresses of memory out to a binary file." - четко же написано что двоичные файлы кушает, а шестнадцатеричные - не файлы, а размеры и смещения.
Из лога компиляции
linking...
Program Size: Code=496 RO-data=408 RW-data=0 ZI-data=1632
FromELF: creating hex file...
На диске test.hex занимает 2600 байт, а не полкилобайта. Преобразуй HEX в BIN и еще раз попробуй.
Еще мелочь - (как минимум в Keil) - после заливки прошивки (flash->download) ничего не происходит до тех пор, пока руками камень не перезагрузишь. Те или ресет на нем нажать или по питанию передернуть. Ребут после заливки делал?
> Есть ли разница в форме импульсов ШИМ при использовании таймера и простого ногодрыга?
Что GPIO, что Timer используют одинаковый тип выхода - Push-Pull. Разницы нет.
> не будут ли фронты завалены?
Зависит от емкости того, что подключено к выводу. Чем больше емкость, тем больше будут завалены и искажены. Как вариант можно взять только один вывод - MCO, на который выводить системную тактовую частоту. Настроек нет, доступен только меандр и с жестко заданной частотой.
>ничего не происходит до тех пор, пока руками камень не перезагрузишь.
http://www.keil.com/support/man/docs/ulink2/ulink2_su_download_functions.htm
>Reset and Run the application on target after the download and verification completed.
Но по умолчанию это действительно выключено.
STM32F407. На какие пины можно выставлять прерывания? Если на все, то как сконфигурировать прерывания? У меня все кроме PA0 не дают повесить на себя прерывания в кьюбе.
По даташиту на (почти) любую ногу можно повесить. Единственное что есть аццкая подстава - нельзя получить более 16 внешних прерываний, тк прерывание от PA6 PB6 PC6.. Px6 - это условно одно и то же прерывание и слушается только один порт. Что бы получить все 16 прерываний - нужны разные выводы портов от 0 до 15, сам порт (A-H) не важен (те например PA9 PB4 PC0 PG5.. - уже 4 прерывания).
Забей на кукареканья шизиков-HALовцев, CMSIS и подобных - тебе нужны регистры:
SYSCFG_EXTICRх - задается какой порт слушается и какой вывод (всего 4 регистра, в каждом 4 линии - нужно указывать с какого порта слушать)
EXTI_IMR - разрешить прерывания с линии (0-15)
EXTI_RTSR - какие линии (0-15) должны вызывать прерывание по ВОСХОДЯЩЕМУ фронту (0->1)
EXTI_FTSR - какие линии (0-15) должны вызывать прерывание по НИСХОДЯЩЕМУ фронту (1->0)
EXTI_PR - записью 1 сбрасывать флаг сработки прерывания (из обработчика или из основного цикла, если просто смотришь - произошло прерывание или нет).
Регистрация/разрешения прерывания в NVIC NVIC_EnableIRQ(EXTI1_IRQHandler); - На первые 5 прерываний (0-4) индивидуальные обработки, далее сгруппированы по 5 штук EXTI9_5_IRQHandler и EXTI15_10_IRQHandler.
Глобальное разрешение прерываний __enable_irq();
Настойки GPIO не трогать, они должны оставаться входами (подтяжка по желанию).
Мне нужно записывать сигнал, в тот момент когда он изменяется на пинах. Попробовал пока послать на него I2C, но почему-то либо вешается ардуино, с которой посылаю, либо просто прерывания не срабатывают.
>>347376
Вроде бы я и понял, что ты мне описал, а вроде бы и нет.
Как понять какая линия к какому входу подведет и чем это отличается от 16 линий, про которые сказал >>347370-анон?
Могу ли я назначить прерывания более чем на 16 пинов, и если могу, то при пересечении двух пинов с противоположными подтяжками/уровнями сигнала (лог. единица и ноль) на одной линии, что произойдёт?
> записывать сигнал, в тот момент когда он изменяется на пинах
Обоссанное крылатое школололо с пердуино треда?
Настаивай сработку прерывания по обоим фронтам. Хоть и большая частота у STM, можно соснуть ( https://habr.com/post/161617/ ). Вопрос интересный, может поищу можно ли как-то через DMA ловить.
> Назначить прерывания более чем на 16 пинов
Нет, тк регистры SYSCFG_EXTICRх не дадут - там только выбор порта (A-..H) для конкретной линии (0-15) прерывания. Невозможно назначить прерывание на одноциферные(? незнаю как сказать) выводы разных портов - те одновременно ловить прерывания по линиям например PD6 и PH6 или PA6 или PC6 - невозможно, будет слушаться только что-то одно.
> при пересечении двух пинов с противоположными подтяжками/уровнями сигнала
Читай выше - это невозможно. Прерывание будет приходить только с того порта, который указан в SYSCFG_EXTICRх, другой порт никак не будет влиять.
Задавай лучше односложные вопросы - на них проще отвечать.
Если брать пердуину (в частности AVR микроконтроллеры) - на древних версиях было всего 2(3) прерывания по уровню (INT0 INT1 INT2(асинхронное)) - 2 жестко выделенных вывода с настраиваемыми фронтами и 2 обработчика прерывания. На версиях посвежее появилась фича - pin change interrupt - оно НЕ настраиваемое по фронтам, только задается на изменение (любое 1->0 0->1) и какие биты порта, на все 8 бит порта один обработчик. В STM есть 5 "выделенных" обработчиков прерываний (0-4) и 2 групповых по 5 выводов, оказавшись в которых нужно смотреть по какой линии произошло прерывание (в отличие от 0-4, которые однозначно говорят по какой линии было прерывание).
Если прям хочется всю шину снифать - мне кажется нужно CPLD ставить на входе. Завести на нее шину, поставить конвейер из 2 D триггеров с компаратором, которым ловить изменения на входе и достаточно будет всего одного прерывания, которое будет оповещать об изменении любого бита на шине, а не 16 обработчиков прерываний на каждую линию. Если почти сразу 2 прерывания сработает - можешь соснуть, тк пока просрешся на первое есть шанс потерять данные из второго прерывания (см ссылку выше).
это один и тот же анон
> записывать сигнал, в тот момент когда он изменяется на пинах
Обоссанное крылатое школололо с пердуино треда?
Настаивай сработку прерывания по обоим фронтам. Хоть и большая частота у STM, можно соснуть ( https://habr.com/post/161617/ ). Вопрос интересный, может поищу можно ли как-то через DMA ловить.
> Назначить прерывания более чем на 16 пинов
Нет, тк регистры SYSCFG_EXTICRх не дадут - там только выбор порта (A-..H) для конкретной линии (0-15) прерывания. Невозможно назначить прерывание на одноциферные(? незнаю как сказать) выводы разных портов - те одновременно ловить прерывания по линиям например PD6 и PH6 или PA6 или PC6 - невозможно, будет слушаться только что-то одно.
> при пересечении двух пинов с противоположными подтяжками/уровнями сигнала
Читай выше - это невозможно. Прерывание будет приходить только с того порта, который указан в SYSCFG_EXTICRх, другой порт никак не будет влиять.
Задавай лучше односложные вопросы - на них проще отвечать.
Если брать пердуину (в частности AVR микроконтроллеры) - на древних версиях было всего 2(3) прерывания по уровню (INT0 INT1 INT2(асинхронное)) - 2 жестко выделенных вывода с настраиваемыми фронтами и 2 обработчика прерывания. На версиях посвежее появилась фича - pin change interrupt - оно НЕ настраиваемое по фронтам, только задается на изменение (любое 1->0 0->1) и какие биты порта, на все 8 бит порта один обработчик. В STM есть 5 "выделенных" обработчиков прерываний (0-4) и 2 групповых по 5 выводов, оказавшись в которых нужно смотреть по какой линии произошло прерывание (в отличие от 0-4, которые однозначно говорят по какой линии было прерывание).
Если прям хочется всю шину снифать - мне кажется нужно CPLD ставить на входе. Завести на нее шину, поставить конвейер из 2 D триггеров с компаратором, которым ловить изменения на входе и достаточно будет всего одного прерывания, которое будет оповещать об изменении любого бита на шине, а не 16 обработчиков прерываний на каждую линию. Если почти сразу 2 прерывания сработает - можешь соснуть, тк пока просрешся на первое есть шанс потерять данные из второго прерывания (см ссылку выше).
это один и тот же анон
AN4666 Application note Parallel synchronous transmission using GPIO and DMA
https://www.st.com/content/ccc/resource/technical/document/application_note/7a/88/df/e3/d3/36/40/29/DM00169730.pdf/files/DM00169730.pdf/jcr:content/translations/en.DM00169730.pdf
Ни ивенты, ни прерывания к DMA явно не привязать. Fail~.
Интересно послушать как собрались делать логический анализатор на STM32.
>Интересно послушать как собрались делать логический анализатор на STM32.
Помигали светодиодом и расходимся.
Анонче, спасибо тебе за твоё вчерашнее время. Прошивал без стартап файла. Даже не знал, что он нужен был. Вот уж не думал, что буду когда-нибудь еще буду так радоваться загоревшемуся леду. Пошёл читать даташиты.
>Обоссанное школололо с пердуино треда?
Да. Ну ты заебал, я ж не школоло
>Невозможно назначить прерывание на одноциферные выводы разных портов
Ок
>Если почти сразу 2 прерывания сработает - можешь соснуть, тк пока просрешся на первое есть шанс потерять данные из второго прерывания (см ссылку выше).
Если на разных пинах сработает прерывание, оно же просто встанет в очередь, не? На частоте 165mHz, или сколько там пиковая, прочитать с нескольких пинов значение и записать время - должен вписаться во временные рамки. Если только не все 16 пинов изменят состояние единоразово, но такие состояния я не встречу
>Задавай лучше односложные вопросы - на них проще отвечать.
Ок, логично.
Тогда простым вопросом уйду немножко в другую степь:
Как настроить USB? Есть готовые примеры с BULK передачей?
Те готовые примеры что есть, пока завести не смог.
You make me sad
> на разных пинах сработает прерывание, оно же просто встанет в очередь
Да. На групповых прерываниях если не все скопом флаги сбросил - то по выходу из прерывания еще раз в него же попадешь и не надо в конце прерывания проверять не пришло ли еще одно прерывание.
Если будет более 2 подряд прерывания на одной линии - очень велик шанс их просрать при медленной реакции, тк нет счетчика числа прерываний, увидишь что было только одно.
> Как настроить USB? Есть готовые примеры с BULK передачей?
С USB говном не работал и ебись оно конем разбираться в этих помоях и реализаций под каждую ось. Сам то хоть нашел СДК или либы через которые собрался принимать помои с USB шины?
Пикрил - немного погуглил и используя православный Ethernet сразу на 3 разных машинки лилось дерьмище броадкастом по UDP - Windows, FreeBSD, Linux - все приняли это. Дальше на том же питоне или сях import socket и вперед. По временнЫм меткам видно что срет примерно каждую миллисекунду (os.Delay(1)) как и задумывалось. Скорость сам прикинешь.
>ебись оно конем разбираться в этих помоях и реализаций под каждую ось
Libusb же, просто не разобрался как она работает и почему не могу с ней достучаться к STM.
Пока читаю этот https://damogranlabs.com/2018/02/stm32-usb-cdc/ гайд
Либа LibUsb-1.0. На команду библиотеки libusb_open_device_with_vid_pid(ctx, USB_VENDOR_ID, USB_PRODUCT_ID);, STM с сгенерированным в кубе HID-кодом, отзывается как должна. STM с кодом же CDC-устройства сгенеренном там же, в кубе, с этим запросом не работает (возвращается Null). Так же, при этом, устройство определяется в системе как COM-6, но ни один терминал не с ним работает как говорится в примере из интернета, мы должны получать ответ в терминале, от сгенерированного кубом кода.
Как мне кажется - всем по хуй. Троллинга ради попробовал создать проектик CDC. Ну и пиздец, осталась огромная куча вопросов по режиму отладки этого говна.
Запустил отладку. При самом первом прогоне кода до строчки 121 ничего не происходит(????). После первого прохода 121 строчки появляется компорт.
После появления компорта при попытке подключиться putty снова сосу - даже окно терминала не появляется пока еще раз не выполнится 121 строка (или криво тестил или в этот проход спам не шлется).
После третьего и последующего выполнения 121 строки уже шлется спам в терминал.
Определенно этот быдлокод поломал манямирок - U$B шина активна всегда, даже если ничего не передается летают какие-то пакеты опроса есть че? и при останове(?) выполнения кода соединение не рвется и компорт не пропадает.
При выходе из отладки/перезагрузке компорт пропадает, но putty не говорит что компорт недоступен (как при выдергивании FTDI или PL2303 и подобных) и при повторном прогоне кода в терминале тишина, ничего не шлется, а если закрыть терминал и заново открыть - говорит иди на хуй, не могу открыть, хотя он виден в диспетчере устройств.
Перезайдя в отладку - пропадет компорт и см начало поста. WTF?
>Перезайдя в отладку - пропадет компорт и см начало поста. WTF?
Потому что микроконтроллер перестает отвечать компу, а спецификация USB устанавливает определенное время на ответ.
Гуры, расскажите как вы организуете расположение папок в проекте? Я уже заебался копировать примеры стм и корректировать их. Получается какая-то безумная ебала с папками библиотек и исходников. Как захуярить отдельно неизменяемое местоположение либ и прочих халов и облако/гит своего говнокода, чтобы его можно было быстро найти?
CMSIS, HAL_Driver, startup - стандартная хуйня
inc - хедеры
src - c/cpp-файлы
layout - kicad схема/плата
external - сабмодули на драйверы периферии
С cubemx дрочусь скриптом который переносит файлы вроде spi.c dma.c spi.h dma.c main.h
main.c не переношу, ибо меняется он никогда, а генерит кашу неподдержтюиваемую
Забыл дописать. Если нужна периферия, а готовой репы нет, то ты обязан сделать отдельный готовый репозиторий из ошметков интернета и запушить на гитхаб, таким образом ты сделаешь жизнь другим легче. Ну и кидаешь эту репу в сабмодули. Реюзабельность +, карма +++
>и запушить на гитхаб
Ты же понимаешь, что весь гитхаб будет ржать над моими потугами в кодинге?
Удваиваю, все похуй. Пока твой говнокод выполняепт задачу, всем похуй.
А кому продаешь? В рашке или за бугор с ибея какого-нибудь?
Приделал батарейку к своей STM32F429I-Discovery, теперь буду задрачивать все регистры RTC!
И сразу соснул с проглотом. Часы хоть и не сбрасываются при отключении питания, но таки останавливаются.
Насколько хватило моих знаний ангельского и мощности гуглопереводчика, понял, что для работы RTC от Vbat необходимо тактирование часов от LSE. В демонстрационной программульке от ST, дохуя завязано на тактирование от LSI и желания разбираться в дебрях их кода у меня нет. Сейчас засяду писать сам свои часы и попробую еще раз.
Наверное это на С++ с использованием шаблонов написано, из-за этого вполне может компилироваться на порядок дольше чем аналогичный код на Си.
Как дела у школьника? Давно не видно и не слышно. Уроки учит? Или в крестики-нолики играет над дампом?
Дохуя всего параллельно, и мне немножко лень.
Пока пилю I2C повторитель. К стати, анонче, подскажите нормальный пример I2C-Slave на LL, а то я ничего найти не могу даже те примеры которые я нашёл на хале, какие-то укуренные и не прозрачные.
Но если совсем не лень, то не откажусь от след. инфы:
1. От чего (от каких действий на I2C шине) срабатывает I2C1_EV_IRQHandler?
1.1 Возможно ли где-то прочесть, какой адрес всплыл на шине? Просто флаг ADDR в I2C_SR1 настораживает.
2. Как определить/обнаружить STOP и START на линии? ACK/NACK?
3. Как отправить NACK/ACK на мастера/слейва в передаче/приеме?
3. Как прижать SCL к нулю?
Я понимаю, что ручной доступ есть не ко всем перечисленным вещам если мы говорим об аппаратном I2C, но мне пока не найти даже нормальный пример слейва на LL, так что сам не раскопаю даже то, к чему доступ получить явно можно.
P.S: про STOPF в I2C_SR2 знаю, но без понимания всего процесса и того, как что срабатывает (особенно эвенты), я делать выводов не берусь
В принципе то понятно, когда срабатывает эвент сейчас с позиции слейва: как настроишь - на приходе адреса, при заполнении буффера, при срабатывании BTF, при получении стопа.
Только не ясно, как понять, что на линии был старт. Или оно тогда и не надо, даже если это повторный старт? Просто в таком случае получим задержку в ~2 пакета. Хотелось бы конечно минимизировать, но если что - не смертельно.
А NACK/ACK я хочу ставить сам, тогда когда мне удобно.
Да вы батенька походу Reference Manual не открывали, или увидев овер 1К страниц открестился, закрыл и забыл как страшный сон.
Что у тебя за побрякушка как платка называется и что за камень (полное название)?
Мыльница говно. Открываю древний мануал Да, он бумажный, 4 страницы на листе. Как минимум его можно читать в сортире, делать пометки и пиздить им тех, до кого с первого раза не доходит.
> 1. От чего (от каких действий на I2C шине) срабатывает I2C1_EV_IRQHandler?
На странице 843 есть замечательная табличка, где видно как двумя битами включить и прерывания и события от блока I2C. Только вот незадача - два бита действуют глобально, те нельзя выбрать например автобус сломался и ошибка подтверждения.
Очень внимательно почитай раздел Inter-Integrated circuit interface - он короткий.
На первый взгляд только 2 адреса слейва себе можешь назначить. Остальное - через особо жесткие костыли. Возможно SPI+EXTI поможет ловить произвольные адреса.
Что меня напрягает в IIC - нет таймаутов и можно основательно повесить шину, которая отвисает только после ребута по питанию или руками давать STOP, но это не всегда корректно, так как некоторые слейвы очень привередливы и STOP например после 5 тактовых импульсов игнорируют.
У меня реф мануал немного отличается (RM0090 Rev 17), но суть та же. На эти страницы (IIC Functional Description) не обратил внимания, сейчас почитаю.
Железка STM32f407.
>Что меня напрягает в IIC - нет таймаутов и можно основательно повесить шину, которая отвисает только после ребута
Так то в том же референсе есть намёки на то что можно и без этого перезапустить шину. Как минимум я видел что настраиваются какие-то тайм-ауты, есть определение подвешенной линии и контроль недопустимых состояний на шине. А сбросить шину ты можешь и программно, но это не точно
Масштаб троллинга неуклонно растет и достиг опасных показателей.
Собрал из подручного хлама - F429 под эмулятор, мега328 - для первоначальной отладки шины, онанокомп с линуксой под тестилку ебать она медленная, особенно i2cdump - на каждый байт оно дает команду записи адреса и потом команду чтения, но похуй - нашел говнокод на си - он чуть быстрее работает , логический анализатор, пара микросхем памяти и... CPLD на 64 макроячейки - может получится из нее сделать костыль I2C->SPI. На STM32F4 SPI умеет или 8 или 16 бит. Интересно, это все говно взлетит?
>>349363
Через жопу читал и мануал и пост повыше. В классической IIC нет таймаутов вообще. Таймауты в SMBUS (в компе можно найти). Повисший контроллер IIC можно попытаться "перезагрузить" через отключение и включение, но выше писалось про СЛЕЙВА, который считает такты и только спустя 9 тактов поймет команду СТОП и отпустит шину и игнорирует сигнал СТОП в другие моменты времени. Где-то видел описание подобных случаев.
Я не могу понять, что ты снял анализатором. Что ты получить то хотел и чего добился?
Посмотри проект если не сложо.
Сгенерировал в кьюбе инициализацию, при установке адреса слейва1 зависает SCL на земле (пикрил).
Если вернуть адрес в ноль, то всё нормально. Сравниваю с примером из интернета , вроде последовательность инициализации похожа, в функцию тоже всё приходит норм.
Это на f103.
https://yadi.sk/d/CDEei4OVxVj1DQ
Кое как подогнал смехоту. 5 макроячеек из 64.
Здесь за одно хорошо видно как тупит железка на линуксе и мне похуй. Это же proof of concept.
Как у меня ебануло.. Черную магию что ли еще раз почитать? CPLD настолько нежная, быстрая и суровая, что ловит отраженку с конца никуда не подключенного примерно 40 см шланга и считает ее за реальные импульсы/фронты. Временно отключил - уже нет аномалий. Если правильно понял вывод - оно легко прожует и не подавится от IIC с тактовой 50 МГц.
Смотреть на 7 и 5 анал, их "сумма"- 6 анал. Если включить мозги - догадаешься что это за костыль сбоку.
Точного камня не знаю, но серия F1 оставила тяжелые воспоминания.. Сам поищешь подобное, тем более что или здесь или в пердуино треде говорилось что F103 и IIC - крайне хреновая затея из-за аппаратных глюков. Поэтому ебитесь как хотите со своей F103.
Пока что переехал на циклон для обкатки. С учетом реального риалтайма есть бага, которую не пофиксить - возможна ошибка кадрирования не проверял еще. Поломали rarjpeg или нет?. Анал 5+6 - входные данные, анал 0+1 - "подогнанные" под формат SPI, которым в теории могу перехватывать с линии все, полностью игнорируя - мой не мой адрес.
Это аццки тупая штука, которая дает ответы на вопросы
> Как определить/обнаружить STOP и START на линии?
Смотри фронты 2 и 3 анала.
> ACK/NACK?
В 8 бит не впишешь и по идее на хуй не надо, но выводится в отдельную линию - 4 анал.
Это не к месту в данной железке-коверкалке I2C в SPI
>Как отправить NACK/ACK на мастера/слейва в передаче/приеме?
I2C_CR1
Bit 10ACK: Acknowledge enable
This bit is set and cleared by software and cleared by hardware when PE=0.
0: No acknowledge returned
1: Acknowledge returned after a byte is received (matched address or data)
> 3. Как прижать SCL к нулю?
Руками, сделав перенастойку порта с периферии AFxx на режим GPIO и выдать 1, прижав линию к земле.
Или снова заглянуть в I2C_CR1 Bit 7 NOSTRETCH: Clock stretching disable (Slave mode)
This bit is used to disable clock stretching in slave mode when ADDR or BTF flag is set, until
it is reset by software.
0: Clock stretching enabled
1: Clock stretching disabled
Сначала заработал, подключил на следующий день, а у него только подсветка загорается и всё.
Как понять что не так. Провода прозванивал тестером, все в порядке.
Как оно меня заебало.. Какая-то странная фигня в виде глитчей, пропусков и прочей радости было когда подцеплен анализатором к одной из линий (scl или sda). Сделав из CPLD буфер-повторитель - как-то получше стало, минимум полдня просрал на шараду - одна и та же схема на FPGA работает, на CPLD - нет, зависимость от фазы луны не обнаружена, осциллографом с ходу ничего не нашел - поймать иголку(?) среди потока говна.
Жуткая асинхронщина в CPLD, выдает глитчи (под конец виден). Пока нет идей где или из чего синхру взять.
Анал 0+1 - исходные данные, анал 2+3 - закос под SPI, служебные сигналы (местами дублирующиеся) - аналы 4-6. Можно начинать дрючить STM32F429.
Что там за глюки страшные на практике?
Смогу я к нему подключить часики?
Там же вроде можно программно i2c, так?
Ты отключал его перед тем, как он перестал работать?
Пины точно не перепутал потом?
Я как-то ебался с JLX жк экраном 20 минут, выясняя, почему он сегодня ничего не показывает, а потом наконец заметил перепутанные SDA и SCK. Прототипы на ардуинах - они такие.
Школота не палится? Рандомно к одному из представителей каждой серии заходит и смотрел Errata.
> I2C analog filter may provide wrong value, locking BUSY flag and preventing master mode entry.
> This issue occurs randomly.
https://www.st.com/resource/en/errata_sheet/cd00288116.pdf
https://www.st.com/resource/en/errata_sheet/cd00197763.pdf
https://www.st.com/resource/en/errata_sheet/cd00190234.pdf
https://www.st.com/resource/en/errata_sheet/cd00197763.pdf
https://www.st.com/resource/en/errata_sheet/cd00238166.pdf
> This issue occurs randomly.
> occurs randomly.
> randomly.
Желаю побольше багов в отладке..
У Wiznet W7500 тоже есть бага с IIC - зажевывает одинаковые байты. Сам производитель рекомендует использовать программную реализацию IIC.
Мне удалось его запустить и потом не разбирая отложил всё в сторону. На следующий день он уже не запустился. С этих дисплейчиков можно считать какие-нибудь данные, чтобы понять что там с ним внутри происходит?
Такой вот тупой быдлокод, пропитанный насквозь индусами и их стилем программирования подает признаки жизни.
Здесь нет никакого буфера захваченного спама, как захвачен байт через SPI- сразу шлем через VCP. То что что-то теряется - поебать. Оно уже подает признаки жизни, дальше тюнинг всего этого.
0x15 (0x2A) - это и есть сам слейв на STM42F429, который косит под память 24_02 (256 байт).
Походу ACK некорректно захватывается - идет задержка на цикл обмена. Делать сдвиг на 1 такт? Может и получится, надо только мозги для укрощения CPLD.
Да ты же сам капитанящий школодебил. Эррату я и сам могу посмотреть. Я хотел послушать реальные кулстори от анонов.
http://we.easyelectronics.ru/khomin/i2c-programmnyy-stm32.html
Если кратко - сам в соответствии с протоколом выключаешь-выключаешь выходной транзистор (включая - получаешь 0 на линии, отключая - получаешь 1 на линии). Например для условия СТАРТ SCL должен быть отключен (те 1 на линии) и включить выходной транзистор на линии SDA - притянется к 0. Если же отпустишь SDA - будет СТОП. Потом включаешь выходной транзистор на линии SCL - она притягивается к 0. Все, сигнал СТАРТ выдан и шина условно захвачена. Выход типа Push-Pull нельзя использовать, только OpenDrain.
>>349850
Реальные кулстори только в гугле и тематических форумах типа electronix.ru . Школота - это ты, тк в еррате написано - может ёбнуть в любой момент. Может сразу, может через час, может через пару калобайт, может вообще не проявиться. Баг описан, известен и подтвержден производителем, пробуй. Никто не запрещает, но предупреждают что возможен BSDM. Сам запилишь кулстори как перекопипастил программный IIC. Впервые с ним столкнулся на F103ZC и DS2482-100
Братишка, ты отвечаешь на вопросы, но не на те, что я задаю.
Я спрашивал как это всё делать на встроенном I2C.
Ответ на определение стоп старта прост - запрограммировать логику. А на ACK/NAK так же в ручную не ответить.
Ты мне ответил как это делать с твоими девайсами.
Я спрашивал как прижимать SCL к нулю, в контексте действующего ресива/трансмита, ты мне ответил как вообще в принципе прижать. Ну ты понял.
Про флаги в CR я в курсе, но там не очевидно как этим пользоваться. Нужен пример из кьюба например, но охуительные ребята из STM не могут добавить примеры, которые конвертировались бы в их собственную IDE
Сейчас особо некогда пилить железку или быдлокодить - хотя на первый взгляд там мелочь осталась - кольцевой буфер вклеить. Fail. Пришла платка и могу 407 попробовать запустить и на работе иногда работать надо.
Задам вопрос проще - нарисуй сигналы на шине и явно отметь моменты когда хочешь делать гадости. Рисовать максимально подробно, что бы были видны каждый такт шины и фронты + свои камменты - какую гадость хочешь сделать в данный отмеченный момент. Если собрался делать гадости прямо посреди передачи байта - без адовых костылей ничего не выйден.
Я хотел решать, когда мне отвечать на ак/нак мастеру, беря это знание у слейва.
Полагаю, это считается прямо посреди передачи байта. Жеппа.
Самое тупое, что не могу до сих пор завести аппаратный I2C в Slave-режиме вообще. Ни на готовых Cube-примерах только что сообразил как их запустить в трустудио, ни просто написав код. Всё равно получается какая-то срака.
Илья, залогинься.
> Я спрашивал как это всё делать на встроенном I2C.
> Ответ на определение стоп старта прост - запрограммировать логику.
Нет. Нет. Нет. Просто START и STOP на линии блоком IIC не поймаешь. Бит START устанавливается только если твой блок IIC, настроенный в режиме слейва (увидел старт) И (увидел свой адрес на шине), после чего битом ACK или говоришь что я тут или шлешь NACK мастера. Аналогично со СТОПом - только если твой слейв понял что с ним общение УЖЕ ведется, тогда он распознает сигнал СТОП на шине и установит бит STOPF и ТЕБЕ надо будет подтвердить стоп. Аналогично с растяжкой/остановкой обмена на тупняк - он и так есть "stretches SCL low" если сильно не менял настойки - пока тупишь, твой аппаратный блок IIC держит SCL в нуле, говоря - помедленней, я записываю, думаю и туплю.
Очень внимательно посмотри на картинки на 846-847 странице.
> А на ACK/NAK так же в ручную не ответить.
Жопой читаешь.. или не понимаю вопроса. Бит ACK.
> Ты мне ответил как это делать с твоими девайсами.
Снова жопой читал - они только ДЛЯ ЗАХВАТА. На обмен они не влияют, а то что в посте >>349831 виден в самом верху ответ 0x15 (0x2A) - это отвечает слейв на встроенном в STM32F429 IIC из блока I2C3 - видна независимая и одновременная работа захвата и слейва на одной железке.
По поводу внешних костылей - покажи как захватывать данные с IIC шины, ИГНОРИРУЯ адрес назначения? Можешь обоссать и сказать заведу в SPI - допустим. Только вот у тебя 9-ти битовые посылки, а SPI умеет 8 или 16 бит. Ну принял 8 бит, а дальше? Ушел в прерывание чтобы сбросить настойки модуля SPI и перезагрузить его для стирания огрызка из 1-го бита ? Ну изъебнулся, сделал. Как условия Старт-Стоп на шине ловить ? Прерывание на SDA вешать и при передаче 0x55 или 0xAA каждые 2(1) такта шины уходить в прерывания?
> Я спрашивал как прижимать SCL к нулю, в контексте действующего ресива/трансмита, ты мне ответил как вообще в принципе прижать.
Еще раз - бит ACK.
> Я хотел решать, когда мне отвечать на ак/нак мастеру, беря это знание у слейва.
Еще раз - бит ACK.
> Полагаю, это считается прямо посреди передачи байта.
Жеппа. Да, тк никто среди передачи байта такую хуйню не делает. Пробовал думать - можно таймером считать такты и после нужного такта через DMA записать в BSSR (не проверял) 1 чтобы прижать SCL к нулю, остановив обмен. Еще раз - ты ебанулся посреди (именно посреди, а не после) передачи байта обмен останавливать ? Прямая дорога повесить шину, введя в ступор настоящих аппаратных слейвов.
> Самое тупое, что не могу до сих пор завести аппаратный I2C в Slave-режиме вообще.
Тоже немного думал гадал что не так, ни ответа, ни привета. Перебор шин, настоек - мимо. Потом понял что туплю и... Ответ прост и повыше.
Такое ощущение что от возможностей отладчика шараешься как от огня и понятия не имеешь как его запускать и пошагово выполнять программу. Можешь обдристать, с openocd не работал, только шкодинг и дебаггинг через Keil.
Прости меня грешного Может это попробуешь попилить https://habr.com/post/357918/ ? Как всегда все упрется в скорость, ты же не говоришь чем управляешь. Может ядерным реактором/андронный коллайдером где критичны задержки или время с часов читаешь. Может у тебя там бегущая строка и по хуй что буквы с интервалом в пару раз дольше будут обновляться.
Но и тут проблемка - будешь видеть трафик только до себя, пролетающий мимо спам не виден, а это условие есть в ТЗ...
Илья, залогинься.
> Я спрашивал как это всё делать на встроенном I2C.
> Ответ на определение стоп старта прост - запрограммировать логику.
Нет. Нет. Нет. Просто START и STOP на линии блоком IIC не поймаешь. Бит START устанавливается только если твой блок IIC, настроенный в режиме слейва (увидел старт) И (увидел свой адрес на шине), после чего битом ACK или говоришь что я тут или шлешь NACK мастера. Аналогично со СТОПом - только если твой слейв понял что с ним общение УЖЕ ведется, тогда он распознает сигнал СТОП на шине и установит бит STOPF и ТЕБЕ надо будет подтвердить стоп. Аналогично с растяжкой/остановкой обмена на тупняк - он и так есть "stretches SCL low" если сильно не менял настойки - пока тупишь, твой аппаратный блок IIC держит SCL в нуле, говоря - помедленней, я записываю, думаю и туплю.
Очень внимательно посмотри на картинки на 846-847 странице.
> А на ACK/NAK так же в ручную не ответить.
Жопой читаешь.. или не понимаю вопроса. Бит ACK.
> Ты мне ответил как это делать с твоими девайсами.
Снова жопой читал - они только ДЛЯ ЗАХВАТА. На обмен они не влияют, а то что в посте >>349831 виден в самом верху ответ 0x15 (0x2A) - это отвечает слейв на встроенном в STM32F429 IIC из блока I2C3 - видна независимая и одновременная работа захвата и слейва на одной железке.
По поводу внешних костылей - покажи как захватывать данные с IIC шины, ИГНОРИРУЯ адрес назначения? Можешь обоссать и сказать заведу в SPI - допустим. Только вот у тебя 9-ти битовые посылки, а SPI умеет 8 или 16 бит. Ну принял 8 бит, а дальше? Ушел в прерывание чтобы сбросить настойки модуля SPI и перезагрузить его для стирания огрызка из 1-го бита ? Ну изъебнулся, сделал. Как условия Старт-Стоп на шине ловить ? Прерывание на SDA вешать и при передаче 0x55 или 0xAA каждые 2(1) такта шины уходить в прерывания?
> Я спрашивал как прижимать SCL к нулю, в контексте действующего ресива/трансмита, ты мне ответил как вообще в принципе прижать.
Еще раз - бит ACK.
> Я хотел решать, когда мне отвечать на ак/нак мастеру, беря это знание у слейва.
Еще раз - бит ACK.
> Полагаю, это считается прямо посреди передачи байта.
Жеппа. Да, тк никто среди передачи байта такую хуйню не делает. Пробовал думать - можно таймером считать такты и после нужного такта через DMA записать в BSSR (не проверял) 1 чтобы прижать SCL к нулю, остановив обмен. Еще раз - ты ебанулся посреди (именно посреди, а не после) передачи байта обмен останавливать ? Прямая дорога повесить шину, введя в ступор настоящих аппаратных слейвов.
> Самое тупое, что не могу до сих пор завести аппаратный I2C в Slave-режиме вообще.
Тоже немного думал гадал что не так, ни ответа, ни привета. Перебор шин, настоек - мимо. Потом понял что туплю и... Ответ прост и повыше.
Такое ощущение что от возможностей отладчика шараешься как от огня и понятия не имеешь как его запускать и пошагово выполнять программу. Можешь обдристать, с openocd не работал, только шкодинг и дебаггинг через Keil.
Прости меня грешного Может это попробуешь попилить https://habr.com/post/357918/ ? Как всегда все упрется в скорость, ты же не говоришь чем управляешь. Может ядерным реактором/андронный коллайдером где критичны задержки или время с часов читаешь. Может у тебя там бегущая строка и по хуй что буквы с интервалом в пару раз дольше будут обновляться.
Но и тут проблемка - будешь видеть трафик только до себя, пролетающий мимо спам не виден, а это условие есть в ТЗ...
https://pastebin.com/fZS79ui5
>NVIC_EnableIRQ(USART2_IRQn); // Пока прерывания не использую, но пусть будет
А в дефолтном обработчике прерывания бесконечный цикл. Придет на вход байт - все повиснет.
>SystemInit();
Эта функция вообще-то вызывается из startup-а, перед main-ом.
>void delay (uint32_t time){
>uint32_t i;
И эта задержка без volatile может сломаться в любой момент, особенно при включении оптимизации.
Ничего конкретно подсказать не могу, т.к. STM-ами не занимаюсь. Но ты попробуй вместо "зажечь светодиод просто так" не зажигать, а инвертировать, чтобы мигал, тогда будет видно зависло оно или нет.
Поправил цикл.
while(1) {
GPIOA->ODR = GPIO_ODR_5;
delay(300000);
if ((GPIOC->IDR & GPIO_IDR_13) == 0) {
delay(1000);//задержка в 1000 чего-то там
USART2_Send ('1');//отправить символ
}
}
Светодиод мигает. Ради эксперимента отправил на плату единицу через терминал, не зависла, продолжала мигать. Говорит ли это о том, что уарт вообще не запустился? Может я проебался где с настройкой. Но, NVIC_EnableIRQ все же закомментировал, на всякий случай. Почему же тогда в отладке, регистр TDR все же принимал значение?
Этот антон >>350212 прав
> >NVIC_EnableIRQ(USART2_IRQn); // Пока прерывания не использую, но пусть будет
> А в дефолтном обработчике прерывания бесконечный цикл. Придет на вход байт - все повиснет.
Дописал бы для вида затычку void USART2_IRQHandler(void) {unsigned short tmp; tmp = USART2->RDR;};
Это первый косяк - закомменти прерывание пока не раскуришь референс -> USART2->CR1 |= USART_CR1_RXNEIE;
Второй косяк - при BRR 0xEA6 скорость 2135 бод, при 0x3A8 - 8556 бод (по анализатору).
Третий косяк - "Подтяжка 13 ножки PС к Vcc" и "if ((GPIOC->IDR & GPIO_IDR_13) == 0)" - без подачи 0 или земли на PC13 не войдешь в цикл. Проверял на STM32F3-Discovery (STM32F303VC)
Поздравляю, у тебя походу хуита творится. Или быдлокод, или плата не але или еще что(сторожевого пса завел?)..
Светодиод мигать НЕ БУДЕТ.. ты постоянно пишешь одно и то же значение в порт. Как он зажегся, так и будет гореть.
Возможно вакаба съела символ исключающего ИЛИ - "^" - если он есть в этой строке "GPIOA->ODR = GPIO_ODR_5;" перед знаком присвоения, тогда да, будет мигать. у меня с частотой 3.33 Гц по анализатору.
>закомменти прерывание пока не раскуришь референс
Закомментил, хотя мк не зависал, когда я отправлял ему что-либо, складывается впечатление, что уарт не поднялся, не отправляет, не принимает. Все глухо.>>350215
>при BRR 0xEA6 скорость 2135 бод
Я считал по: USART_BRR = (fck + baudrate /2 ) / baudrate, где fck - частота шины APB1. В эту формулу я подставил 36мгц - максимальную частоту шины. Какая частота там в реальности, я не знаю, поскольку мк работает от внутренней цепочки, с дефолтными делителями. Думал заняться настройками, когда распаяю внешний кварц. Может тут и проеб.>>350215
>без подачи 0 или земли на PC13 не войдешь в цикл
На Nucleo пользовательская кнопка включена по схеме.
>>350216
>(сторожевого пса завел?)..
Он нужен мне на данном этапе? Если да, то объясни, интересно.
>Возможно вакаба съела символ исключающего ИЛИ
Yep.
> хотя мк не зависал, когда я отправлял ему что-либо, складывается впечатление, что уарт не поднялся, не отправляет, не принимает.
Давай с начала. Через что подключил UART к компу? К выводам 2,3,5 компорта? Через USB-UART преобразователь? Как соединял выводы ? RX-RX TX-TX или RX-TX TX-RX? Землю не забыл?
У ЮАРТа нет подтверждения доставки или получения.
> Я считал по:
Если 9600 поделить на 2135, то получишь 4.5, и поделив 36 на 4.5 получаем.. получаем.. 8МГц.. Прямо частота HSI. Вот это поворот. Намек понял? Попробуй BRR около 0x341 - должно быть около 9600 бод.
>Через что подключил UART к компу?
FT232RL, TX-RX RX-TX, земли объединялхотя и мк и USB-UART подключены к одному источнику.
Смотрел через Saleae, мк на уарт ничего не выдает.
BRR пересчитывал на 8мгц, да, там 0х341.
Сейчас на pastebin код с крайними правками. Не работает.
Может в инструкцию(схему) заглянешь ?
Через какую задницу подключился к PA2 и PA3? На пердуиновские выводы они НЕ подключены, а идут на отладчик.
Тебе повезло если выводы не попалил, что очень реально. Сам переведешь текст на скинах из документации? Код то у тебя рабочий, а вот в схеме куча ошибок.
Блять, кто бы мог подумать?! Действительно, на ст-линк вывели, а я к ST morpho подключал. Забавно, в бумажном буклетике, что с платой шел, об этом ничего не сказано. Работает. Спасибо за помощь всем кто отвечал. Как опять проблемы появятся, я сюда вернусь. Короче, всем спасибо, всем по пирожку!
На первый взгляд - просто забить хуй. Даже в серийных железках народ не боится пускать "SerDes interface includes a 1.25 Gbaud data signal with a 625 MHz clock." через обычные штыри на 2.54мм и 2.0мм.
Если не сильно забивать - посмотреть хотя бы начало правой книги - волновое сопротивление и как оно зависит от ширины проводника, высоты подъема, расстояния между ними. Подобрать соотношения для импеданса 90 ом и спокойно спать.
Спасибо, анон.
Я и вижу, что все вроде не заморачиваются с разводкой юсб, но несколько раз сталкивался, что некоторые устройства не работают с кабелями, с которыми больше ни у чего нет проблем.
Школотрон, ты где? Запилил слейва?
Впилил кольцевой буфер. CDC давится потоком говна, пропуская 2 или 3 байта. Впилил адовый костыль-задержку, что не очень то хорошо, но выдает все говно без зажевывания байтов. По идее все. Концептуальная модель на 100 КГц завелась и подает признаки жизни. Нет, не все - можно прикола ради запилить правку памяти слейва через компорт.
Пикрил 1 (dump0) - слева виртуальный компорт, справа склейка из 3 окон терминала. Как видишь - захват работает и ему поебать к кому обращение идет. Пишет всех, все и вся, проебывая бит ACK (не занимался этим, поэтому "+" от фонаря стоит). Реальные слейвы IIC - 0x50, 0x57,0x41. Слейв на STM32F4 - 0x15, который косит под память 24__02 (256 байт), которая после старта забита нулями и командами i2cset заполняется вполне осмысленным текстом и читается обратно.
Пикрил 2 (dump1) - как выглядит внутри собранный дамп с шины (с багом и с отключенной отправкой в компорт здесь и на dump2) - 0100 - старт, С0хх - Адрес, 0300 - стоп.
Пикрил 3 (dump2) - первые 4 шорта - это команда записи в EEPROM по адресу 0х50 байта 0х50, оставшиеся - захваченный обмен с шины при чтении содержимого настоящего слейва (памяти) с адресом 0x50 блоками по 32 байта (особенность i2cdump c режимом "i" - i2c block data).
Тут дольше всего идет преобразование байтов + отправка по виртуальному порту. Захваченный поток говна можно и на самом STM пофильтровать между 0100 и 0300 (старт и стоп на шине) и слать только нужное для большего риалтайма или готовить больший буфер отправки и не по одному байту слать, а по несколько или вообще все что было между состояниями 0100 и 0200 (старт-повторный старт) и 0200(0100) - 0300 (повторный старт(старт)-стоп).
Прошло 9 дней тишины. Школьник или познал дзен шкодинга или клал большой болт на затею-реализацию или его душа таки улетела на небеса... R.I.P. школота. Скучно без траллинга.
USB CDC как оказалось не совсем отборное, костыльное и вонючее дерьмецо или говнокод из кубика все хорошо скрывает.
Смотри кубовские примеры, спл нахой выбросить вместо него взять лл. Спл списан в утиль истории, его замена как раз лл.
Возьми готовый пример с сайта ST. Если примера нет, то возьми код от какой-нибудь радиолюбительской поделки. Все, тут делать нечего.
>с помощью библиотеки SPL
Такая формулировка не запрещает дополнительно пользоваться еще какими-нибудь библиотеками. Можно взять весь код на LL или HAL и сбоку приделать что-нибудь на SPL.
>в среде Keil
Надеюсь ты понимаешь, что все компиляторы следуют стандарту и практически нет разницы каким компилятором пользоваться?
Вот погуглил немного за тебя. https://www.st.com/en/embedded-software/stsw-stm32046.html Когда-то сам на этом в институте делал, еще никаких кубов тогда не было.
Достаточно было в гугле задать период с 2000 по 2010 год, сайт st.com и тогда по "usb library" оно находится в первой строке. Там же готовый кейловский проект, тебе вообще ничего делать не нужно было.
Ленивый пидорас ты, а не студень. Мне преподы ни разу не отказали, если я приходил и говорил, что технология списана, давайте я возьму более новое решение.
Будто есть разница на чем учиться. Все равно, если он пойдет работать по специальности (что сомнительно), то не факт что будет касаться микроконтроллеров вообще. А даже если и будет, то не факт что STM32.
И если я правильно помню, то библиотека >>351793 не использует SPL, там только CMSIS. SPL там в примерах только для настройки портов, тактирования и прочего. В SPL, если я правильно помню, нет ничего связанного с USB.
Есть хуйнюшка как на первом пике. К ней возможно ардуину цепануть? Дабы ебашить асинхронное устройство.
Сразу CMSIS херли мелочиться
Я вот, кстати, уже не в первый раз встречаю нарекания на серию f1 и рассказы о том, что её особо не поддерживают. Какую серию тогда взять взамен, чтобы близко по фичам и производительности?
Кто бы его знал. При взгляде со стороны F2=F4, особняком F373 - для любителей анальных утех с 16 битными сигма-дельта АЦП. Когда-то работал в связи реально днище - знать надо дохуя, получаешь нихуя и были попытки воссоздать клон Netagent CP504B (верхняя левая). У "конкурентов" (нижняя центральная) SNR ERD 3.2 - atmega644+enc28j60, более новая версия на stm32f407 https://nag.ru/user/notes/25598/kak-rojdayutsya-erd-pro-mini-fotki-.html . У нас же (только для внутренних нужд) - железки на stm32f107 (центральная вверху) и на Wiznet W7500P (это и cortex-m0 и phy в одной микросхемке). Умерло после первых тестов и ухода из той помойки.
Тупо шарясь по алиэкспрессу в происках плат с 2хCAN и 2xRS485 - нашлись только на stm32f407. Так вот и делался выбор - на чем can (до)изучать + в даташитах есть пара страничек про совместимость между сериями (как минимум F1-F2-F4) - где и что предусмотреть на плате для установки конкретной серии. Если надоели баги одной серии, можно заменить на другую.
Если не работаешь с аналогом и точными измерениями - бери любой, хоть F2, хоть F4.
Так и должно быть с этим китайским клоном или я что-то не так делаю.
Такой набор и всё нормально, и на ф103 и на ф407. Дело скорее всего в прокладке между клавиатурой и монитором.
> Дело скорее всего в прокладке между клавиатурой и монитором.
И какое может быть дело?
Установил куб, TrueStudio, stm32 utility. Дровишки встали при установке студии.
При первом подключении студия обновила прошивку свистка.
stm32 utility также видит свисток.
stm32ldiscovery в которую встроен стлинк работает корректно.
Если обновился, значит китайским остался только bootloader. Сомневаюсь что bootloader может оказывать такой эффект, хотя все возможно. Схема тем более не будет так влиять, она по идее везде практически одинаковая, за исключением разъемов и согласования уровней.
Ну и лучше было брать J-Link.
С некоторыми ограничениями "штатный" st-link перешивается под j-link.
http://we.easyelectronics.ru/STM32/chudesnoe-prevraschenie-st-link-v-j-link.html
Собственно взял Nucleo 303, пошел курить погромирование этого чуда. И тут я прихуел, везде всё равное, кто-то под HAL, кто под SPL, кто с регистрами напрямую работает. В ру-сегменте адекватных уроков/учебников нет.
Наткнулся тут на MBED, довольно интересно в плане, что не надо читать мануалы на 2к страниц чтобы помигать светодиодом (привет ардуине). Суть вопроса - есть какие-то ресурсы русскоязычные по MBED? По STM вообще ресурсов негусто, видимо специфика что МК скорее проф. уровня накладывает свое говно на вентилятор и никто не хочет делиться опытом разработок (которые скорее всего продают, в отличие от ардуиновских).
Задрачивай HAL и не обращай внимания на кукаретиков требующих вникания в букву даташита и кодинга регистров. Потом, когда отдуплишь, что к чему, переходи уже на LL
Ищи на ютубе канал narod stream, ставь кубик и truestudio и бахай на хале. После генерации кубом мигать диодом можно одной строчкой.
Вся фигня в том, что надо же сгенерить еще, а чтобы генерить надо все эти регистры, тактирование и прочее знать еще лучше чем в случае с ручным написанием.
Да, буду кукарекать - Reference Manual наше все. Те же сраные параметры функций настойки где брать будешь?
Взять тот же кусок инициализации RCC
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 120;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 5;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
или I2C
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 132;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
Что за поеботина написана справа после знака равно? Где список всех значений смотреть? Список сочетаемых и непротиворечивых значений?
Или то же ссаное GPIO
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
Здесь только с ходу видно что только 13 и 14 вывод настраивается. Остальное- неведомая хуита, которая смотрится с расшифровкой в том же RM. Думаешь совсем ньюфаг поймет что тут написано?
С простой периферией - ничего не знаю, CMSIS наше все, для USB и Ethernet - не выебывался, использовал то говно, которое дают в кубике.
Reference Manual однозначно надо читать. Просто тупо несколько раз прочитать раздел не особо вникая, хоть что-то да запомнишь что видел что-то похожее в описании регистров, а не гадать что это за поебень тут написана.
Школотрон - можешь подглядеть настойки IIC.
>>352796
Частично согласен. Знать периферию надо ВСЕГДА, а это чтение RM чуть чаще, чем постоянно.
Когда знаешь как все работаешь - тебе без разницы на чем писать - что HAL, что SPL, что CMSIS. На CMSIS может даже проще будет делать прямые обращения, чем искать тормозные библиотечные функции с кучей проверок, а всякая логика типа for; while; if живет сама по себе.
GPIOC->BSRR = GPIO_BRR_BR3; вывести в линию PC3 лог1
GPIOC->BSRR = GPIO_BSRR_BR8; вывести в линию PC8 лог0
Неужели это какие-то страшные заклинания?
Да, буду кукарекать - Reference Manual наше все. Те же сраные параметры функций настойки где брать будешь?
Взять тот же кусок инициализации RCC
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = 120;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 5;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
или I2C
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 132;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
Что за поеботина написана справа после знака равно? Где список всех значений смотреть? Список сочетаемых и непротиворечивых значений?
Или то же ссаное GPIO
GPIO_InitStruct.Pin = GPIO_PIN_13|GPIO_PIN_14;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
Здесь только с ходу видно что только 13 и 14 вывод настраивается. Остальное- неведомая хуита, которая смотрится с расшифровкой в том же RM. Думаешь совсем ньюфаг поймет что тут написано?
С простой периферией - ничего не знаю, CMSIS наше все, для USB и Ethernet - не выебывался, использовал то говно, которое дают в кубике.
Reference Manual однозначно надо читать. Просто тупо несколько раз прочитать раздел не особо вникая, хоть что-то да запомнишь что видел что-то похожее в описании регистров, а не гадать что это за поебень тут написана.
Школотрон - можешь подглядеть настойки IIC.
>>352796
Частично согласен. Знать периферию надо ВСЕГДА, а это чтение RM чуть чаще, чем постоянно.
Когда знаешь как все работаешь - тебе без разницы на чем писать - что HAL, что SPL, что CMSIS. На CMSIS может даже проще будет делать прямые обращения, чем искать тормозные библиотечные функции с кучей проверок, а всякая логика типа for; while; if живет сама по себе.
GPIOC->BSRR = GPIO_BRR_BR3; вывести в линию PC3 лог1
GPIOC->BSRR = GPIO_BSRR_BR8; вывести в линию PC8 лог0
Неужели это какие-то страшные заклинания?
> Вся фигня в том, что надо же завести двигатель еще, а чтобы автозапуском пользоваться надо все эти степени сжатия, цикл Карно, механику движения поршней и прочее знать еще лучше чем в случае с ручным поворотом ключа.
Ясно.
За меня это говно пишет куб, и меняет он же. Прежде чем пиздеть, покажи свой код чтения-записи файлов с длинными именами в FAT на цмсис, папаша. Поговорим за хал после этого.
Лол, порвался. CMSIS - это управление периферией, а не логикой, которой является твой высер про FAT. Максимум что увидишь - это чтение/запись блоков на flash/sd карту, сама же логика работы FAT - независима и можно хоть на 8051 запустить.
Неуместное сравнение. Это ты скорее для ардуинки описал.
Тут ближе будет завести двигатель на самолете типа боинга 737
То есть проверить состояние аккумов, включить питание, подключить шину переменного тока, запустить топливные насосы (не один а дохуя, каждый отдельный тумблер), ВСУ, генератор ВСУ, воздухоподачу, etc...
Так-то никто не говорил, что использование хал освобождает от чтения рефмана, и особенно от доки о самом хале. Кубик просто генератор, но этот генератор сильно облегчает процесс создания инициализации. Я когда начинал, буквально за пару часов разобрался с кубом по ютубам, и впоследствии стал им пользоваться.
Все эти типы которые топят за цмсис в массе своей дальше мигания диодом не ушли, зато цмсисом помигали, ага. Без USB, Ethernet и SD-карты домашние проекты, за редким исключением - мертворождённое говно, и то с чем цмсис-пердолик будет ебаться неделями, на хале пишется за несколько дней. Однако строитель сарая будет смеяться над башенным краном, типа смотрите какие лохи, молотка не держали, ровно до тех пор, пока он строит сараи, потом же
>>352791
>для USB и Ethernet - не выебывался, использовал то говно, которое дают в кубике.
Вот и весь его боевой задор. Любители цмсис - лицемерные пидоры.
>Ethernet
Делал без всяких халов, только не на STM32. Ничего такого сложного в этом нет.
>SD-карты
Когда-то делал на ассемблере чтение и запись секторов. Не для практических целей конечно, а для тренировки и изучения. Тот анон все правильно пишет >>352804 Там по части взаимодействия с периферией микроконтроллера достаточно сделать только инициализацию, чтение и запись секторов карты, все остальное есть в FatFs и прочих. Это всего лишь несколько команд, ничего сложного.
Способ настройки периферии вообще не столь существенен, это ведь обычно совсем небольшая часть программы получается.
Именно. Претензии к хал начинаются когда открывается файл сгенерированный кубом, хотя хал и куб никак не связаны. В библиотечных файлах функции названы корректно, что называется самодокументируемо, сопровождены описанием и принимаемыми/возвращаемыми значениями, что куда лучше записей цмсис. Никто не запрещает для повышения быстродействия использовать в критических секциях цмсис или ассемблер, это необходимо для серийных устройств, но видимо цмсис юзеру кажется что это элитный клуб.
Tl;dr новичку и доморощенному эмбеду куб, хал и лл подойдут больше чем цмсис, профессионал в советах не нуждается.
>лл
Ты точно видел LL?
LL это набор функций, в основном только распихивающих поля из структур по регистрам в нужном порядке. Для использования LL или SPL нужно знать назначения битов в регистрах, точно так же, как для использования CMSIS. Преимущество LL только в том, что снижается вероятность ошибки.
Поэтому противопоставлять LL и CMSIS это как-то очень странно. Просто невозможно научиться использовать LL и при этом не научиться использовать CMSIS.
Более того, если использовать LL без HAL, то для управления SysTick, NVIC и MPU, по любому придется использовать функции из CMSIS.
Видел, даже i2c -> uart на 103 поднимал, в связке LL + RTOS, генерация полностью кубом, иде - трустудио. Цмсис проект был такой же, только без ртос и в вижуалгдб. Хал однозначно понравился больше, но для оптимизации программ и направления развития, лл после хал выглядит прекрасно.
Имеется в виду в ракурсе работы/карьеры
Впаривать девборды лошарам
Народ, а как вы организовываете свои проекты? Git обязательно использовать или легче копировать папки?
Лучше иметь какой нибудь контроль версий. Геморроя меньше и в принципе как-то удобнее
Конечно, используем.
1. Сохраняется прогресс.
2. Можно откатиться если понял что за день хуйню наделал.
3. Если не стыдно то можно подрочить лайки на гитгабе
У git команды наркоманские, возьми лучше hg.
Файловая система не нужна. Требуется чтение и запись блоков.
Что-то я туповат для реализации этого с нуля.
Инициализацию сделать получилось.
Но при записи блока размером 512 байт, все значения 0хАА и последующем чтении этого блока, получаю какую-то херню.
Идут 7 байт как положено 0хАА, а восьмой мусор, дальше все повторяется до конца считанного блока.
Поставил подтяжку к + и все заработало. Странно.
А они там разве есть?
Там есть возможность подключить библиотеку для фат, но без реализации доступа к карте по spi или sdio ничего не будет работать
Тут например для F4. %USERPROFILE%\STM32Cube\Repository\STM32Cube_FW_F4_V1.23.0\Projects\STM32F4-Discovery\Applications\FatFs\FatFs_USBDisk
> своей дискавери.
Какой, что за контроллер?
> думаю таки немного подучить клятый Си
Зачем это тебе если плата пять лет валялась?
>что за контроллер?
429ZIT
>Зачем
Для общего развития. Может я на пенсии в кодеры-эмбеддеры хочу податься. Кек.
Да, с недавних пор тут модератор совершенно ебанутый и похоже в радиотехнике совершенно не разбирается.
Напиши вопрос еще раз, может не удалит (можешь еще в /d/ продублировать). Для ЦОС кортексы не особо подходят, весьма вероятно что ты собрался делать ерунду.
Если не подходит, то что именно гуглить? Раньше тут писали что STM32 самое то для вката в DSP. Нужна простейшая железяка, в которую я бы смог грузить короткие импульсы в WAV, чтобы сделать кроссовер со своими настройками для АС.
Ну так-то ЦОС можно делать на абсолютно любом микроконтроллере, вопрос только в требуемом быстродействии.
Но я не понимаю твой вопрос.
>грузить короткие импульсы в WAV
Что это значит? Ты хочешь сделать КИХ фильтр, импульсную характеристику которого называешь "короткими импульсами"? Если так, то все зависит от частоты дискретизации и порядка фильтра.
>сделать кроссовер
Но зачем для этого ЦОС?
Чтобы вместе с кросовером можно было вхардкодить эквализацию, и всё это вбить в один короткий импульс. а точнее по импульсу на каждый из динамиков, в типичной стереосистеме этих динамиков 4 штуки. Частота дискретизации? Ну не знаю, по идее 96кгц хватило бы, лично мне по крайней мере точно.
Мне надо понять что именно гуглить для этого, я не очень въезжаю.
В любом случае кажись я понял куда копать, в сторону эмуляции гитарных кабинетов, там эта тема будет нормально раскрыта, т.к там в обязательном порядке в результате процесса звукозаписи формируется импульс для конволюции.
Не слушай этого дебила. Ставь system workbench for stm32 и stm32cubemx. Последний генерирует код для первого, периферия тупо кнопками настраивается. В настройках генерации выбирай SW4STM32 IDE, генерируй, дальше уже код меняй, и дрочи HAL.
Можешь написать то же но на русском или на английском, а то ничего не понятно.
>один короткий импульс.
>импульс для конволюции
О чем ты вообще? Открой любой учебник по ЦОС - там не будет таких терминов.
>что именно гуглить для этого, я не очень въезжаю.
Естественно, для начала терминологию изучи.
>в сторону эмуляции гитарных кабинетов
Можешь сколько угодно копать, но от этого STM32 не станут лучше подходить для ЦОС.
Ты, видимо, промазал. Все так и делаю, только в тру студио, он новее и лучше чем воркбенч.
Дай ссылку, а? Хочется вкатиться, а создание первичного кода было год назад через задницу и ничего с пинка не работало.
Открываешь две вкладки в браузере, в одной набираешь в гугле Atollic TrueStudio, в другой STM32CubeMX. Обучалка есть в ютубе на канале NordicEnergy.
Только на канале narod stream. Там с халом и нуклео, для вката самое то.
Это не нужно, есть J-Link.
А в чем проблема? Принцип тот же самый что при использовании OpenOCD или других GDB-серверов.
Мне понадобился встроенный UART и я перепрошил свой ST-link в него. И внезапно осознал, что не знаю, как прикрутить это к Кейлу.
Наверное к кейлу по нормальному действительно сложно приделать сторонний программатор/отладчик.
С программированием проблем не должно быть, достаточно лишь использовать "Use External Tool for Flash Programming". http://www.keil.com/support/man/docs/uv4/uv4_fl_usingflashmenu.htm
А с отладкой наверное никак, кейл вроде как не умеет работать с gdb. Большинство IDE нормально работают с gdb, но тебя угораздило выбрать кейл.
>понадобился встроенный UART
Наверное ты и так знаешь, но на всякий случай напишу. Отладочную информацию можно выводить с простым ST-Link через SWO.
>Отладочную информацию можно выводить с простым ST-Link через SWO.
Там только в одном направлении, а я хочу как в ардуине, чтобы и туда послать можно было. Приходится подключать дополнительный UART-USB.
>Большинство IDE нормально работают с gdb
На какой-нибудь atollic truestudio это натягивается?
не знаю как в nucleo, сам регулярно юзаю discovery stm32f723, то у неё прокидан виртуальный ком порт через st-link (как архуины)
>nucleo
У меня 2 Blue Pill вставленные в бредборд. Одна из них в роли отладчика :з Покупать стшные платы жаба душит.
>atollic truestudio
Это обыкновенный эклипс с плагинами. Как использовать этот отладчик с эклипсом вполне находится гуглом.
Гитом создаёшь локальный репозиторий, или клонируешь его в папку. Потом в эту папку генерируешь кубом проект трустудио, и открываешь. Если репо подцепился, то в трустудио рядом с названием в project explorer (список проектов слева) рядом с названием появится [твойгитрепо] и становятся доступны действия из пкм->Team. Хотя GitKraken по-прежнему удобнее, чем из трустудио.
>>354976
Только правильнее будет написать, что для эклипса есть плагин EGit, который по умолчанию установлен в этой студии. Этот плагин можно установить в любом поделии на эклипсе. Причем установка плагинов через marketplace аналогична установке дополнений в браузере - открыл каталог, ткнул в нужное и готово.
>Как использовать этот отладчик с эклипсом вполне находится гуглом
Ну если бы я нашел в гугле, я бы не полез сюда. Можно ссылочку. С меня большое спасибо.
Я уже был по этим ссылкам и ничего не понял. Но все равно спасибо, пойду раскуривать это дальше.
>ничего не понял.
Я тоже все это не идеально знаю, но попробую объяснить ничего не напутав. Хотя ты может и так это все знаешь.
GDB - это консольная программа со своими командами, которые можно выучить и отлаживать без IDE. Для отладки, IDE запускает GDB и передает туда команды, аналогично тому, как если бы это делал человек вручную. При использовании GDB-сервера вроде OpenOCD (ST-LINK GDB-server, J-Link GDB Server и прочие) сначала запускается GDB сервер, потом запускается сам GDB, в который передается адрес, порт сервера и elf-файл. При использовании Black Magic Probe вместо адреса сервера задается порт, естественно другой командой.
Соответственно IDE нужно настроить таким образом, чтобы оно не пыталось подключиться к серверу (через TCP) или не пыталось запустить как нативную программу. А все необходимые для подключения команды (порт, elf-файл) передавать либо через опцию командной строки "-ex" либо сохранить в отдельный файл как скрипт и передавать уже его.
Для начала, если ты этого еще не делал, я бы попробовал все эти команды ввести вручную, без IDE. Но лучше возьми J-Link и не пользуйся кривыми поделками.
GDB сервер там работает и даже програмируемый микроконтроллер видно. Осталось понять как заставить Трустудио подключаться к отладчику не по TCP, а через COM порт. В обычном эклипсе это есть, в Трустудио это куда-то упрятано.
>не пользуйся кривыми поделками
если не осилю просто перешью Блюпилл, который отдадчик, обратно в ST-link. Но хочется COM порт в отладчике, чтобы не подключать кучу лишних кабелей.
В чем тогда проблема использовать обычный эклипс?
Либо, если иначе никак, можно попробовать соорудить костыль - скрипт, который подменяет или переопределяет команды для GDB. Вроде как такое проще сделать на питоне посредством gdb-py.
Как-то так https://github.com/in4lio/mdr1986x-JFlash
Да сразу на асме бахай, нахер те этот высокоуровневый си.
https://www.youtube.com/watch?v=VD8OaPyAEtI&index=11&list=PL8OgDYWys_b6XtOjCejd37aVv0ic24jqV
Если я освою все это, то мне этого хватит, чтобы найти работу инженером микропроцессорных систем, или нужно еще что-то? из МК знаю только MCS-51, и вот сейчас стм32 начал ковырять
> ух бля
black magic probe заработал в визуал студии с VisualGDB. Регистры видно, можно рулить светодиодом прямо из отладки. Аж обои от стен отклеиваются. Пойду удалять Эклипс.
Для начала хватит чтобы ваять программы, а остальное зависит от работодателя. Хотя в будущем придется изучать самостоятельно дальше и больше всякие фичи из даташита. Ну и сами уарты-хуярты с прочими интерфейсами читай. Он вроде не объясняет. А в работе нужно знать.
И учти что у него в первом видосе не полностью указывается как создать проект (он это объясняет где-то в 4ом видео или около того) и откуда качать библиотеки ищи в комментариях под нужным видео. Сайт обновился и инструкция в ролике немного не актуальная.
Добра тебе
Ps сам изучал по этим роликам и год с лишним пользуюсь кейлом +stdperiph
>найти работу инженером микропроцессорных систем
ЗАБУДЬ.Будешь сосать последнюю залупу по этому направлению.
Учи лучше Java, будешь получать чуть больше, чем дворник или сантехник из ЖЭК-а.
https://www.rbc.ru/newspaper/2016/07/05/577a08e19a794717070ba97b
"R&D в России — это дешево. Например, китайский software-инженер стоит $150 тыс. в год, это приближается к зарплатам в Калифорнии. Те, кто занимается computer science, — $200–250 тыс. в год. Наши инженеры стоят в разы дешевле."
На пиках мой код. Красным подчеркнул там где обнаруживается косяк - в этом месте возвращаемый переменной ans ответ функции transfer =-1, то есть нет ответа по линии MISO. Смотрел осциллографом - SCK, MOSI - всё ок, то есть команда отсылается, CS тоже вроде всё на месте. Дальше идут тактовые сигналы по SCK - а ответа нет, на MISO остаётся единица. Пробовал на разной скорости - и на 32МГц, и на 250кГц - ничего не меняется, причём новая флешка работала на любой. На MISO у меня включена подтяжка. Что я делаю не так?
Всё, уже разобрался. Вот, выделил то, что пофиксил. После этого всё заработало. Пробовал вообще выпиливать этот кусок - тоже работает, видимо это для каких-то совсем древних флешек предусматривают. Кстати, пробовал ещё втыкать простую флешку (не НС) на 2 Гб. Думал что будет определяться как тип 1, но нет. Определяется как тот же тип 2, только без блочной адресации (номер сектора при доступе нужно умножать на 512). Ещё у меня теперь инициализируется на частоте 250кГц, потом если ок, то переключается на 32МГц. Так, на всякий случай, хотя оно и на 32МГц инициализируется.
>Пикча отклеилась.
Ой, блядь. Всё сразу стало понятно. После просмотра рандомного кода на первых двух и отклеившейся. Ты просто космос, Анон.
Для тех, кто подключал sd флешку вполне должно быть понятно, так как непосредственную работу с интерфейсом тут всегда нужно прописывать ручками. Так что не понимаю твоего подрыва, мог бы просто пройти мимо.
На бумаге H7 интереснее, а на практике?
H-серия не поддерживается многими сторонними штуками вроде micropython , mbed, embedded rust etc, или поддерживается на уровне "быстрый F7". Но это пока что.
https://www.avito.ru/moskva/tovary_dlya_kompyutera/otladochnaya_plata_stm32_f429_discovery_1686029149
https://www.avito.ru/moskva/tovary_dlya_kompyutera/otladochnaya_plata_stm32f407_mcu_discovery_novaya_1311081989
Только там не DISC1, а DISCO (т.е. без mbed)
мопэд не мой, но я себе взял
У меня первая уже пяты год валяется. Все никак не соберусь с духом поковырять. Кек. Еще за 2400 покупал, в 2014
И да, аноны. Ещё одно наблюдение. Библиотека FatFs глючит, если в настройках ИАРа включён уровень оптимизации выше среднего. Уж не знаю чего он там накрутил, разработчик сей библиотеки. Мне пока лень разбираться. Возможно как-нибудь прослежу в отладке, возможно проставить нужно где-то volatile. Пока что допилил их для быстрой загрузки картинок через DMA - как минимум раза в два быстрей стало выводиться на экран.
Есть вообще разница что юзать, ИАР или Кеил? Я пока что у кеила недостаток нашел только в том, что нет "Live watch" в менюхе view
Никогда не юзал кил, поэтому не могу ничего сказать. Мне и божественного ИАРа хватает.
Решил перекатиться с авр на стм, короче вопрос такой - есть у меня самописная либа для управления дисплеями типо 1602 по 4 wire интерфейсу, но она под авр, я хочу ее переделать под стм, но уже в самом начале возникла проблема: у меня либа состоит из файла с самой прогой и файла с расширением h, в h прописывается к каким портам что подключать вот таким образом:
// порт к которому подключаем шину данных
#define DPORT PORTD
#define DDDR DDRD
#define DPIN PIND
// порт к которому подключаем RS, RW, E
#define CDDR DDRD
#define CPORT PORTD
Похоже в стм порты называются несколько по другому чем в авр, потому что на PORTD, DDRD, PIND и т.д. компилятор ругается (Error: Identifier "DDRD" is undefined in "lcd.cpp", Line: 8, Col: 6).
Вопрос - где можно глянуть названия портов для стм? И нужно ли для того подтягивать какие либо либы типо io.h как в авр?
>А ссылочку можешь кинуть? А?
Ты трудный какой-то. Какой у тебя камень? В каком IDE пишешь? https://st.com все мануалы, даташиты, сопутствующее ПО, драйвера и прочая чухонь.
Гугл в помощь. Порты там перебить и всё будет работаь. Для вывода значения в порт есть регистр PORTx->ODR - аналог PORTx у атмеги, для атомарного вывода на пин PORTx->BSSR - аналог операций PORT{x}_Bit{y}={1 или 0} (или ассемблерных команд sbi/cbi) у атмеги. Библиотечные функции HAL_WritePin использовать можно, но дисплей будет работать раза в полтора-два медленнее, чем при работе напрямую с портами через BSSR.
И да, для работы по SPI для начала лучше используй библиотечные функции из библиотеки HAL - самая главная для тебя это HAL_SPI_Transmit(), для вывода пикселей лучше использовать HAL_SPI_Transmit_DMA() - быстрей будет работать. Но для этого придётся устанавливать STM32CubeMX, либо изучать всё это дело и инициализировать вручную, либо самому накатывать библиотеку HAL.
>IDE - mbed
Проиграл с мани. Установи нормальное ПО уже наконец и не еби моск. Используй СТМ-кубик - он упрощает вхождение в СТМ. Ты бы ещё в Atollic программу писал.
>stm35l053r8
Хотя куда тебе программировать, если ты даже название своего процессора без ошибок не можешь написать.
опытный иараст
>PORTD, DDRD, PIND
>PORTD
GPIOC
@
GPIO_PIN_13
@
GPIO_PIN_SET
@
GPIO_PIN_RESET
@
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
Ну не ругайся, я же писал что совсем нуб в стм. После авр с которым 3 года проработал все очень необычно. Даже названия микроконтроллеров. Борду купил, мозги и руки не купил.
Кстати mbed мне тоже много чем не нравится. Мне бы какую-нибудь IDE с автоматическим поиском методов по всей структуре программы как ко всяких Visual Studio, Sharp Develop и т.д.
>>356652
Короче как я понял вместо DDRD в стм нужно писать GPIOD, вместо RS 5 писать RS GPIO_Pin_5, а вместо CDDR |= (1 << RS) нужно писать GPIO_SetBits(CDDR, RS); ну и GPIO_ResetBits(CDDR, RS); соответственно.
Правда не совсем понятно как сконфигурировать несколько портов одинаковым образом, например мне нужно сконфигурировать 4 порта определенным образом. Для конфигурации 1 порта на выход с подтяжкой к земле нужно написать вот такую телегу:
GPIO_InitTypeDef data;
data.GPIO_Mode = GPIO_Mode_OUT; // Выход
data.GPIO_OType = GPIO_OType_PP; // Хз зачем надо
data.GPIO_PuPd = GPIO_PuPd_DOWN; // Подтяжка на землю
data.GPIO_Speed = GPIO_Speed_2MHz; // Скорость низкая
data.GPIO_Pin = GPIO_Pin_2; // 2 вывод
GPIO_Init(GPIOD, &data);
И так для каждого вывода чтоли? Это же ебнутся можно. Есть способ это сократить?
Хотя чего это я туплю, можно же метод создать:
void ConfigPort(char port, char pin)
{
GPIO_InitTypeDef data;
data.GPIO_Mode = GPIO_Mode_OUT;
data.GPIO_OType = GPIO_OType_PP;
data.GPIO_PuPd = GPIO_PuPd_DOWN;
data.GPIO_Speed = GPIO_Speed_2MHz;
data.GPIO_Pin = pin;
GPIO_Init(port, &data);
}
ConfigPort(GPIOD, GPIO_Pin_2);
Могут быть ошибки, но суть я думаю понятна. Или можно как-то проще?
Если надо сконфигурировать одинаково несколько пинов одного порта, в структуре параметр pin можно писать несколько ножек через ИЛИ
GPIO_Pin_1|GPIO_Pin_3
Проще только в кубе тыкать наверное
И ты тут забыл тактировние порта врубить. И тип входных параметров мне кажется неверный.
О! Вот то что надо. Знал же что должен быть способ.
>в структуре параметр pin можно писать несколько ножек
Вот так чтоли?
data.GPIO_Pin = pin1;
data.GPIO_Pin = pin2;
data.GPIO_Pin = pin3;
data.GPIO_Pin = pin4;
>>356663
А зачем тактирование врубать в данной ситуации вообще?
Тип возможно и неверный. Не отрицаю.
А забей. Жопой твой пост прочел, думал ты написал "писать несколько ножек или через ИЛИ".
Тактировние надо включить, потому что у тебя работать иначе не будет. В стм по умолчанию почти вся переферия отключена. Перед использованием надо поднять соответствующий бит в регистрах rcc, чтобы подключить нужную фигню к тактировние шине.
да, то самое
> CDDR |= (1 << RS) нужно писать GPIO_SetBits(CDDR, RS); ну и GPIO_ResetBits(CDDR, RS);
Да. Но лучше всё-таки с регистрами портов атомарно обращаться, также как в атмеге. Здесь всего-то выучить как правило:
GPIOA->BSSR = 1<<(pin1|pin2) - установить ноги
GPIOA->BSSR = 1<<((pin1|pin2)+16) - сбросить ноги
value=GPIOA->IDR - считать состояние ногю
>Ну не ругайся
>ебнутся
Как на тебя не ругаться, если ты даже русский язык не осилил. В таком случае тебе лучше использовать библиотечные функции, как в ардуино иде, а инициализацию генерировать в кубике, тамм уж совсем для дебилов всё сделано чтоб освоили.
Начал изучать FreeRTOS и там написано что мол все круто, псевдопараллельность выдается за счет того что каждый равный промежуток времени обработчик задач (sheduler) забирает выполнение от одной задачи, сохраняя все данные в стек, и дает поработать следующий квант другой задаче.
Появилось два не связанных вопроса
1) Если у меня задача скажем выполнится за время, меньшее чем системный квант, он пойдет по новому кругу выполнения или отдаст власть обработчику? (написал и думаю ответ в самом вопросе --> новая итерация бесконечного цикла в задаче. Но все равно жду ответ знающих)
2) Если системный квант равен скажем 1мс, а одновременно работающих задач у меня скажем штук 200. Значит ли это, что если одна из задач выполняет обработку клавиатуры, то со стороны человека она будет как-бы тормозить? Реакция на нажатие же 200мс = 200 задач, слишком частое нажатие тупо не сможет обработаться
>Вставить задержку
Я вообщем-то так и сделал, но я думал, что я в кубе что-то забыл настроить.
https://blog.danman.eu/st-link-clone-as-stm32-dev-board/
что для вкатывания хватит двух st-link v2 клонов, и можно сразу начинать одним прошивать другого?
>для вкатывания
Да. Выпаиваешь оттудова камень и впаиваешь в свою плату.
Две платы Blue Pill самое то. Одну через UART-USB переходник или ардуину прошить в ST-Link. Подключить и работать со второй.
https://hackaday.io/project/158262-using-blue-pill-stm32f103c8t6-as-st-link
На фотке немного другое, но принцип тот-же.
У меня возникла проблема с Дискавери (stm32f407g disc1).
Настраиваю порт B как показано на первом пике. Но при работе, вижу охуительную картину - висящая в воздухе дискавери, не подключенная ни к чему, детектит единицу на входе PB6 (второй пик).
Я что-то делаю не так? Тут есть какой-то нюанс, который надо учитывать?
На порте E такой хуйни не нашёл.
Пока пришлось отпаять подтяжку.
Если есть варик как запустить эту красоту с подтяжкой на месте - было бы збс.
Чувак, просто интересно, чем тебя другая нога не устраивает,? Уверен, на плате достаточно свободных пинов
Потому что я уже спаял макетку и мне лень перепаивать 16 проводов.
Любишь BDSM? Бери что-то типа 24LC64 и подключаешь по IIC, который может зависнуть в любое время, или писать программную реализацию IIC.
Не любишь BDSM? Берешь что-то типа 95512 https://www.st.com/resource/en/datasheet/m95512-df.pdf - EEPROM с SPI интерфейсом.
Где-то посередине - 93С66 и подобные 93 серии.
Если верить производителю - хуй вам, а не EEPROM - используйте одну/../ из страниц FLASH памяти(с).
F100 серия была первопроходцем, самая горбатая из всех. Описания вообще всех проблем есть в Errata shit на любое семейство.
Пользуйте F0/F2/F3/F4/L серии, 100 слишком горбата, много отличий. На любую серию МК есть листок "миграция с 100й серии" что как-бы намекает, что даже производитель считает их мусором
В демоплату STM32VLDISCOVERY нормально становится F071/F301 и подобное пин ту пин. Проще выкинуть 100ю серию и забыть
>производитель считает их мусором
Аноны, посоветуйте тогда годную недорогую плату на СТМ32 для собственных экспериментов.
Посоветуй камень:
два SPI
три UART
аппаратный TRNG
флеш хотябы 128кб
оперативной памяти 20кб
цена: до 2$
>цена: до 2$
Сильно растяжимое требование. Цена при покупке в каком месте? При каких партиях?
>аппаратный TRNG
Чем не подходит младший разряд с АЦП? Можешь еще диод с обратным смещением приделать, чтобы сильнее шумело.
>аппаратный TRNG
Вещь сомнительной полезности. F405 с ней, в китае они по 3,5$.
По остальным требованиям ближе всего пойдет старшие F0 семейство (16кб озу)
Разве что сальваж. Не может новая стоить 60р. Да и сдается ты пиздишь безпруфно в тред
>кокхол что ли?
Да
>>357562
>Да и сдается ты пиздишь безпруфно в тред
https://item.taobao.com/item.htm?id=544907210814
Конкретно у этого продавца беру и F4 и F0 серии, ADUMы различные, АЦП, Токовые ЦАПы. Разницы с деталями с маузера/фарнела/тме не заметил ни визуально ни в работе. Можете брать смело. Если детали не оригинал или Б/У это пишут в описании.
Например SP485
Оригинал https://item.taobao.com/item.htm?id=549197050879
Китайская копия https://item.taobao.com/item.htm?id=524754218256
Как видите разница в 10 раз. Копии кстати хорошо работают. Единственно что, подтяжки внутри у них более высокоомные. Ну и на "живую" длинную линию я не рискнул бы ставить без испытаний переходных процессов.
Выбор есть, ультрадешевые китайские копии, или дешевые оригиналы.
То же самое и дисплеев касается, 16х2 классический стоит меньше доллара. Большой ассортимент, в десятки раз больше чем могут предложить где угодно. Особенно COG графические. С местных цен хуею давно. Но знаю точно одну вещь, если цена с доставкой и всеми расходами ниже в 2-2,5 раза чем в космодроме - смело берите, это оригинальные детали.
Разве что сальваж. Не может новая стоить 60р.
Вам барыги это втюхали в головы. Все детали в китае дешевле раза в 3 как минммум из-за отсутсивия импорт/экспорт пошлин, НДС, барыжинга, зарплат монагеров и машин директора.
По своему опыту - видишь цену, дели в уме на 2-3 раза, это то, что ты заплатишь за поставку напрямую с китая, где стоят эти заводы где клепают эти микросхемы.
>космодроме
Как он меня заебал, блядь. Гандоны, блядь, в 2к19м году не иметь https? Сайт из 90х. Вы если цены заломали, то сделайте хоть сайт удобный.
Выбросил бы ты fatfs, и взял бы littlefs. Меньше памяти, wear leveling, также можно монтировать в комп через блочное устпоймтво. Fatfs оперативно тебе флешку ушатает.
>2к19м
Не продолжай, все с тобой понятно.
Что с ценами не так, примерно +- как у других. Космодром, VDMAIS и РКС в принципе полностью перекрывают потребности для прототипов. Для серии даже 10шт - китай.
Окей, каким должен быть сайт радиокомпонентов? Свистелки и перделки? Или как у РКС конченое глючащее жабаскрипт говно? Зато новое.
По личному опыту формирования закупок на 200+ позиций, удобнее космодрома пока не видел сайтов
По приоритету
1. АШ ТИ ТИ ПИ ЭС блядь. Не заказать все эти 200 позиций, не слив провайдеру/СБУ/твоей мамке их содержимое вместе с твоим номером телефона именем и адресом
2. Поисковой движок говно, только точное совпадение или соси хуй. Фильтров нет, иди нахуй. Категоризация только если повезет и найдешь страницу линейки чипов.
3. Даташитов часто нет, пиздуй гуглить. Ой, не гуглится? Мы же заказали это у ноунейм китайцев, на плате ни обозначений нихуя, ну сорян придумаешь что-нибудь.
4. Вырвиглазный дизайн, каждая страница самая блять разнообразная по стилю.
5. В корзине блядь не узнать что ты там назаказывал, только наименование товара (50% их собственное) и пиздуй обрать искать в их "движке" этот товар чтоб понять что это.
В догонку, пидарасы разбросали все по двум магазинам, шоб и дальше быть ФОПами и наебывать налоговую. Из-за этого самому заехать и забрать не получится, обязательно придется ездить и туда и туда. Ну или заказывать по НП в тот же город, но доставка минимум 4 дня получается. Обычно в среду заказываешь, в понедельник забираешь.
>Конкретно у этого продавца беру
>Согласно соответствующим местным законам и правилам и политике Taobao, этот товар не может быть отправлен в вашу страну или регион.
Кто-то запизделся.
Странная ситуация - никак не могу настроить I2C Slave при помощи Cube/Hal. (пробовал на f103 и f407).
Вроде составляю всё правильно, но при попытке обратиться на выбранный мною адрес - не получаю никакого прерывания (в кубе они конечно выбраны).
ЧЯДНТ? Есть годный пример? А то гугл направляет только на встроенные кьюбо-примеры, которые мне нихуя не понятны.
Школотрон, хватит летать в облаках, вернись на землю. Крыльями поделишься?
Старый говнокод закоса под память 24 серии. Буду рад бурлящим потокам говна.
unsigned char i2cbuf[256];
unsigned char i2cbuf_i=0;
void I2C3_EV_IRQHandler(void)
{
static volatile unsigned short tmp1,tmp2,SR1,SR2;
static volatile unsigned char addr;
SR1 = I2C3->SR1;
SR2 = I2C3->SR2;
if (SR1 & I2C_SR1_RXNE) //incoming
{
if (addr)
i2cbuf[i2cbuf_i++]= I2C3->DR;
else
{i2cbuf_i = I2C3->DR;
addr = 1;
};
};
if (SR1 & I2C_SR1_TXE) //send spam
{
I2C3->DR = i2cbuf[i2cbuf_i++];
};
if (SR1 & I2C_SR1_AF) //last byte send
{
I2C3->SR1 = (I2C3->SR1 & (~I2C_SR1_AF));
addr = 0;
};
if (SR1 & I2C_SR1_ADDR) //start
{
I2C3->CR1 = (I2C3->CR1 & (~I2C_CR1_STOP));
};
if (SR1 & I2C_SR1_STOPF) //stop
{
I2C3->CR1 |= I2C_CR1_STOP;
addr = 0;
};
};
void I2C3_ER_IRQHandler(void)
{
};
...
MX_I2C3_Init();
...
//FUCK HAL! Tune I2C3 Interrupts
//Enable ITEVFEN & ITBUFENT INT
I2C3->CR2 |= (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
I2C3->CR1 = (I2C3->CR1 & (~I2C_CR1_PE));
I2C3->OAR1 = 0x002A;
I2C3->FLTR = I2C_FLTR_ANOFF;
I2C3->CR1 |= I2C_CR1_PE | I2C_CR1_ACK ;
NVIC_EnableIRQ(I2C3_EV_IRQn);
__enable_irq();
...
/ I2C3 init function /
static void MX_I2C3_Init(void)
{
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 132;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c3) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
Школотрон, хватит летать в облаках, вернись на землю. Крыльями поделишься?
Старый говнокод закоса под память 24 серии. Буду рад бурлящим потокам говна.
unsigned char i2cbuf[256];
unsigned char i2cbuf_i=0;
void I2C3_EV_IRQHandler(void)
{
static volatile unsigned short tmp1,tmp2,SR1,SR2;
static volatile unsigned char addr;
SR1 = I2C3->SR1;
SR2 = I2C3->SR2;
if (SR1 & I2C_SR1_RXNE) //incoming
{
if (addr)
i2cbuf[i2cbuf_i++]= I2C3->DR;
else
{i2cbuf_i = I2C3->DR;
addr = 1;
};
};
if (SR1 & I2C_SR1_TXE) //send spam
{
I2C3->DR = i2cbuf[i2cbuf_i++];
};
if (SR1 & I2C_SR1_AF) //last byte send
{
I2C3->SR1 = (I2C3->SR1 & (~I2C_SR1_AF));
addr = 0;
};
if (SR1 & I2C_SR1_ADDR) //start
{
I2C3->CR1 = (I2C3->CR1 & (~I2C_CR1_STOP));
};
if (SR1 & I2C_SR1_STOPF) //stop
{
I2C3->CR1 |= I2C_CR1_STOP;
addr = 0;
};
};
void I2C3_ER_IRQHandler(void)
{
};
...
MX_I2C3_Init();
...
//FUCK HAL! Tune I2C3 Interrupts
//Enable ITEVFEN & ITBUFENT INT
I2C3->CR2 |= (I2C_CR2_ITEVTEN | I2C_CR2_ITBUFEN);
I2C3->CR1 = (I2C3->CR1 & (~I2C_CR1_PE));
I2C3->OAR1 = 0x002A;
I2C3->FLTR = I2C_FLTR_ANOFF;
I2C3->CR1 |= I2C_CR1_PE | I2C_CR1_ACK ;
NVIC_EnableIRQ(I2C3_EV_IRQn);
__enable_irq();
...
/ I2C3 init function /
static void MX_I2C3_Init(void)
{
hi2c3.Instance = I2C3;
hi2c3.Init.ClockSpeed = 100000;
hi2c3.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c3.Init.OwnAddress1 = 132;
hi2c3.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c3.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c3.Init.OwnAddress2 = 0;
hi2c3.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c3.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c3) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
>Кто-то запизделся
Я где-то говорил, что продавец напрямую отправляет мне детали?
Нет, я пользуюсь услугами доп склада, заказываешь хуйни, детали, кастомные изделия, материалы, химию, жидкости, печатки с jlcpcb, небо и даже аллаха. Все локальной доставкой складывается в гуанджоу, а потом я решаю сам, сколько это стоит (декларация) как это упаковать и чем отправить, самолетом, поездом.
Вы блять как типикал рагули, если вы не знаете как это делается, значит все пиздят атата.
>Аноним
Но зачем ты пиздишь, что камень тебе обходитмя в дорар? Добавь услуги посредников, доставку, растаможку и вкаля, цена одного контроллера нихуя не отличается от цены электронщика. Только заместо Путина, тв кормишь китайского кормчего и кучу барыг присосавшихся к доставке
>Но зачем ты пиздишь, что камень тебе обходитмя в дорар? Добавь услуги
Как вы заебали...
Окей, хотите полную цену контроллера - доставка по китаю примерно как новая почта. 1$. Накладные расходы с учетом банковских процентов переводов, складу - 15%. Доставка 10$/кг
Стоит ли напоминать вес контроллера.
Короче этот сратый 401RCT6 обойдется в 1.2$
Притом за доставку ты платишь в любом случае, не важно кто доставляет, телепорты не изобрели. Все поставщики покупают ровно также. Только к этой цене (1,2$ при учете что ты покупаешь не один МК а сразу все детали на все необходимые устройства), ты добавляешь 100% жадности и 20% налогов и получаешь ровно ту же цену того же космодрома.
Заебали, как нищеброды считаете каждую копейку в ссылках. Я говорю как есть в сухом остатке - 2-3 раза дешевле обходится ящик деталей например на 10 устройств. Дисплеи, кнопки, корпуса, платы (кстати ПП довольно тяжелые), короче все что нужно затариваешь и особо не колупаясь в ценах ты гарантированно экономишь в 2 раза
Вот именно. У китайцев то зачем покупать, если можно на диджикее? Там хотя бы не подсунут ерунду.
Насчет ерунды я уже говорил, ты сам выбираешь что покупать.
>если можно на диджикее
Поехавший? Барыжинг значительно похлеще хохломагазинов, цены оттуда выйдут еще дороже нем просто сходить в магазин.
Есть конечно позиции которые производят не в китае, тогда цена что в европе, что в китае одинаковая или даже дешевле из европы.
Недавно светодиоды японского производства покупал с TME, вышли более чем в 2 раза дешевле чем с китая. Конечно, такие позиции нужно смотреть отдельно.
Но речь изначально шла о цене деталей в целом, вам барыги вбили в головы, что если вы можете купить что-то в 2-3 раза дешевле, то это подделка. Конечно нет, подделка стоит в 10-20 раз дешевле, просто барыгам выгодно чтоб вы так думали.
https://item.taobao.com/item.htm?id=572835945719
https://item.taobao.com/item.htm?id=44346842148
Как видишь, цена в 4 раза отличается на самом магазине. На фото думаю отличия тоже увидишь. На второй ссылке не указано что это оригинал. В чем обман со стороны китайцев? Если барыги у нас покупают за 1,2 юаня, а продают как оригиналы, ну блять, это не китайцы виноваты.
Как вы блядь вообще разбираетесь в этих иероглифах? Гугл транслейт?
Как там, BSOD-ы уже вылечили?
Вместо этого говна можно взять не намного дороже CP2102N.
https://www.digikey.com/product-detail/en/silicon-labs/CP2102N-A01-GQFN20R/336-4826-1-ND/8619802
А лучше вообще такое не использовать, cейчас всюду аппаратный USB пихают.
Господи, как обычно, абы ляпнуть что. Речь о позиции оригинал и копия, что китайцы предоставляют выбор, а не про какой-то конкретный радиоэлемент, это было бы достаточно глупо.
За бсоды не знаю, я не пользовался особо этими конвертерами, просто привел пример на том, что первое пришло в голову, но опять же CP2102N в китае ровно в 2 раза дешевле диджикея.
Личный выбор на то и личный, у меня к китаю достаточно положительное отношение, особенно если что-то заказывать напрямую с завода под заказ, не единично конечно же. Например заказать пьезоэлементы по своим чертежам в европе/США обходится 7-8$ за штуку на сотне, то же самое сделать в китае - 0,6-0,8$ за штуку при той же партии. Хотя это и так очевидно.
Рассуждать где лучше покупать нужно после сборки изделия, передачи заказчику, засунуть руку в карман и поглядеть сколько у тебя в итоге осталось, тогда и делать объективный выбор.
>вам барыги вбили в головы, что если вы можете купить что-то в 2-3 раза дешевле, то это подделка
Но ведь т ы можешь посмотреть цены на сайте ST и убедиться, что 401rc стоит 2.43 от 10к штук. Как же добрая китайца продает по дорару? Сальваж? Подъебка? Или злой СТ вбивает нам в головы, что 2.43 это нормальная цена?
Цены на сайте производителя указаны с учетом интересов дистрибьюторов, просто чтоб не срать им. Опять же, цены для покупателя. Это легко проверить, у того же VDMAIS цены на продукцию Analog Devices ниже чем цены на сайте AD, поставки у них прямые от AD без дополнительных посредников. В некоторых случаях (если они брали большую партию чего-либо) у них цены даже ниже чем в китае, но это не особо часто такое.
Texas например указывает что цена может сильно варьироваться от условий.
Так что эти цены хороши для быстрой оценки в большую сторону, например заказчик спрашивает, сколько это будет стоить? Берешь цены с сайтов производителей и будь уверен что не проебешься, т.е. она будет "с запасом"
msp430fg4618
XC2C32A-6VQG44
msp430fg2112
max9202
dg403
mc1350
tc4427 2
4х слойная ПП 8080мм
штук 10 операционников типа 358х, 4 оптрона, диоды, батерая, 2576, конденсаторы, мелочевка, кварцы 2ши, несколько светодиодов, дроссели короче как обычно
Вот сколько навскидку это стоит?
Тут стоимость будет в основном определяться потраченным на разработку временем, а не стоимостью деталей, если конечно это не относительно большая серия. За единичное устройство я бы обсуждал от $1500 самый минимум.
Нет. У всех вендоров цены на сайте включают только маржу вендора без учета дистрибьютора. Тексас, например, можно вообще поштучно купить и оплатить кредиткой, дистрибьютора в цепочке не будет.
Далее, каждый вендор имеет свою стратегию - тексас имеет высокие сайтовые цены, но может сильно снижать квотные цены, особенно на коммодити, 300мм пластины помогают. Девицы наоборот. Им нет смысла продавать крутой аналог задешево, особенно после покупки Linear - конкурентов почти не осталось.
Есть простой лайфхак: конечная цена в РФ примерно равна сайтовой. Ну то есть дистик получит скидку от вендора, накрутит свою маржу и НДС - то на то и выйдет. До 50к штук приблизительно работает.
>Им нет смысла продавать крутой аналог задешево, особенно после покупки Linear - конкурентов почти не осталось.
Куда смотрел швятой антимонопольный комитет? У них же там вроде как такие сделки запрещены.
Абсолютно верно. Вот эти НДС, маржа и прочее и дает 100% цены товара. Именно об этом я и говорил, что цены на сайтах - индикативные. Покупая в китае вы фактически покупаете со склада с которых отгружают дистрибьюторам. Отсюда и разница в цене в 2 раза. Если вы сами захотите продавать эти детали, купленные в китае, вы добавите налог, свою прибыль и получится ровно то, что и в магазине. Тут нет никакой магии, нет подделок продукции, просто многие люди забывают, что цена товара в стране составляет едва ли 30%, все остальное - накрутки, налоги
Если что - 65$ цена. Я это к тому, что это законченное изделие, проверенное, настроенное. Пример привел лишь для того, чтоб показать истинную дешевизну радиокомпонентов
Просто именно эти радиокомпоненты уже многократно окупили свою разработку и выпускаются настолько большими партиями что практически стоят копейки. Стоимость сырья, издержки производства, логистики, амортизации станочного парка просто растворились в количестве уже реализованного
Тексас и ADi уже прекращают отгрузки в Китай, оставив по одному большому дисти. Скоро и вендоры второй-третьей руки будут делать то же самое - ты или лидер рынка, или следуешь за лидером. Никому не охота ебаться с реэкспортом.
Маржа и прочее - это треть цены максимум. 100% накрутки будет если покупать со склада. Но опять же через пару лет ты со склада купишь только коммодити. Нужен тебе будет проц или что повеселее - добро пожаловать в мир квот и лид таймов.
А цены в Китае.. Сегодня они есть, потому что у Фоксконна эппл не выбрал весь объем аудиокодеков, завтра нет, потому что в этот раз выбрал.
Без учета памяти и керамических конденсаторов, я готов сделать тебе такую плату за 22-23 доллара тут в РФ. В партии от 5к штук. Керамику достаешь сам, я не буду связываться с керамическими конденсаторами в партиях менее миллиона.
Ну, формально конкуренция есть. Но после сделок c Hittite и Linear, девицы получили себе в портфолио уникальные продукты.
Двач такой двач
>я не буду связываться с керамическими конденсаторами в партиях менее миллиона
Вся русня в одном предложении. Нахуй вы кому нужны с такими запросами. Китаец сделает все гораздо лучше и качественнее при партии в 100шт за меньшие деньги. Ведь они не столь брезгливые господа.
Не сделает. Сейчас на керамику ебанутая аллокация по всему миру. Или 35 недель, или трехкратная цена, или искать по стокам. Последнее очень времязатратно.
CubeMX + VSCode
Обсуждали уже много раз, в этом треде в том числе. Вообще советую осознать, что на STM32 микроконтроллеры вовсе не заканчиваются.
Я давно на игле джетбрейнса, поэтому да. Знакомая и привычная для меня среда, все красиво собирается через cmake, есть дебаг и вообще все как положено.
я вообще на работе на джаве прогромирую, микроконтролёры только как хобби
На F407 работает (спс), но на F103 не генерируются прерывания.
И я не совсем понял принцип, того что у тебя происходит и как мне то же самое реализовать на HAL.
Я р разобрался как по-отдельности прочитать и записать в I2C, а как делать всё вместе как у тебя - не понял.
А я сосу хуи в eclipse. Просто она работает, но блядь, как же бесит в мелочах. А переходить на другую ide, это cubemx настраивать, линковщик, openocd ублажать и тд.
Все хорошо, только оперативки многовато жрет и тормозит. Иногда это создает некоторые неудобства.
>>358624
>cubemx настраивать
Не знаю что вы все в этом cubemx настраиваете, т.к. не использую STM32. Но при использовании CMake файлы проекта IDE генерить уже не нужно. Необходимо только написать (или найти готовые) скрипты CMake. Настройка IDE в результате сводится практически только к заданию правил автоформатирования.
Один раз сделаешь по нормальному через CMake и у тебя будет все одинаково компилироваться в любой IDE (без IDE тоже), где есть поддержка CMake или хотя бы make.
>openocd ублажать
А мог бы взять J-Link, который не требуется ублажать.
По интеренетам люди пишут, что абы какой кварц не подходит, что нужен какой-то с низкой ёмкостью и т.п.
У меня из десятка разных кварцев более-менее стабильно работает один, и то, после холодного старта (при том что бекап батарейка есть) часы останавливаются, и нужно тыкать reset. Бесит пиздец.
Может есть какой-то пердолинг тайный?
F429
>>358651
Нагородить можно много чего, но я просто впилил кврц в STM32F4discovery, ножку резервного питания подвесил куда нужно, большего огорода городить не охота, в т.ч. и всякие буферы для кварца.
Предвосхищая вопросы - дорожки к отладочным пинам отключены, кварц впаян на штатное место с конденсаторами.
Какие емкости впаял и какой кварц? Ты читал даташит на кварц? Какая у него нагрузочная емкость?
Ёмкости спиздил парой с того же места, где взял кварц. Конкретно эти по 10пик, плюс минус точность моей мерялки.
Вот может для stm32 надо их меньше? Ноги на которых висит кварц пиздец хилые, щуп 1:10 тут же срывает генерацию.
И вообще, иди на st.com и качай AN2867
По таблице ищещь параметры Gm_crit_max которые меньше Gm в 5 и более раз, или меньше Gmcritmax хотя бы на 20%
Gm и Gmcritmax - из даташита на МК, на пикчах для STM32F407
Учти, что Cload это не емкости конденсаторов, а общая емкость между выводами кварца, т.е. Сшунт + (Сконд+Свходов)/2
Т.е. если берешь ABRACON ABS06 c Сшунт 1,7пФ, и Сload 4пФ, тогда твои конденсаторы будут равны С = ((Сload - Сшунт)*2) - Свх =~0, т.е. без конденсаторов вообще
В F4хх меньше F411 очень слабые генераторы, прям вот очень.
У тебя скорее всего стандартный кварц с Gm примерно 1,5 (типа Geyer и любой другой ширпотреб), т.е. в желтой зоне - нестабильный запуск и работа.
На на платах все равно делай места под конденсаторы, +-1-2пФ могут очень хорошо подстроить частоту кварца особо не влияя на работу его
Разрабам примеров для STM32F4 приготовили особое место в Аду? У меня пердак уже полыхает просто. Пытаюсь состряпать голый темплейт со STemWin и нихуя не работает. Вроде все подключил, в хидерах прописал, компилируется без ошибок, а на выходе ЗАЛУПА.
Дарагой дневничок!
Сегодня я забил на самостоятельную сборку проекта с emWin и запилил его в Кубике. Сразу нарвался на неповорачиваемость дисплея с помощью команды GUI_SetOrientation. Вылечилось увеличением памяти в GUIConf.c до 180кБ. Может кому сэкономит пару минут в гугле.
Столкнулся с такой хуйнёй: поставил на линукс TrueStudio и CubeMX, компилирую пробный проект, пытаюсь запустить в дебаге, а он мне отвечает:
ST-Link enumeration failed
Error in initializing ST-LINK device.
Reason: ST-LINK DLL error.
Или "Error message from debugger back end: Connection timed out", в зависимости от того, выбираю ли в настройках автоматический коннект к GDB серверу.
Полагаю, что просто не заводится GDB-сервер. Как проверить, и как пофиксить?
Проверь хотя бы права, посмотри вывод lsusb для начала...
Зачем вообще взял эту хрень? Мог бы из репозитория поставить Qt Creator или тот же эклипс.
Какие права? На исполнение в папке с GDB? Так вроде ж стартует, пишет что гдб стартед.
Выбрал потому что искаропки и есть на винду и Линукс. Планировал переходить на Эклипс + ОпенОСД, но позднее.
Пытаюсь считать как EEPROM:
uint32_t ByteRead(uint32_t addr)
{
return ((__IO uint32_t)addr);
}
Получаю хард фаулт.
КАК ЭТУ ХУЙНЮ ВООБЩЕ СЧИТЫВАТЬ БЛЯДЬ?
Макаба скушала знаки умножения.
Читаешь uint32_t, а в имени функции byte. Что-то тут не так.
Ну и читаешь то по невыровненным адресам похоже, для Cortex-M0/M1 так нельзя. На Cortex-M3 уже можно, но вроде как не для всех инструкций, хотя может я что-то путаю.
Может подскажешь как правильно, а то я чет искал и так и не нашел никаких других вариантов.
Код для stm32f0
int8_t adc_conv_12bitsTo_tempC(uint16_t ts_value, uint16_t vref_mV) {
int32_t r;
//Normalize sensor data to VREF
uint32_t ts_normalized = (ts_value vref_mV) / 3300;
//Substract 30C calibration point
r = ts_normalized - temp30_cal_ptr;
//Avg_Slope calc
r = 80; //110C - 30C
r /= (temp110_cal_ptr - *temp30_cal_ptr);
r += 30;
return (int8_t)r;
}
Читай только по выровненным адресам. uint32_t - по кратным четырем, uint16_t - по четным, либо читай только uint8_t. Ты лучше сам посмотри, может ли твой микроконтроллер читать по невыровненным адресам.
Интересное продолжение.
Со встроенным в Дискавери СТ-линком, всё работает.
А вот с китайским донглом и BluePill - нет.
Попробуй Блокнот. Можно открывать файлы, сохранять файлы. Их еще можно менять. В нем можно создать файл типа bat с таким содержимым:
ISUCKCOCKS
Который, будучи запущен, установит последную версию IDE.
Анон, поясни за waveshare OpenF3-D/Open407V-D/Open429Z-D - Standard.
Какие подводные?
У меня есть все эти дискавери и несколько модулей кажется совместимых с этими мезонинами (lcd, ethernet, камера и тд), хочу просто играться с этим барахлом без ебли с проводами и макетками.
Ну, у меня есть Open407Z. Недостатков три с половиной: материнка занимает много места на столе; никаких защёлок у разъёмов для модулей не предусмотрено, держится только на трении; с другой стороны — мезонинный модуль входит (и выходит) в гнездо на материнке OCHE туго, так что легко можно погнуть ножки, когда вытаскиваешь; ну и все сразу модули подключить ко всем разъёмам не получится, надо смотреть как там выводы микроконтроллера используются.
Товарищи!
У меня есть вот такая ардуина:
https://ru.aliexpress.com/item/STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32342717171.html?spm=a2g0v.search0302.3.10.3901d766U7hWAS&ws_ab_test=searchweb0_0,searchweb201602_0_10910_453_10911_454_10914_10915_10618_536_317_537_319_10059_10696_10084_10083_10887_10307_321_10889_322_10902_10065_10068_10301_10103_10884,searchweb201603_0,ppcSwitch_0&algo_pvid=729c7d31-ba42-45b3-a8f7-e3a3805546a6&algo_expid=729c7d31-ba42-45b3-a8f7-e3a3805546a6-1
Пишут, что загрузчик надо загружать через адаптер USB-UART. Его у меня нет.
Есть вот такой прибор:
https://ru.aliexpress.com/item/1-j-JLink-V8-USB-ARM-JTAG/32860933960.html?spm=a2g0v.search0104.3.2.444917bcHMiTWc&ws_ab_test=searchweb0_0,searchweb201602_1_10065_10068_319_317_10696_453_10084_454_10083_10618_10307_10301_537_536_10902_10059_10884_10889_10887_321_322_10915_10103_10914_10911_10910,searchweb201603_54,ppcSwitch_0&algo_pvid=89ce7926-7fb0-4589-a9ba-0d1b9f219779&algo_expid=89ce7926-7fb0-4589-a9ba-0d1b9f219779-0
Еще есть отладчик с интерфейсом SWD.
Я контролеры ни разу не прошивал и паяльник в руках ни разу не держал, подскажите, что нужно делать чтобы из первой платы сделать ардуину и программировать её из арудино иде. Или как её программировать на имеющемся оборудовании. С программированием разберусь - в школе бейсик и паскаль проходили. Если интересно буду выкладывать результаты.
Если это ардуина, то не лучше ли пойти к ардуинщикам? Или это у тебя просто микроконтроллер с минимальной обвязкой? Ты для начала с этим определись.
>загрузчик
Там уже есть загрузчик, только он не не ардуиновский и вообще тебе не нужен.
>как её программировать на имеющемся оборудовании
Подключаешь свой J-Link к этой плате, запускаешь на компе сеггеровский J-Flash, выбираешь файл прошивки и нажимаешь кнопку F7. Или еще как-нибудь.
Они меня оттуда сюда выслали, это STM32 в минимальной обвязке.
Тем загрузчиком что есть можно как-то пользоваться?
У J-Linka штырьков больше, а тут я так понял, 4 боковых это отладочный интерфейс. В каком порядке их подключать, можно J-linkom управлять из CooCox?
>4 боковых это отладочный интерфейс
Они там подписаны прямо на плате. Все очень просто — SWDIO (SWIO) этой платы подключаешь к SWDIO отладчика, так же поступаешь с SWCLK и GND. Отдельно как-нибудь подключаешь питание.
>Тем загрузчиком что есть можно как-то пользоваться?
Читать документацию - для слабаков? Ну тогда ищи в гугле "STM32F103 bootloader". Но этот загрузчик тебе не нужен.
Товарищ, ты хорошо объясняешь, спасибо!
Это я давно понял, загвоздка в том, что в j-linke выводов с таким названием нет https://www.segger.com/products/debug-probes/j-link/technology/interface-description/
>>360446
Вот так прямо и искал, только без букв F103, выдает мануалы по написанию собственного загрузчика и как работает загрузчик и вообще, попробую с указание полного наименования контролера. В основном предлагает через UART, это готовый встроенный, на плате есть усб гнездо и всё сводится к тому, что сначала надо залить через уарт собственный загрузчик, чтобы грузить потом через усб. Адаптера uart нет, есть jlink, на форумах о нем в основном нахожу сначала вопрос "А чо, он работает, да?" Потом сложные слова, а картинки как подключить его к SWD найти не могу. Не серчай, товарищ, все были нюфагами, подскажи что гуглить? Спасибо, товарищ!
>Это я давно понял, загвоздка в том, что в j-linke выводов с таким названием нет https://www.segger.com/products/debug-probes/j-link/technology/interface-description/
Прокрути чуть ниже страницу - и посмотри внимательно на имена 7 и 9 вывода.
>в j-linke выводов с таким названием нет
>https://www.segger.com/products/debug-probes/j-link/technology
Прокрути эту страницу ниже, дебилоид!
>Адаптера uart нет
Возьми компьютер с COM-портом. Но зачем, если у тебя сразу два отладчика?!!
>>360450
Товарищи, спасибо! Благодарю за справедливое товарищеское порицание! Впредь буду внимательнее, чтобы не досаждать окружающим своей тупостью. Благодарю за потраченное на меня время! Надеюсь эти дамы охладят ваше справедливое негодование.
>Возьми компьютер с COM-портом.
Этот компьютер у меня уже сломался.
Смотри вывод lsusb и ищи VID/PID своего донгла. Потом иди в /etc/udev/rules.d и ищи там файл, который поставился с пакетом ст-линка. Добавь туда такую же строчку, как сейчас там, только поставь VID/PID, которые ты выяснил в начале. После этого нужно будет либо перезагрузиться, либо выполнить от рута udevadm control --reload-rules && udevadm trigger и, возможно, переподключить донгл. После этого всё должно взлететь.
>>359965
>>354767
Пацаны, я вот не понял о чем они вещают?
http://blog.atollic.com/build-your-embedded-code-as-a-windows-.exe-app
Как бы говорят можно экзешники делать... Но как их запускать на x86 как их делать не говорят, про знаю симуляцию, писал симуляторы.
Есть инфа, о чем они?
О том, что можно из TrueStudio компилить и под микрухи, и под пеку. То, что можно переиспользовать код проекта между этими двумя таргетами - это уже дело второе
Ну типа готовой магии нет, которая позволила бы софт сделать бридж между микрухой и пекой, для симуляции отдельных частей? Типа, вам дан конпелятор. Ебитес.
Диодом мигать - подойдет. Хочешь еще и F(S)MC - бери nucleo 144 (типа F446ZE), если ethernet - F429ZI
https://ru.aliexpress.com/item/1-FTDI-FT232RL-USB-3-3-V-5-ttl-UART/32971699412.html
и еще stm32 (пик2)
https://ru.aliexpress.com/item/Free-Shipping-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-Forarduino/32525208361.html
Надо их как-то подключить между собой, как это сделать?
Открыть даташит на микроконтроллер и посмотреть там? При желании UART можно сделать программно, тогда можно подключать почти к любым выводам. Уточни что именно требуется и зачем.
курсач делаю, задача отправить данные с компа на внешнюю EEPROM. Пока думаю над частью передачи данных с компа на stm
В FT232RL (у тебя на первой картинке) есть bit-bang, посредством которого можно писать в ПЗУ с SPI и I2C. Дополнительный микроконтроллер для этого не нужен.
Олсо, где взять 3.3V и GND для UART? На stm вижу вот такие гнезда (пик 1), но не уверен что это для внешнего устройства.
Еще на st link есть две пары пинов с 3.3 и GND, одна из пар занята по д stm32 (пик 2). Может быть можно использовать другую пару?
>Под эту плату конкретного даташита нет
Совсем глупый? Даташит на микроконтроллер, берется с сайта производителя. Схема этой китайской платы элементарно находится в гугле по названию микроконтроллера. Не представляю как ты будешь это программировать, если даже этого найти не можешь.
Но еще раз повторю — микроконтроллер для такого не нужен, ну просто совсем.
кстати по звуку
хочу на матарошку сигнал - звук боевой фуры
да да вот это ТА ТА с басухой и прочей хуйней...
но ставиь кампрессор ...
да сначала была идея с воздухом и клапаном от выхлопа
но...
сейчас есть не хуевая такая компактная акустика = излучатель - нет проблем его раскачать
проблема в том чтобы именно как в мад максе было - тое парой мультивибраторов хуй обойдешся
тое как минимум там 4-6 нужны гармоник
да я знаю что по басухе даже близко не подойду к воздуху
но всеже
есть ли какие идеи? желательно без контроллеров
Для UART не нужно подводить питание, соедини GND между собой и подключи RX к TX и TX к RX соответственно. Три провода.
Вот по авр есть крутой курс на изи электронике, есть ли что-то подобное по стм, чтобы разжевывалось все детально, для самых маленьких?
Читай Reference Manual, лол.
Вообще, а чего ты ждёшь от чтения? Микроконтроллеры - это не наука какая-то, здесь нет никакой теории, формул, законов. Какую периферию с ядром тебе барин даст, такую и придётся использовать. Это тупо макакинг, и опыт здесь приходит только при решении практических задач. Это как если бы ты по книгам учился водить машину или боксировать. Более того, всё микроконтроллеры друг от друга принципиально ничем не отличаются
Аноны, у меня есть мечта детства - умный дом своими руками. В микроконтроллерах я совсем нуб. Программировал разве что AVR в атмел студио когда учился. Очень нравилось.
С чего начинать вобще?
>ПЛК
Йобу дал? Он пятнашку выложит за говно которое годится только лампочками моргать заместо светодиодов. Нахуя нубу предлагать промоборудование за сотни нефти?
>2001 года рождения?
Ващет еще в 80-х усачи лепили акустические включалки света от хлопка одной ладони, датчики присутствия на лампах и прочую умноту
Бедолаги
Сегодня начал писать программную реализацию I2C.
Отлаживаюсь на STM32f4 Discovery (камень f407).
Решил работать с шиной таким образом: два пина будут использоваться для прерываний (PD10, PD11), два пина будут использоваться для подтяжки на землю (PD8, PD9).
Прерывания пока никаких проблем не доставили, а вот пины подтяжки вызвали вопрос: включаю выход в режиме Open Drain (в интернетике пишут, что это самый правильный вариант), и при подключении пина в шину I2C он повторяет форму сигнала на шине. Если же отсоединить пин от шины, то он выдаёт то, что я от него и ожидаю.
Если подключить или отключить встроенную пожтяжку к питанию, ситуация не меняется.
Проверяю при помощи логического алианализатора и ардуино (A4 и A5 подтянуты к питанию).
Подскажи анон, я правильно понимаю, что мне придётся поставить по лишнему транзистору на линию? Или задуманное можно осуществить стандартным набором подтяжек?
Нихрена тебя не понял, но у тебя что-то странное начинается отсюда:
>подтяжки на землю
>Open Drain
Разве на картинке у тебя подтягивающий резистор к земле?
Нахуя тебе программный I2C в F4 серии? Горбатые только F100, про них лучше забыть вообще, все остальные (F0/2/3/4/Lx) уже другая периферия
Все равно не понимаю в чем у тебя проблема. Может быть ты не понимаешь что такое открытый сток (коллектор)? Дополнительные внешние транзисторы не нужны, если что.
Может быть и так.
Опирался на вот эту статью:
https://hubstub.ru/stm32/152-push-pull-vs-open-drain.html
Совершенно без понятия что тебе нужно. Для полноценного I2C ребуется открытый сток. Но зачем тебе дополнительный транзистор?
У меня устройство будет слейвом, если что. Принципиально разницы не должно быть, но на случай если я чего-то не понимаю.
>Но зачем тебе дополнительный транзистор?
Ну, так как у меня встроенный вывод не справляется с задачей, я думал подтягиваться на землю открытием транзистора.
В каком это месте оно у тебя не справляется?
Допустим взяли вывод микроконтроллера с открытым стоком и подключили его к другому устройству (допустим ведущему) тоже с открытым стоком и притянули все это резистором к питанию.
1) Ведущий выдает лог. 1, тогда на проводе будет:
1.1) лог. 1 если ты выдаешь лог. 1 с микроконтроллера
1.2) лог. 0 если ты выдаешь лог. 0 с микроконтроллера
2) Ведущий выдает лог. 0, тогда на проводе будет лог. 0 вне зависимости от того что выдает микроконтроллер.
Ты опять выходишь на связь, школотрон?
Сделай простой тест на вшивость - возьми любой вывод, подключи его через резистор 1..10К к питанию. Настрой вывод как open-drain и проверь, что когда в выходном регистре ODR 0 - на выводе напряжение питания, записав 1 в ODR - получишь ноль на выводе.
Как минимум покажет правильно-не правильно быдлокодишь управление уровнями на шине.
Настойки порта PD9? Полные, куда что пишешь. Каким говнокодом определяешь когда выдавать 0 на шину? На пиках очень разный масштаб. Может свой говнохал неуспевает продристаться? Если включил аппаратый iic-slave - то снова читай тред выше. Если программно - см чуть выше про хал или на каких костылях пишешь - потестируй чем-то другим снаружи на разных скоростях.
Не понимаю тебя, ты делаешь что-то очень странное и нелогичное.
Зачем ты подключаешь логический анализатор, если у тебя подозрение на то что микроконтроллер в режиме с открытым стоком как-то не так работает? Например микроконтроллер не перешел в режим с открытым стоком или мощи не хватает чтобы притянуть выходной уровень к земле. Тут нужно мультиметром в статике тыкать (без I2C вообще), приблизительно как советовал анон выше >>362405
Ну лохонулся, зажал сотку на программатор. Короче dmesg выдаёт такую хуйню:
new full-speed USB device number 13 using ehci-pci
device not accepting address 13, error -32
unable to enumerate USB device
А теперь вопрос, как реализован последовательный интерфейс на эстээмах? У ардуины какой то преобразователь на плате стоит из сериала в усб, а у stm вроде имеет какое то готовое решение на борту которое надо заливать в прошивку или я ошибаюсь?
USBasp 2.0 можно переделать в программатор stm32?
Ты вообще отличаешь микроконтроллер от отладочной платы с микроконтроллером, или это для тебя одно и то же? Возьми схему своей платы. Может ты не умеешь "читать" схемы? Как ты вообще без схемы собрался что-то программировать?
В самих микроконтроллерах STM32 (а также многих других) есть масочное (т.е. неперепрошиваемое) ПЗУ, в котором записан бутлоадер. Этот бутлоадер может грузить прошивку через UART, а также через другие интерфейсы в зависимости от микроконтроллера. Поэтому для программирования STM32 а также других кортексов достаточно переходника USB-UART.
> А теперь вопрос, как реализован последовательный интерфейс на эстээмах?
У конкретно этого МК на борту есть контроллер usb. Но без бутлодера, или другого ПО, которое его настроит, он не будет просто так работать.
> а у stm вроде имеет какое то готовое решение на борту которое надо заливать в прошивку или я ошибаюсь?
Да, у них прошит первичный бутлоадер, но он работает только через uart
> USBasp 2.0 можно переделать в программатор stm32?
Чтобы залить бутлоадер тебе нужен usb uart ttl конвертор, как написал анон выше. Внимательно проверь напряжение, стмки рассчитаны на 3.3В
Как через него залить ардуиновский usb бутлоадер можно почитать здесь
https://habr.com/ru/post/395577/
>Внимательно проверь напряжение, стмки рассчитаны на 3.3В
Там эти выводы 5V-tolerant. Из популярных переходников USB-UART наверное только в CH340 могут быть пятивольтовые уровни. Если сравнить логические уровни CH340 и STM32, то будет видно что проблем не должно быть.
>ttl
А КМОП значит не подойдет?
>Как через него залить ардуиновский usb бутлоадер можно почитать здесь
Мерзость. И для отладочной платы бессмысленно, потому что есть дешевые отладчики (J-Link и другие).
Я выебнулся только в том месте где написал что это мерзость. Разве это не мерзость? Про то что не подойдут пятивольтовые - подойдут, это не критично. Писать usb uart ttl тоже не стоит, потому что ТТЛ тут часто абсолютно не при чем.
https://www.scribd.com/document/398873018/Mastering-Stm32
Если посмотреть чейджлоги, то валяющаяся везде 0.21 не сильно хуже - там только пара ошибок и не описаны семейства L4 и WB.
В общем, есть stm32f030 — https://www.openimpulse.com/blog/products-page/product-category/stm32f030f4p6-mini-development-board/
Пример проекта оттуда, использующий CMSIS и SPL, я скомпилил в uVision'е, objcopy из .axf'а в .bin. Пользуюсь другой ОС, MDK не могу и не буду использовать.
Далее st-flash write led.bin 0x8000000 всё нормально работает, после прошивки я могу его ресетать кнопкой иил прошивать ещё.
А вот если я попробую скопилировать arm-none-eabi-gcc вот этот bare-metal пример - https://github.com/bjornfor/stm32-test/tree/master/bare-metal (make all ; st-flash write main.bin 0x8000000), то я получаю ситуацию, что программа работает, но st-flash двайс больше не видит. Если нажать кнопку ресета, то программа больше не работает, а st-flash его снова видит и можно прошивать.
Если я после этого нажму ресет, выполню st-flash reset, то теперь уже нажатие кнопки просто ребутает чип и он исполняет программу. Однако, st-flash'ем теперь зписать сложно: нужно зажать ресет, запустить st-flash и отпустить ресет после начала работы но до таймаута. Не очень круто.
Это как-то связно с BOOT0 и его подключением на gnd или 3v3, видимо, но я не очень понял, как именно и почему бинарник из того проекта по ссылке таких проблем не имеет.
Разве st-link не должен сам сбрасывать девайс перед прошивкой? Пробовал подключать st-link RST -> NRST, ничего не поменялось. (st-link у меня китайский клон, v2).
Собственно, кто виноват и как сделать так, чтобы я мог и прошивать постоянно, и после ресета программа запускалась?
Даже не знаю что тебе посоветовать.
>этот bare-metal пример
Для начала выкини из него все лишнее, включая настройку RCC (функция clock_setup). Микроконтроллер вполне можно подвесить если неправильно настроить тактирование. Оставь только настройку вывода к которому подключен светодиод.
>Это как-то связно с BOOT0
У этих микроконтроллеров есть отдельный не перезаписываемый кусок памяти из которого начинает выполняться программа после включения питания. Эта программа проверяет уровни на выводах BOOT и либо переходит к выполнению бутлоадера, либо к выполнению кода из флешки либо еще что-то.
>Разве st-link не должен сам сбрасывать девайс перед прошивкой? Пробовал подключать st-link RST -> NRST
На счет st-link не знаю, но обычно это настраивается.
>Для начала выкини из него все лишнее
Вот это хорошая была идея, спасибо.
Значит, там в main.c было:
>GPIOC->MODER = 0x01 << (LED_IR2);
>GPIOC->MODER |= 0x01 << (LED_BLUE2);
>GPIOC->MODER |= 0x01 << (LED_GREEN*2);
А у меня-то диод подключён к 4-ому пину GPIO, поэтому я тут просто заменил всё на GPIOA, и дефайны LED все сделал равными 4-м, лень было удалять и потом разгребать ошибки компилятора.
И вот "GPIOA->MODER = 0x01" всё ломает, так как SWDIO и SWCLK же к на пинах PA13 и PA14 висят.
Правда, почему после ресета программа не выполнялось не очень ясно, есть идеи?
Я похоже угадал на счет тактирования.
>RCC->CFGR |= 10 << 18; // PLLMUL[3:0]: set PLL input clock multiplier
Умножение частоты HSI/2 на 12, получается 48 МГц, вроде как не превышает допустимую. Однако флешка не может работать на столь большой частоте и перед переключением на тактирование от PLL необходимо настроить количество тактов ожидания при чтении памяти.
Не, clock_setup не влияет ни на что.
STM32F030F4P6 + CMSIS + стандартные system/startup файлы.
>int main() {
> int x = 20;
> int y = x / 10;
>}
Вызывает у контроллера бугурт:
Breakpoint 1, main () at src/main.c:48
48 int x = 20;
(gdb) s
49 int y = x / 10;
(gdb) s
^C
Program received signal SIGINT, Interrupt.
WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
148 b Infinite_Loop
(gdb) bt
#0 WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
#1 <signal handler called>
#2 0x08000894 in ?? ()
#3 0x08000574 in main () at src/main.c:49
на 2-4-8 и прочие степени двойки делить могу. Что за фигня-то, даже attiny справляется ведь, и без какой-либо возни с моей стороны. Где я обосрался?
В листинге ( https://pastebin.com/NZN1tRnW ) всякие __divsi3 сгенерились, что-то там он должен бытать сделать, но, похоже, не может:
>(gdb) s
>46 int y = x / 10;
>(gdb) si
>0x0800034446 int y = x / 10;
>(gdb) si
>0x0800034646 int y = x / 10;
>(gdb) si
>0x0800034846 int y = x / 10;
>(gdb) si
>0x080001ec in __divsi3 ()
>(gdb) si
>0x080001ee in __divsi3 ()
>(gdb) si
>0x08000894 in ?? ()
>(gdb) si
>WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
>148 b Infinite_Loop
При этом в __divsi3 нет никакого 1ee:
>080001ec <__divsi3>:
> 80001ec: e3510000 cmp r1, #0
> 80001f0: 0a000043 beq 8000304 <.divsi3_skip_div0_test+0x110>
Так и какого хрена он туда прыгает? Или почему не идёт дальше по по адресам, пока до 1f0 не дойдёт, чё за хуйня?
STM32F030F4P6 + CMSIS + стандартные system/startup файлы.
>int main() {
> int x = 20;
> int y = x / 10;
>}
Вызывает у контроллера бугурт:
Breakpoint 1, main () at src/main.c:48
48 int x = 20;
(gdb) s
49 int y = x / 10;
(gdb) s
^C
Program received signal SIGINT, Interrupt.
WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
148 b Infinite_Loop
(gdb) bt
#0 WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
#1 <signal handler called>
#2 0x08000894 in ?? ()
#3 0x08000574 in main () at src/main.c:49
на 2-4-8 и прочие степени двойки делить могу. Что за фигня-то, даже attiny справляется ведь, и без какой-либо возни с моей стороны. Где я обосрался?
В листинге ( https://pastebin.com/NZN1tRnW ) всякие __divsi3 сгенерились, что-то там он должен бытать сделать, но, похоже, не может:
>(gdb) s
>46 int y = x / 10;
>(gdb) si
>0x0800034446 int y = x / 10;
>(gdb) si
>0x0800034646 int y = x / 10;
>(gdb) si
>0x0800034846 int y = x / 10;
>(gdb) si
>0x080001ec in __divsi3 ()
>(gdb) si
>0x080001ee in __divsi3 ()
>(gdb) si
>0x08000894 in ?? ()
>(gdb) si
>WWDG_IRQHandler () at device/src/startup_stm32f030.s:148
>148 b Infinite_Loop
При этом в __divsi3 нет никакого 1ee:
>080001ec <__divsi3>:
> 80001ec: e3510000 cmp r1, #0
> 80001f0: 0a000043 beq 8000304 <.divsi3_skip_div0_test+0x110>
Так и какого хрена он туда прыгает? Или почему не идёт дальше по по адресам, пока до 1f0 не дойдёт, чё за хуйня?
Очевидно, конпиляктор нагенерил какую-то хуйню, видимо не тот опкод. Судя по твоим листингам и ошибкам, компилятор хотел сгенерить 32-битную инструкцию, но процессор воспринимает её как короткую 16-битную, поэтому инкрементирует pc на 2 байта и неверно читает следующую инструкцию, что вызывает исключение.
Ты каким-нибудь gcc наверное пользуешься?
> на 2-4-8 и прочие степени двойки делить могу.
Там компулнятор простой сдвиг подсовывает
> всякие __divsi3 сгенерились
Встроенная функция деления для процессоров без аппаратной инструкции деления
Ты стандартную библиотеку откуда берёшь? Возможно, она не от той архитектуры, проверь флаги компилятора
>Ты каким-нибудь gcc наверное пользуешься?
Да.
>Ты стандартную библиотеку откуда берёшь?
О, спасибо. Я запутался с ними и в итоге просто пару путей добавил в мейкфайл и забыл, в надежде, что оно само магически нужное берёт, ведь типа работало. Поменял на thumb/v6-m/libgcc.a и всё заработало.
а) сгенерировать положительный импульс шириной 10 микросекунд?
б) измерить ширину импульса?
Не на примере, а по хардварной части: что и как считается.
Ну там частота таймера, прескейлер, CCV счётчик - как всё это связано.
>а) сгенерировать положительный импульс шириной 10 микросекунд?
OneShotMode режим таймера.
>б) измерить ширину импульса?
Точно не помню, но вроде через захват значений таймера, который тупо считает и по разнице значений узнаешь ширину.
Не то.
Собираюсь прикупить со зряплаты STM32F746G-DISCO Порадуйтесь за меня штоле.
Подумывал, но как-то на кусок говна похоже.
Как минимум используется только половина штатной sdram, немного в ебенях разъем пердуины и... СУКА НЕТ GPIO. ВОТ ПРЯМ ПРАКТИЧЕСКИ НИХУЯ. Вещь в себе. Нет огромного простора для подключения всякого барахла. С натягов 429-disco тоже не очень. Хоть и все выводы выведены, но и при этом почти все заняты какой-либо периферией, что накладывает довольно жесткие ограничения.
>придёт бракованная
>или посылка потеряется
Я же не долбоёб на Али заказывать. В Электронщике 6к это удовольствие.
>Нет огромного простора для подключения всякого барахла
Огромный простор у меня есть на 429-диско. Eval-борда со всякими GPIO стоит ебаных сотен нефти. А тут вроде куча периферии и вся уже распаяна, только код меняй. Таки попробую.
>Огромный простор у меня есть на 429-диско.
Можешь показать как например ВСЕ uart-ы использовать?
Как-то пробовал - со скрипом только 3 пары rx-tx нашел.
Или например все SPI разом использовать?
Ну не знаю, я бы всё таки смотрел в сторону STM32H7, если уж нужен мощный микроконтроллер
>как например ВСЕ uart-ы использовать?
В Кубе переназначь выводы используемые под дисплей и почую периферию и используй все юарты
>переназначь выводы используемые под дисплей и прочую периферию
А ты мне прибежишь и перепаяешь при этом дисплей? Это не пердуино тред же.
Знаю что тебе впадлу искать, давай про юарт на 429-disco:
uart4 PA0+PA1 - PA0=кнопка, PA1=int1
usart2 pa2+pa3 - pa2=int2, pa3=lcd db3
usart1 pa9+pa10 - чистые
usart1 pb6+pb7 - pb6(TX)=sdne1, pb7-чист
usart3 pb10+pb11 - lcd db8+db9 (условно чистые)
usart6 pc6+pc7 - lcd hsync+db10 (условно чистые)
usart3 pc10+pc11 - lcd db12 + чист (условно чистые)
uart4 pc10+pc11 - lcd db12 + чист (условно чистые)
uart5 pc12+pd2 - чистые
usart2 pd5+pd6 - чист+lcd db0 (условно чистые)
usart3 pd8+pd9 - lcd d13+d14 (условно чистые)
uart8 pe0+pe1 - nbl0+nbl1 (условно чистые)
uart7 pe7+pe8 - sdram d4+d5
uart7 pf6+pf7 - чист + dxc(spi)
usart6 pg9+pg14 - чист + red led (условно чистые)
По итогу - всего 3 чистых юарта. Нужно больше? Проебите экран сэр! Проебите SDRAM память, сэр!
Слушай, это демоплата для работы с fmc и lcd контроллером, этож не usart плата, кому вообще придет в голову на демоплате использовать больше 2х портов? Ты еще бы пожаловался, что ты не можешь использовать ВСЮ переферию одновременно. Если тебе нужны порты, то это уже целевая плата - делай ее сам. Ей богу, как долбоебы обезумевшие.
>и перепаяешь при этом дисплей?
Если тебе нужны все UART-ы, то смирись и забудь про дисплей. Странный ты какой-то.
Я только вариант Nucleo видел из недорогих. Discovery вроде даже на него нет. Зато этот проц на 40-нм техпроцессе сделан вместо 90, как у F7, что позволило частоту аж 400 МГц поднять.
>400 МГц
Данунах. Мне столько не надь. Для таких частот у меня есть пара плат от промкомпов на х86 процах.
>Discovery вроде даже на него нет.
На сайте ST есть. Состояние Active, цена 84 бакса, но нет в продаже и только ссылка на спросить u sales office
https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-discovery-kits/stm32h750b-dk.html
И это, там ST жи заебенило йоба-контроллер двухядерный и платку на нем STM32MP157A-DK1 , но как по мне, это уже перебор для домашнего усачества.
А то, например, в screen'е локал эхо даже нет. В tio оно странновато работало (иногда по букве, а иногде только сразу после всей строки появлялось). Из примеров реализаций низкоуровненых имеется только esp8266 рядом, и там как раз каждый символ мне назад и высылается, поэтому с local echo будет дублироваться (диод мигает, без rx линии я будто ничего не печатаю, но если перед \n подключу, то нормально всё отвечает).
Пытался загуглить но что-то ничего полезного не нашёл, будто я один дурак такой. Но в примерах кода я никакого такого побуквенного эхо не видел. У всех в клиенте всё нормально печатается без лишних движений (например, тут https://visualgdb.com/tutorials/arm/stm32/uart/ ).
> мне нужно каждую отправленную букву назад высылать, чтобы не печатать в пустоту?
Да, везде так. Даже ssh на Линукс через сеть точно так же работает, каждый символ эхом обратно отправляет
А как тогда правильно структурно организовать передачу данных, если по прерываниям из буферов отправляется и приходит символ во время передачи данных? Не из прерывания же отправлять эхо это. Отключать прерывание по приходу данных на время передачи, чтобы другая сторона остановилась? Или просто докладывать пришедшие данные в буфер на передачу, чтобы он их после всего предыдущего сообщения отправил? Вроде бы что-то похожее на второй вариант я обычно вижу, если скопирую-вставляю, например, много комманд сразу. Или вообще иметь два буфера: обычный и для "эхо"?
Наверное платиновый вопрос - есть ввод ПАРОЛЕЙ и прочей конфиденциальной инфы? Исходи из этого.
Если нет - рискнул бы один большой входной буфер и конченный автомат, посимвольно разгребающий эту кучу говна.
Как отличить границы команд? Магический перевод строки.
Со стрелками курсора интересно будет - они выглядят примерно так "^[[A".."^[[C", бекспейс и делете немного иначе выглядит.
В свою бытность быдлокодил меню и.. местами сосал хуй, правда терминалы не помню. Показывалась только одна строка в самом низу или цвет строки(выделение) не восстанавливалось ESCAPE последовательностью (погугли - ими можешь и цвет менять, и курсор в любое место экрана запихнуть с этого места печатать. Если твой терминал не умеет в escape последовательности - увидишь в явном виде бред в стиле ^[[C" т подобный)
Да не, какие пароли, пока ничего такого.
>Если нет - рискнул бы один большой входной буфер и конченный автомат, посимвольно разгребающий эту кучу говна.
Не совсем понимаю, что именно ты имеешь в виду, и зачем мне один большой входной буфер. Вот, например, вызвал я
>peredat'_sto_bait() {
> memcpy(outbuf, sto_simvolov, 100);
> enable_txe_interrupt();
>}
Данные пошли передаваться, и на 50-ом символе нетерпеливый пользователь берёт и кнопку тыкает, на мк срабатывает RXNE прерывание. Что тут нужно делать? Записать пришеший байт в коне outbuf'а, записав предварительно записав куда-нибудь текущее количество байт в нём, и жить спокойно? Или вообще не обрабатывать приём, когда идёт передача, а потом уже гарантировано иметь себе пустой выходной регистр?
Почитал Mastering STM32, так там в примере с использованием HAL'а вообще нельзя одновременно и передавать, и принимать (ну, внутри HAL'а самого), и прерывания отключаются, и проверки при входе в фукнции есть. Да и код у него немного странный, намешаны Receive/Transmit и Receive_IT/Transmit_IT. Так и надо, что ли? При этом readUserInput() стоит проверка флага, который выставляется в 'data transfer complete' хендлере, который вызывает по окончанию приёма который может начаться лишь после вызова HAL_UART_Receive_IT, который вызывается лишь когда этот флаг выставлен. Нигде инициализации его я не видел, может пропустил, конечно, бегло посмотрел. Ну и он там просто берёт и отправляет назад только что полученный символ без всяких прерываний наплевав на всё. То есть, я зря выдумаваю себе лишние проблемы, что ли? Проверка на состояние TXE флага ведь выполнится в "обычном" коде лишь тогда, когда прерывания по нему прекратятся и отключатся, верно?
Просто опять у него какое-то получается "описание возможностей", которое и в reference manual'е найти можно, а мне бы "реальный пример" хотелось бы, а не вроде бы работающую штуку, но делают ли так в жизни не сказано. Ну знаешь, как бывает, вот мы нахуярили тут что-то, а в следующей главе "но это всё не очень правильно и приведёт к ошибкам".
В общем, байтоёбить не проблема, мне бы высокоуровненый обзор стандартной общепринятой реализации или типа того.
Всякие анси и прочие эскейп коды это я знаю.
Да не, какие пароли, пока ничего такого.
>Если нет - рискнул бы один большой входной буфер и конченный автомат, посимвольно разгребающий эту кучу говна.
Не совсем понимаю, что именно ты имеешь в виду, и зачем мне один большой входной буфер. Вот, например, вызвал я
>peredat'_sto_bait() {
> memcpy(outbuf, sto_simvolov, 100);
> enable_txe_interrupt();
>}
Данные пошли передаваться, и на 50-ом символе нетерпеливый пользователь берёт и кнопку тыкает, на мк срабатывает RXNE прерывание. Что тут нужно делать? Записать пришеший байт в коне outbuf'а, записав предварительно записав куда-нибудь текущее количество байт в нём, и жить спокойно? Или вообще не обрабатывать приём, когда идёт передача, а потом уже гарантировано иметь себе пустой выходной регистр?
Почитал Mastering STM32, так там в примере с использованием HAL'а вообще нельзя одновременно и передавать, и принимать (ну, внутри HAL'а самого), и прерывания отключаются, и проверки при входе в фукнции есть. Да и код у него немного странный, намешаны Receive/Transmit и Receive_IT/Transmit_IT. Так и надо, что ли? При этом readUserInput() стоит проверка флага, который выставляется в 'data transfer complete' хендлере, который вызывает по окончанию приёма который может начаться лишь после вызова HAL_UART_Receive_IT, который вызывается лишь когда этот флаг выставлен. Нигде инициализации его я не видел, может пропустил, конечно, бегло посмотрел. Ну и он там просто берёт и отправляет назад только что полученный символ без всяких прерываний наплевав на всё. То есть, я зря выдумаваю себе лишние проблемы, что ли? Проверка на состояние TXE флага ведь выполнится в "обычном" коде лишь тогда, когда прерывания по нему прекратятся и отключатся, верно?
Просто опять у него какое-то получается "описание возможностей", которое и в reference manual'е найти можно, а мне бы "реальный пример" хотелось бы, а не вроде бы работающую штуку, но делают ли так в жизни не сказано. Ну знаешь, как бывает, вот мы нахуярили тут что-то, а в следующей главе "но это всё не очень правильно и приведёт к ошибкам".
В общем, байтоёбить не проблема, мне бы высокоуровненый обзор стандартной общепринятой реализации или типа того.
Всякие анси и прочие эскейп коды это я знаю.
> Не из прерывания же отправлять эхо это.
Чому нет? Отправка байта по уарту - это обычно всего лишь одна инструкция записи в регистр передачи. То есть, в прерывании читаешь байт из регистра приёма, сохраняешь его в свой буфер, либо делаешь обработку какую тебе там надо, и тут же записываешь в регистр передачи уарта. Ну получится у тебя в обработчике прерывания на одну инструкцию больше - говно вопрос. Можно примерно так почувствовать, что при обработчике прерывания в 16 инструкций при тактовой частоте 16МГц прерывание будет выполняться за 1 микросекунду. При этом время передачи одного бита через уарт на скорости 115200 примерно в 8.6 раз дольше, чем выполняется прерываение, а если взять передачу одного байта, то ещё умножь на 10
> Отключать прерывание по приходу данных на время передачи, чтобы другая сторона остановилась?
Нет, зачем, уарт же дуплексный.
> Или просто докладывать пришедшие данные в буфер на передачу, чтобы он их после всего предыдущего сообщения отправил?
Глупости какие. Ты слишком заморачиваешься. Ты пойми, никакой, даже самый заядлый прогромист, не сможет набирать на клавиатуре тысячи символов в секунду, где у тебя бы встала проблема с быстродействием и нужно было бы принимать специальные меры. В расчёте выше показано, что даже если полностью загрузить уарт на скорости 115200 и делать всё на прерываниях, то нагрузка на процессор всё равно будет мизерной. Чтобы почувствовать какие-то проблемы с быстродействием, тебе нужно умудриться написать обработчик прерывания больше, чем на тысячу тактов, чего, конечно же, делать не стоит
> при тактовой частоте 16МГц
Бля, я думал, я в ардуино-треде, лол. Ну можешь пересчитать на соответствующую частоту
>Чому нет?
Тогда туда ведь надо ставить и while (txe != set)? Ведь туда только что могло txe прерывание записать данные, которые я отправляю. Вот меня это ожидание немножко волнует, ведь это как раз и ждать передачу целого байта, что долго. Или тоже фигня?
Я не то чтобы о быстродействии забочусь, а скорее об, эм, стойкости, что ли, ну что б внезапно вдруг не сломалось что-то.
Это нужно, если ты только, вот прям только что, записывал какое-то значение в регистр передачи, и передача этого байта ещё не успела закончиться. Но, так как скорость приёма и передачи у тебя одинаковая, и ты записываешь значение для передачи только по прерыванию приёма, ты физически не сможешь записать что-то в регистр передачи, когда передача предыдущего байта ещё не завершилась. Ты можешь оставить эту проверку на всякий случай, она всё равно будет сразу же выходить
> Ведь туда только что могло txe прерывание записать данные, которые я отправляю.
Не понял, что за прерываение? Ты сам записываешь в TDR внутри прерывания по приёму. Прерывания на передачу не нужны
>>Если нет - рискнул бы один большой входной буфер и конченный автомат, посимвольно разгребающий эту кучу говна.
>Не совсем понимаю, что именно ты имеешь в виду, и зачем мне один большой входной буфер. Вот, например, вызвал я
Еще раз - один огромный кольцевой буфер, куда валится все входящее говно.
(утрированно) "команда1 параметры1"0x0d"команда2"0x0a"команда3 параметры1 параметры2"0x0d0x0a"команда4"
Идешь посимвольно с самого начала буфера и анализируешь
что пришло. Здесь основная магия именно в кольцевом буфере и побайтовом разборе.
>>366898
>на 50-ом символе нетерпеливый пользователь берёт и кнопку тыкает
На некоторых свичах (кажется DES-3200-28 и подобных от D-link) - используется первый вариант. Можно дать далеко не одну команду настройки, а с 10-20-30, и пока он их поочередно выполняет - ему глубоко похуй что там пользователь тычет и нет возможности прервать выполнение команды вида "config vlan default delete ports 1-28" при локальной настройке через консоль не актуально, а вот по сети.. кому надо - поймут какая это боль в этой команде.
После выполнения всех команд отображаются вводимые пользователем символы.
У тебя кажется просто шиза на realtime исполнение. Не ядерным реактором же управляешь. Просто дописал в мануале - пока не выполнится текущая команда, данные новой команды не отображаются, пока не закончится выполнение программы. Спишь спокойно. При одиночном вводе символов, а не копипасты пачки команд эти строчки не актуальны и будет "эхо" в реальном времени.
Я бы как-нибудь все это разделил.
1) Для начала сделать функции чтения/записи по одному символу в кольцевой буфер (FIFO). Желательно сделать так, чтобы эти функции принимали указатель на сам кольцевой буфер, чтобы можно было сделать произвольное количество буферов без копипаста функций.
2) Сделать два кольцевых буфера с помощью функций из пункта 1, сделать прием данных в один кольцевой буфер и отправку из другого. И не столь важно по прерываниям это будет, через ПДП или просто через ожидание в цикле.
3) Написать функции копирования строк в буфер на передачу. Можно с использованием sprintf.
4) Сделать массив структур с описанием имеющихся команд. В структурах должна быть строка с именем команды, указатель на функцию соответствующей команды, что-то указывающее на тип аргумента и прочее что требуется.
5) Написать функцию разбора команд. Для большей универсальности, особенно если каждая в отдельности команда короткая, эта функция может принимать просто по одному символу в какой-то свой небольшой буфер. Эта функция должна отделять команду от аргументов (если они есть), и искать соответствующую структуру в массиве из пункта 4, а потом вызывать соответствующую функцию по указателю из найденной структуры.
6) Все соединяешь и готово. Эхо вставляешь куда угодно, при таком разделении это не потребует много кода.
В результате получишь более-менее универсальный код, который сможет работать на любых микроконтроллерах с минимальными изменениями. Какая-то зависимость от аппаратной части будет только в пунктах 2 и 6. Пункты 3-5 совсем никак не зависят от аппаратной части и от того куда ты вставил эхо.
СВЕРШИЛОСЬ! ST заебенило STM32CubeIDE! Кочаю и буду устанавливать на все компьютеры.
https://my.st.com/content/my_st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-ides/stm32cubeide.html
Бес понятия. У меня Кейл.
SDK это что такое? Компилятор вместе с CMSIS/SPL/HAL и прочим в одной коробке? Так просто возьми gcc и пиши мейкфайлы руками.
А что тебе мешает взять кейл? Новые версии под XP не работают? Так возьми старую версию.
запуском говнокода.
А еще при пайке EEPROM кажется перегрел ее, может быть она уже сдохла. Хз как проверить
>только какие-то uPSD
У этих архитектура 8032. Значит ты скачал кейл для 8051, а не для ARM.
И пофигу вообще на все эти списки микроконтроллеров в кейле. Это всего лишь предустановки линкера и флагов компилятора. Может лучше с ардуины начнешь, если такого не понимаешь?
>>366981
Не понял. Бред какой-то. Говнокод - это что? Кейл? Или твой код, запускаемый в кейловском симуляторе?
>Может лучше с ардуины начнешь, если такого не понимаешь?
нет, это по учебе. Да и зачем ардуино, понимания от этого не прибавится же, это просто поиграться.
>Говнокод - это что?
>твой код?
да
>Да и зачем ардуино, понимания от этого не прибавится же
Пердуина это плата с программируемым микроконтроллером, только несколько помедленней чем STM32 и с более слабой периферией. Так что если ардуина не даст никакого понимания, то STM32 тем более.
>да
Это сильно. Для этого, для начала тебе придется взломать симулятор, потом... Просто бред. Да и вообще не обязательно запускать код в симуляторе. Или твой код неким чудодейственным способом сломает компьютер при загрузке в микроконтроллер?
Ладно бы ты еще боялся пожечь порты, это еще как-то возможно, но это просто невероятный бред.
Кстати, 5-ых кейлов много разных версий. Там даже компилятор практически сменили в одной из версий - был на основе gcc, стал на основе llvm. Какие-то версии кейла 5 наверняка должны работать под XP.
>Так что если ардуина не даст никакого понимания, то STM32 тем более
Какого понимания? Что конкретно? Ты тут писал >>366986
>У этих архитектура 8032. Значит ты скачал кейл для 8051, а не для ARM.
>И пофигу вообще на все эти списки микроконтроллеров в кейле. >Это всего лишь предустановки линкера и флагов компилятора. >Может лучше с ардуины начнешь, если такого не понимаешь?
При чем тут ардуино вообще?
>Это сильно. Для этого, для начала тебе придется взломать симулятор, потом... Просто бред
Ладно, я наверное ошибся. Дело не в моем коде, а скорее в правильно спаянной схеме, и исправности компонентов. Может быть что-то где-то замкнет, и...
>Какого понимания?
Вот и я про то же. Про какое понимание ты писал? Про понимание общих принципов работы микроконтроллеров? Так для этого ардуина вполне подходит, и не сожгешь ничего.
И зачем ты процитировал фразы, касающиеся архитектуры? Еще раз повторяю: ты взял 4-ый кейл не для ARM. Кейл бывает для архитектур ARM Cortex-M, 8051, C166 и 80251. Все это разные компиляторы и IDE.
Потом, даже если в списках кейла нет твоего микроконтроллера - это не помешает компилировать в кейле код для твоего микроконтроллера. Для этого нужно выбрать архитектуру, задать параметры для линкера и некоторые флаги компилятора. Необходимо только чтобы в этом кейле был компилятор для нужной архитектуры (ARM Cortex-M).
>Может быть что-то где-то замкнет, и...
И нихуя, если только не подашь на вход 220 В или что-то в том же роде. Но даже если так боишься, то грузи программу в STM32 через UART с гальванической изоляцией, тогда даже если киловольт подашь, все равно компьютеру ничего не сделается.
Теперь понял?
Теперь понял, спасибо анончик
>Прерывания на передачу не нужны
Как не нужны, не блокируя ж высылать данные. А в главном while'е постоянно проверять не хочется, всё намешано в одну кучу в итоге будет.
>на realtime исполнение. Просто дописал в мануале - пока не выполнится текущая команда, данные новой команды не отображаются, пока не закончится выполнение программы.
Никого риалтайма, я и не против такой иметь, даже лучше, когда не смешивается.
Ты почему-то всё на обработку входа упор делал, но у меня вопрос-то был лишь о синхронизации передачи из двух мест (ответ на команду и эхо).
>ты физически не сможешь записать что-то в регистр передачи
Это если я только эхо имею, не? Но ведь я могу и, скажем, ответ на предыдущую команду в этот момент передавать.
Вот, например, такой код — https://pastebin.com/aNMj0gvi. Скорость 300 выставил, разумеется, чтобы наблюдать за всем. При нажатии кнопок (в любой момент) диод мигает, счётчик циклов инкрементируется, соответствующее количество сообщений отправляется, то есть всё куда и когда надо приходит. Но вот никакого эхо нажатых во время получения сообщения кнопок нет, потому что регистр перезаписывается отправкой сообщения, о чём я и говорил. (Не очень понимаю, правда, почему он проверку на TXE проходит.) Раскомментировав строку 22 всё выходит нормально — и сообщение приходит, и эхо (смешивающееся с сообщением, да). Ну или проверку отправки сообщения тоже можно на if ((USART1->ISR & USART_ISR_TC) == USART_ISR_TC) заменить, но почему-то везде TXE используют.
В общем, спасибо, буду пытаться делать через кольцевые буферы. И >>366918 тебе тоже.
Без понятия на счет всех этих регистров, т.к. c STM32 очень давно ничего не делал. Но у тебя получается примерно такой алгоритм:
1) Если что-то пришло, то отправить на выход.
2) Если буфер передатчика пуст, то вывести очередной символ из usart_out_buff.
3) Перейти к пункту 1.
Ну и что ты хотел? Выводишь в пункте 2 символ и не дожидаешься окончания передачи, в результате сразу можешь перейти к пункту 1, когда буфер передачи еще не пуст. Это как-то нелогично.
Почему бы не выводить только из одного единственного FIFO?
1) Сделать два FIFO, один на передачу, другой на прием.
2) По прерыванию записываешь принятый байт в приемный FIFO.
3) Где-нибудь выдаешь байты из FIFO на передачу в регистр TDR. Это можно сделать как угодно - по прерыванию или задействовать ПДП.
4) В основном цикле переписываешь байты из приемного FIFO в FIFO на передачу и делаешь разбор команд и выполнение команд. Там же дописываешь в FIFO на передачу свои сообщения.
В результате ничего не путается и все хорошо. Конечно, в этом случае эхо будет ждать пока не выполнятся команды, но разве это плохо? Наоборот, вывод команды не будет путаться с эхом. Даже циклы вида while ((USART1->ISR & USART_ISR_TC) != USART_ISR_TC) {} при таком подходе не требуются.
У тебя в структуре где-то наползание данных на другие, на переменные твоего шима. Смотри адреса пепеменных и ближайшие массивы, вполне возможно что вылез за пределы чего-то если пользуешься указателями, 90% что твой проеб
> Это если я только эхо имею, не?
Да, я что-то не подумал, что тебе нужно ещё кроме эха отправлять, лол
>Ну и что ты хотел?
Не, я примено это и ожидал, просто тот анон говорил, что никакие ожидание не нужны и хоть в прерывании сразу отвечай (забыв про не эхо оказывается), что меня смутило, вот я и проверил.
>но разве это плохо?
Это даже хорошо и я именно так всё и сделаю, да.
Почаны, пришла тут моя стм32ф746, вся красивая такая. Ну я заебенил "Хэлоу Ворлд" и решил залить взад демку. Откомпилировал, залил, а тут такая хуйня. Картинки не картинки, а одни полосы. Это плата наебнутая или что-то с Кейлом?
>картинки побились
Всё оказалось намного хуже. Там бинариник весит 18 мегов и прошивается только с внешним загрузчиком. Я пока еще до конца не отдуплился.
Есть SPI и DMA и флеш память.
Во-первых, нормально ли смешивать и DMA, и обычный блокирующий способы вместе? Например, если нужно отправить 1-2 байта. Например, делать вот так:
>send_instruction(instruction) { SPI->DR = instruction}
>send_address() { SPI->DR=addr[23:16]; wait_for_busy_clear(); [16:8]..., [7:0]... ; }
>send_data() { dma->cndtr = size; dma->maddr=out_buf; enable_dma_tx_ch(); }
При только отправке можно было бы и в буфер запихнуть команду с адресом и разом выслать, а вот при приёме-то как быть? Если запихнуть команду и адрес в буфер, то первые 4 байта приёмного буфера будут мусором.
Может есть ли какой-то красивый способ это обойти? Мне в голову приходит только использование с с n-ого байта (что как-то глупо), либо двойное включение tx dma за одну "транзакцию". (tx, затем tx и rx.).
И вообще, правильно ли я понимаю, что в SPI для работы rx dma нужно делать вот так:
>rx_dma->cndtr = size;
>rx_dma->mar = inbuf;
>tx_dma->cndtr = size;
>tx_dma->mar = outbuf; // musor
>rx_dma_enable();
>tx_dma_enable();
? Ведь без отправки данных ничего получено не будет. Вроде тот же HAL именно это внутри и делает.
Может есть где хорошие гайдланы по работе со всеми этими интерфейсами не в стиле "вот есть spi, там sck, miso mosi, такты биты пишутся,", а затем сразу хуяк и hal_receive() используйте. А как именно это всё в коде организовано на низком уровне нигде не описано, только код библиотек читать если.
И ещё, можно ли писать в в выходной буфер DMA во время передачи данных? Хотел для дисплея сделать dma в circular режиме, который бесконечно высылает данные и обновляет экран как можно быстрее. А когда у меня кадр изменяется, я просто пишу в этот буфер и не волнуюсь ни о какой необходимости запускать передачу данных. Но что-то не работало и чип крешился. Вполне вероятно, что я криворук и проблема совсем в доругом была.
Задача состоит в том, чтобы найти по для этих штук.
>>368901 (OP)
При подключении к комплюктеру определяется как Prolific USB-to-Serial Comm Port.
На SD карте небыло ничего, на одной вообще нет разъема под карту.
>На SD карте небыло ничего
Ну закинь туда тхт-файл попробуй. Ты с чего решил, что если там стоит стм-камень, то в этом треде все обмазываются бегущими строками? Там с таким же успехом мог стоять камень от NXP, TI, Microchip, etc.
Ну не знаю. Из отдельного треда меня выгнали и отправили сюда.
А что конкретно из этого должно помочь?
Предполагается методом подбора подтыкнуть софтину?
>>368926
Нет, тхт файл не катит. Должен быть специальный софт, которого овер дохуя, потому что, как я понял, все эти строки собираются кустарным способом и софт может писаться под конкретный модуль конкретным сборщиком. Кстати, как залить тхт файл на устройство без СД слота, при условии, что винда не видит его как диск?
Если бы можно было определить модель и скачать под нее софт, я б не дергал тут всех тупыми вопросами.
>Если бы можно было определить модель и скачать под нее софт, я б не дергал тут всех тупыми вопросами.
Ты дольше тут ебешь мозга, чем поустанавливал бы десяток софтин и попробовал бы поуправлять своим бегущим говном.
Я ебу мозга и попутно как раз этим и занимаюсь. Но пока шо то нихуя не выходит. На самом деле, я надеялся, что местные сталкивались с этими моделями и гомоебли с подбором софта будет намного меньше. Похоже не фартануло, поэтому возвращаемся к плану А - подбор софта наугад.
На третий день этих мероприятий я понял, что легче поменять ебучую управляющую плату.
Если б я умел, то однозначно бы занялся. Но чудесный мир программирования для меня пока ни разу не понятен.
А не, я тебе спиздел. Нихуя не инициализируется.
А что у тебя не получается? Клок включил на таймер? Таймер инициализировал? Таймер запустил?
В SPI1->TXCRCR лажа какая-то, какой бы полином ни выбирал. При этом их описание работы crc калькулятора из application notes'ов именно это и выдаёт (если я руками реализую их алгоритм). Приходится руками софтварно считать другим способом ( https://www.pololu.com/docs/0J1?section=5.f ).
Так лучше видно?
Вот эта ёбань, но толку от видео ноль
https://www.youtube.com/watch?v=5DOhCgzGMZc&t=97
>Вот эта ёбань, но толку от видео ноль
У него программа там "MiniLED Display V2.49.exe" ее и ищи.
Вот у него мануал на его залупу https://vk.com/doc-90535217_377165870?dl=fb6c7d18e08b744680
На сайте ST есть какая-нибудь загогулина, чтобы не выкидывало из авторизации через пять минут? Нахой они такую хуйню сделали? Чай не банк-онлайн.
Огромное спасибо! А как ты прогу опознал?
>Они починили авторизацию?
А когда она ломалась? Меня просто заебало выкидывание из авторизации минут через двадцать. Будто йоба-секретный сайт какой-то.
Слушай, с той софтиной всё заработало, огромное тебе спасибо! Может ты и для такой модели софт знаешь?
https://ledcl.ru/produkciya/beguschaya_stroka_mini.html
Модель называется P5. Я действительно пытался гуглить и подцепить её к такому же софту, как и предыдущую.
>огромное тебе спасибо! Может ты и для...
Не в тему, но как обычно "ой спасибо, а может ты это еще сделаешь, а может потом это?" Естественно за спасибо, возможно даже большое. Я не тот чел, который тратил на тебя время и искал твое говно, но блять, имейте совесть, ты собирался платить кому-то деньги за это, ну кинь на кефир тому анону хотя бы 20% от того что ты собрался заплатить.
Именно из-за такой хуйни перестал кому-либо в чем-либо помогать, хотя иногда даже хочется и все на то имеется, но идите нахуй, вот что я думаю.
Ну так какие ж проблемы!? Я не жадный, куда и сколько кидать?
Сап, оч нужна помощь с курсачом. Есть даташит STM32, https://www.st.com/resource/en/datasheet/cd00210843.pdf
Предположим я беру микросхему пикрил 1.
Вопросы:
1) Пик 2 - что из этого обвязка, а что нужно выкинуть? Выдрал это из другой схемы, без понятия что для чего.
2) В какие конкретно пины втыкать Пик3 ? оптопара (1 выход), терморезистор (1 выход), реле (2 выхода).
3) Есть дисплей Пик 4, как его через I2C прихуячить?
Я не особо надеюсь на помощь тк постинг тут крайне не высокий, но вдруг.
>помощь с курсачом
Судя по вопросам тебе скоро нужна будет помощь в наматывании портянок и подметании плаца ломом. Как ты собрался писать курсач абсолютли нихуя не понимая? Из обвязки тебе понадобится только питание, кнопка сброса. Тактирование врубишь от внутренних генераторов. Подключаешь на какой тебе порт нравится. Терморезистор надо на вход ADС. Как дисплей твой по I2C подключить, никто тебе не расскажет по твоей картинке. Давай название и нормальную распиновку.
>чудить разную хуйню
Бери https://robotdyn.com/mega-wifi-r3-atmega2560-esp8266-flash-32mb-usb-ttl-ch340g-micro-usb.html на Али продается (будешь сидеть сразу на 2х стульях с пиками и хуями). Как минимум не будешь ебать мозги - ой у меня выводов нехватает.
>Мозги не нужны.
Твои перспективы тут >>369606 >>369707
Бля. Не туда закопипастилось.
стм32-боги, есть у кого-нибудь https://leanpub.com/mastering-stm32 release 0.26? Нашёл 0.21 только.
А мне вот непонятно почему именно STM32, разве на STM32 те же кортексы заканчиваются? Это как-то подозрительно.
>Цена
Но микрочиповские даже немного дешевле вроде как. Конечно если не рассматривать алипомойку. Но при чем тут вообще цена? Все равно на остальные компоненты потратишь на порядок больше.
>комьюнити
Зачем? Хватает вменяемой документации.
>дешевизна китайских программаторов
Программатор для этих микроконтроллеров - это переходник USB-UART. А отладчики тоже не намного дороже, например клоны J-Link.
>>369799
Я немного про другое. Почему эта книга только по STM32?
>Почему эта книга только по STM32?
У автора спроси, нравится вот ему стм.
Потому что он там объясняет всё на примерах STM'овских библиотек. Да, есть и "общая" часть, и краткие описания всяких протоколов, но это больше прикладная книга, а не теоретическая я всю не прочитал ещё, могу и ошибаться, поэтому и написать её обобщённо для всех кортексов, чтобы хоббиисту васе, которому просто диодом плавно помигать через pwm хочется, было понятно, как это реализовать именно на его мк, вряд ли было бы возможно.
Ну, наверное и можно было, но тогда всё через CMSIS и вилкой делать, всех распугаешь и на ардуину уйдут.
У меня чота она вообще не отображается, а изображение сохраняет нормально. Попробую сейчас поправить в Акробате.
Да не за что. Надеюсь Carmine Noviello не обидится, что несколько анонимасов бесплатно почитают его труд.
Аноний, я сам люблю покупать твердые копии, но 30 бачинских в данный момент для меня задохуя.
Перспективнее изучать сишечку. После сишечки стоит изучить документацию на микроконтроллер, а только потом библиотеки.
>изучить документацию на микроконтроллер
Толку? Например, на usb ядро в stm32 документация завязана на hal. Чистого описания этого ядра я не нашел.
на stm32f103 за 1.5$
на stm32f407 за 12$
Есть что-нибудь в промежутке этих цен?
Мм, шизик не освоил атомарные операции, а виновата микросхема.
Я тот анон, что писал >>357418
В чем шизоидность? Я пробовал все эти процессоры, без SPL/HAL/LL/Интернета, руководствуясь только документацией и говорю как есть на мой взгляд. Возможно тот кто пользуется обертками, и не сильно заметит разницу, но конкретно в железе они отличаются не в пользу F1.
>>369969
>Какой же из ультрадешевых?
Что в твоем понимании ультрадешево? Ты возьми любое изделие и посчитай его цену, доля микроконтроллера едва ли 10% наберет от всей стоимости. Скорее нужно спрашивать не "что самое дешевое?", а что наиболее подходящее для твоих задач
Если что-то рутинное, простое, подобное изделиям на ардуино, примочки, управление дисплеями, датчиками и всяким таким - смело покупай F0
Применения для F2 при их цене я не нашел, производитель видимо тоже, их ассортимент ограничен несколькими моделями без какого либо изюма. Хорошее количество ОЗУ, но отсутствие FPU ограничивает его применение для обработки сигналов, где ОЗУ нужно. Разве что для применений с большим экраном, изображениями или перепаковками каких-то тяжелых пакетов, не знаю, правда.
F3 -хорош также как F0, более могучий DMA, аналоговая периферия и особенности типа субнаносекундных таймеров и медленных но 16 битных АЦП, осторожно, мало ОЗУ, хороши когда хочешь повысить точность своих поделок на F0 и применять числа во float. Для обработки сигналов подходят слабо ввиду малого ОЗУ, нет такой приятной вещи как в F0 сигнал DE для RS485.
Ну и F4 - щедрый процессор, хорошо подходит для обработки спектра, фильтрации, и прочих обработок сигналов. Хорош всем, кроме одного, и это не цена, это значительно большее количество регистров и новичок просто охуеет и даже не сможет настроить RCC чтоб включить его (про генераторы кода типа Куба не упоминаю) и скорее всего выкинет на полку.
Если ты не знаешь что тебе нужно - бери F0. Жопа не пригорит, 48МГц считает все довольно резво. На F071 даже на 1024 точечный БПФ ОЗУ хватит. Купи макеток с 030F4P6 по $1 и делай свои махарайки, а там сам поймешь что тебе надо.
Я тот анон, что писал >>357418
В чем шизоидность? Я пробовал все эти процессоры, без SPL/HAL/LL/Интернета, руководствуясь только документацией и говорю как есть на мой взгляд. Возможно тот кто пользуется обертками, и не сильно заметит разницу, но конкретно в железе они отличаются не в пользу F1.
>>369969
>Какой же из ультрадешевых?
Что в твоем понимании ультрадешево? Ты возьми любое изделие и посчитай его цену, доля микроконтроллера едва ли 10% наберет от всей стоимости. Скорее нужно спрашивать не "что самое дешевое?", а что наиболее подходящее для твоих задач
Если что-то рутинное, простое, подобное изделиям на ардуино, примочки, управление дисплеями, датчиками и всяким таким - смело покупай F0
Применения для F2 при их цене я не нашел, производитель видимо тоже, их ассортимент ограничен несколькими моделями без какого либо изюма. Хорошее количество ОЗУ, но отсутствие FPU ограничивает его применение для обработки сигналов, где ОЗУ нужно. Разве что для применений с большим экраном, изображениями или перепаковками каких-то тяжелых пакетов, не знаю, правда.
F3 -хорош также как F0, более могучий DMA, аналоговая периферия и особенности типа субнаносекундных таймеров и медленных но 16 битных АЦП, осторожно, мало ОЗУ, хороши когда хочешь повысить точность своих поделок на F0 и применять числа во float. Для обработки сигналов подходят слабо ввиду малого ОЗУ, нет такой приятной вещи как в F0 сигнал DE для RS485.
Ну и F4 - щедрый процессор, хорошо подходит для обработки спектра, фильтрации, и прочих обработок сигналов. Хорош всем, кроме одного, и это не цена, это значительно большее количество регистров и новичок просто охуеет и даже не сможет настроить RCC чтоб включить его (про генераторы кода типа Куба не упоминаю) и скорее всего выкинет на полку.
Если ты не знаешь что тебе нужно - бери F0. Жопа не пригорит, 48МГц считает все довольно резво. На F071 даже на 1024 точечный БПФ ОЗУ хватит. Купи макеток с 030F4P6 по $1 и делай свои махарайки, а там сам поймешь что тебе надо.
> Я пробовал все эти процессоры, без SPL/HAL/LL/Интернета, руководствуясь только документацией
Было бы хорошо услышать конкретику, возможно, даже baremetal-код, на котором глючит f103. Все-таки инженеры, а не в церкви богу молимся.
>доля микроконтроллера едва ли 10% наберет от всей стоимости.
Вот на картинке почти универсальное устройство. Только вместо монитора приделать светодиод. Еще можно оставить только одну кнопку, нуль/единицу определять длительностью нажатия.
Лично у меня на F103zc - стандартный глюк с iic и при включении FSMC - не отключался сигнал NADV или какой-то такой в районе PB9-PB14 - из-за него нельзя было использовать IIC на этом выводе.
в blue pill 103c8t6, там fsmc нет.
Обновлять сразу после покупки не надо? А то с аспами китаёзы до сих пор старую прошивку льют последняя версия вышла в 2011, сука, году, а они ещё более холодный труп ебут.
Обновляю регулярно и работает.
Он почти в 7 раз дороже, а кроме stm'ок я в ближайшее время ничего брать не планирую.
Бери пару stlink'ов, в один можно вшить blackmagic probe и использовать как swd отладчик для почти любых армов.
Для bmp лучше подойдет стлинк как на пике (у него для swo отдельный вывод и uart tx rx отдельные), подробнее тут https://wiki.cuvoodoo.info/doku.php?id=jtag
С клонами jlink'а та еще лотерея - мой v9 в 17 году после покупки только один раз нормально обновился, потом приходилось разбирать и шить внешним отладчиком, тут стена плача https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=59841&page=52
>вшить blackmagic probe и использовать как swd отладчик
Не советуй глупости.
>С клонами jlink'а та еще лотерея
Ну прошил и готово, подумаешь проблема. У кого-то и так нормально работает. Либо можно взять оригинальный недорогой J-Link EDU.
>Не советуй глупости.
Поясни плз, чому глупости?
Ещё удобно и то, что у bmp на виртуальном com-порту gdb-server и не надо ебаться с openocd
>Ну прошил и готово, подумаешь проблема.
Каждый раз прошивать внешним отладчиком при выходе обновления? У меня от этого уже пара защелок на корпусе отломалась - часто разбирал. А если не прошивать - алерты об устаревшем firmware.
> У кого-то и так нормально работает.
Лотерея же.
> Либо можно взять оригинальный недорогой J-Link EDU.
5-6к руб против 200руб, да ещё и алерты об educational purposes.
Хотя сейчас поставил бутлоадер из "стены плача" и обновился до 6.46g, но виндовый файрвол успел блокировать попытку сходить jlink-config'а в инет - сейчас бы и мой serial id в blacklist попал.
Как вариант - видел реализацию синуса или еще чего ШИМом.
Таймер сам выгребает нужные значения по прерываниям, а не заходишь и выходишь из прерывания каждый раз при переполнении или совпадении.
>Таймер сам выгребает нужные значения по прерываниям
По каким прерырваниям? dma?
>а не заходишь и выходишь из прерывания каждый раз при переполнении или совпадении.
что dma прерывания обрабатываешь, что tim - не вижу разницы.
И как таймер может что-то выгребать?
Кароч, я мало что понял. Хочу код, плз.
Ахуенный пример - спасибо
>еще одна
Я там еще десяток битых картинок поисправлял. Заебало. Не буду же я за Кармина всю книгу переверстывать.
Вечером еще до конца досмотрю, может еще попадутся поломанные. Исправлю и выложу.
Мне кажется это просто говнообменники файл покоцали. Я не думаю, что ориджинал книга за 30 денег будет с такими заебами.
Просмотрел
>А есть вариант
Есть. Выучить ангельский и сидеть самому переводить.
У меня была мысля, поэтапно изучать книженцию и переводить яндекс-транслейтом. Но потом чота перехотелось.
Сюда пиши.
>про модификацию прошивки
Исходники есть? То-то! Это не модификация, а написание новой прошивки уже.
Нету исходников и я не собираюсь писать новую. Я хочу дампнуть текущую прошивку, дизассемблировать ее (опыт ковыряния бинарников для ARM есть) и пропатчить где надо.
В продолжение.
Я уже прочитал что на чипе можно установить защиту от чтения путем установки байт опций RDP. Хз установлена она или нет в устройстве которое ко мне едет, но проверять буду.
В общем, я вроде разобрался что мне нужен программатор ST-Link. Один из. Там разные версии и от разных вендоров. Какой посоветуете?
И как подключиться программатором к микрухе чтобы хотябы проверить стоит ли там защита на чтения или нет? К каким пинам и в каком режиме?
>Я уже прочитал
Молодец, вот так бы сразу.
>я вроде разобрался что мне нужен программатор ST-Link
Или можно через bootloader слить прошивку.
Присоединюсь к мнению анона выше, похоже что модератора-мудака.
Есть несколько вариантов:
1) Есть схема. Тогда ты пишешь прошивку самостоятельно. Не знаю что ты там собрался контролировать, но вряд ли это сложное устройство.
2) Схемы нет, но есть бинарник. Ну, тогда можно подредактировать строки и что-то еще по мелочи, не особо вникая в алгоритм работы. Но для этого нужно этот бинарник получить, что при включенной защите от чтения и отладки (которая там есть) будет затруднительно и вообще не целесообразно.
3) Рисуешь схему по печатной плате самостоятельно и далее как в п.1.
В любом случае, занимаешься ты ерундой.
Ты просто не читал что я в треде своем написал >>370903 (OP) (OP)
Там все черным по серому написано нахуя мне это нужно и с чем мне предстоит работать.
И еще раз - мне нужна помощь по выбору именно инструментария. Че там уже дальше с устройствои и прошивкой делать - я сам разберусь.
>ST-Link. Один из. Там разные версии и от разных вендоров. Какой посоветуете?
>И как подключиться программатором к микрухе чтобы хотябы проверить стоит ли там защита на чтения или нет? К каким пинам и в каком режиме?
Если есть ссылки где подобное все достпно описано, можно их кинуть.
БТВ, может я что-то не понимаю, но судя по документу в F1 нету защиты от чтения (RDP)?
http://www.emcu.it/SILICA-STDay-2016/X/Presentazioni/2_STM32&SecureElements.pdf
Собственно сабжевый контроллер, прошивку которого я хочу реверснуть, как раз STM32F1.
Так все, разобрался. Преза говно, даташиты рулят.
В общем там есть RDP, но двухуровневый - без всякой перманентной защиты и отключения JTAG/SWD.
>>370920
>Или можно через bootloader слить прошивку
Нельзя. Во всяком случае я не нашел такой опции во встроенном бутлоадере, а код запущенный из SRAM при включенном RDP флэш тоже читать не может.
Есть вроде кулибины которые умеют разобрать микруху, добравшись до ядра, и как-то там отключить защиту, но процедура стоит 120к деревянных.
В общем, куплю программатор, подрублюсь к контроллеру и посмотрю есть ли защита. Если нет - буду веселиться. Если есть - ну и хуй с ним.
По поводу выбора ST-Link вопрос все еще акутальный.
>Нельзя.
Вот и я о том же. Если защита не стоит, то можно. А если защита стоит, то проще написать все заново. Также может оказаться что проще подключиться к UART для доступа к бутлоадеру, чем к SWD. Поэтому переходник USB-UART может пригодиться.
Плата не многослойная? Так просто перерисуй с платы схему и прошивку сам напиши.
>По поводу выбора ST-Link вопрос все еще акутальный.
Бери любой. Сам можешь убедиться, что в этом треде многие пользуются чем попало с алиэкспресса. Гальваническая изоляция тебе же не нужна?
Не для программатора, а для отладчика. Очевидно что для случаев, когда земли у компа и отлаживаемого устройства разные, с разными потенциалами, и соединять их нельзя.
Например, когда устройство запитывается от сети через блок питания без гальванической изоляции.
Чот я читнул, что 2 уровень защиты rdp если поставили, то уже снять невозможно - никакие стирания не помогут.
Ну и что? Перепаять микроконтроллер дело на десять минут.
>Поэтому переходник USB-UART может пригодиться.
Уже имеется.
>А если защита стоит, то проще написать все заново.
Овчинка выделки не стоит. Устройство не сказать что сложное (повторюсь, это контроллер для водянки с OLED дисплеем), плата двуслойная. Но оно и из коробки в общем то нормально работает, а через патч прошивки я хотел небольшие косяки поправить и немного кастомизировать. Так что если там окажется защита, я просто забью.
>Гальваническая изоляция тебе же не нужна?
А какая цена вопроса? Подобные плюшки лишними не бывают.
В принципе, я этот контроллер хочу запитать от отдельного испульсного БП, но там же должен быть понижающий трансформатор который и обеспечит гальваническую изоляцию.
Кстати, в таком случае, когда комп и отлаживаемое устройство от разных БП запитаны, пусть и в обоих есть гальваническая изоляция, можно объединять земли? Что-то я не задумывался над таким вопросом.
> Кстати, в таком случае, когда комп и отлаживаемое устройство от разных БП запитаны, пусть и в обоих есть гальваническая изоляция, можно объединять земли?
Ну если у тебя интерфейс дифференциальный между компом и железкой, можешь и не объединять, а если обычный - как оно у тебя работать-то без земли будет?
>если у тебя интерфейс дифференциальный между компом и железкой, можешь и не объединять
Бред. Особенно если USB или LVDS, например. Или взять к примеру простейший дифференциальный усилитель на двух транзисторах.
Бывают разные дифференциальные интерфейсы, некоторым нужна земля, а некоторым нет.
Это верно, но ничто не мешало бы поставить резистор у хоста и не тянуть землю, разумеется если не требуется переключать ls/fs.
>Это ты так хитро выебнулся?
Нет, хочу увидеть при каких условиях может сгореть и как пойдет ток.
>Только для трансформаторов и оптопар тоже будет ограничение, пусть и значительно выше.
Можешь нарисовать путь тока пробоя межобмоточной изоляции при гальванической развязке трансформатором?
К чему этот вопрос? Ты сам что-ли не можешь? Какие-то SPICE-модели еще захотел... Ты или траллишь или просто идиот.
Вон выше была картинка со схемой блока питания без гальванической развязки. Допустим соединили выход этого блока питания с землей (например через корпус компьютера), что будет в результате? Если соединить не напрямую, а через пробитый трансформатор или оптопару, то что-то существенно изменится?
Но гуманитарий и просто идиот тут только ты.
Хорошо, я упрощу. Что будет, если фазу соединиить с землей?
О каких spice моделях можно тут говорить, если большинство, включая тебя, тут даже ТОЭ не могут осилить?
Ты вообще о чем? Тебе рассказать чем ноль от фазы отличается? Обойдешься, за этим - в гугл и учебники.
Шизиком и гуманитарием тут только ты себя показываешь.
>ноль-фаза
Я не про твои тупые ужимки-маневры, а про цепь тока конкретного случая с пробоем при гальванической развязке трансформатором.
Может у тебя и батареечные устройства пробивает, довен?
Пиздеть легко, типа "f1 ето говно", а подкреплять пиздежь техническими фактами трудно. Ты не смог.
Какого конкретного случая? Который ты только что выдумал? Ну давай тогда схему рисуй.
Зачем мне это делать? Твою безграмотность ликвидировать? Тебе уже ничего не поможет.
Что ты вообще пытаешься доказать? Что гальваническая развязка - это глупости и она никогда не нужна?
>Что гальваническая развязка - это глупости и она никогда не нужна?
Пошло бинарное мышление, как психическая защита.
>допустим тут пробило
Блядь, даун, я спрашивал про это? Где в эзернет трансформатор соединен с нейтралью? Хули вы кукарекаете про синфазное, если такая схема пробоя не работает с устройствами на батарейках? Может дело не в синфазном, пиздоболы-дебилы без высшего образования?
Одним концом одна обмотка эзернетовского трансформатора соединена с корпусом компа, пусть не напрямую, а через какой-нибудь маломощный транзистор или еще что-то полупроводниковое. Корпус компа соединен с землей, а земля соединяется с нулем где-то там.
>одна обмотка эзернетовского трансформатора соединена с корпусом компа, пусть не напрямую, а через какой-нибудь маломощный транзистор
Во бред
>Корпус компа соединен с землей, а земля соединяется с нулем где-то там.
C защитным нулем. Вообще, хуй его знает, что ты спизданул своим сленгом электриков из жэка. Понят однозначно невозможно.
>где-то там
Мм, сам точно не знает, а гонору как у первокура.
>Во бред
Бред у тебя в голове. Эзернетовский трансформатор ни с чем не соединяется? Или минус компьютерного блока питания не соединяется с землей?
>землей
Какой землей? сигнальной, защитной, силовой? Научись четко выражать свои мысли, самоучка.
>Какой землей?
Очевидно с той, которая в розетке.
>сигнальной, защитной, силовой?
И что, у этих земель настолько сильно разные потенциалы и сопротивления, чтобы это было существенно в данном случае?
Ты соединил два выхода? Ну ладно.
https://ru.wikipedia.org/wiki/Синфазный_сигнал
>Синфазный сигнал — составляющая аналогового сигнала, присутствующая с одним знаком, амплитудой и фазой на всех рассматриваемых выводах. В электронике, где сигнал передаётся с использованием напряжения, синфазный сигнал определяется обычно как полусумма напряжений
Напряжений относительно чего, применительно к трансформаторной развязке? Должно быть относительно общего провода приемника или передатчика сигнала. Если уровень сигнала намного меньше синфазного напряжения, то синфазное напряжение будет приблизительно равно напряжению между обмотками трансформатора. Естественно, что при каком-то уровне напряжения трансформатор пробьет и он в результате перестанет выполнять свои функции. Аналогично с оптопарами.
И что дальше? Если между твоими GND1 и GND2 включить источник напряжения на много киловольт, то трансформаторы пробьет. Если не включать, а оставить болтаться в воздухе, то естественно ничего не будет, кто тут с этим спорил?
Помимо того что у тебя на схеме соединяются два выхода, еще и соединяются Vcc диодных мостов. И полярность питания зачем-то отрицательная.
Так значит все-таки нет никаких ограничений по величине синфазного напряжения для гальванической развязки с трансформаторами или оптопарами?
Подзаебал твой гуманитарный треп. В техническом универе ты тоже так бредил?
На википедии определение неправильное?
>В техническом универе ты тоже так бредил?
Я же самоучка, ты что? В такой параше как ты, не имел удовольствия обучаться.
Так или иначе, синфазному напряжению будет равно напряжение между какими-то двумя точками в устройстве. Или ты с этим тоже поспоришь? При каком-то определенном напряжении между двумя проводниками, возникнет пробой. С этим тоже будешь спорить? Соответственно при определенном уровне синфазного напряжения возникнет пробой и для любого устройства будут определенные ограничения по синфазному напряжению.
Тоже мне, дипломированный специалист нашелся. Не удивительно что у нас электроника в такой жопе, если выпускают таких специалистов.
Каков же все-таки пиздец. Отрицать то, что при определенном напряжении между чем бы то ни было, не будет возникать пробой.
Напомню, что придрался ты к высказыванию о том, что ограничения по синфазному напряжению будут и при трансформаторной развязке.
>придрался ты к высказыванию о том, что ограничения по синфазному напряжению будут и при трансформаторной развязке.
Переврал
>ограничения по синфазному напряжению будут и при трансформаторной развязке.
>даже при батаречном питании
>хотя при чем тут синфазное? не знаю, я дебил.
Ну даже не знаю, а это что такое? >>371068 Заметь, там не было утверждений что без общего провода дифференциальные интерфейсы с трансформаторной развязкой вроде эзернета не будут работать.
В ответ на утверждение о том, что для трансформаторной развязки будет ограничение по синфазному напряжению, ты стал придираться, причем весьма невнятно.
Внятных высказываний с твоей стороны не было, вообще трудно было понять к чему конкретно ты придирался. Может у тебя с русским языком плоховато? Или просто читал жопой? Или ты хотел сказать, что любые дифференциальные интерфейсы без гальванической развязки способны работать без земли?
> ты стал придираться, причем весьма невнятно.
Что? Просто попросил показать путь тока, или дать spice-иллюстрацию. По-моему, невнятен ты, абсолютизируя синфазность.
Путь тока при пробое трансформатора от повышенного напряжения между обмотками? Заметь, речь не о том откуда взялось синфазное напряжение.
>И да, ограничение будет вне зависимости от источника питания.
Тогда чего ты агришься на батарейки?
>не о том откуда взялось синфазное напряжение.
Если ты нарисуешь путь тока, то в цепи я уж как-нибудь найду источник напряжения.
Ты случайно не жопой тред читаешь? Последовательность событий была такова:
1) Кто-то написал, что дифференциальные интерфейсы будут работать, если не соединять земли.
2) Я уточнил, что не все. Например LVDS так может работать фигово. Кстати, это может относится не только к передаче цифровых сигналов, но и к передаче аналоговых сигналов.
3) Какой-то анон написал про токи, которые будут от этого течь. Я такой ситуации представить не смог, для случая когда между землями приемника и передатчика не стоит источника напряжения, если что.
4) Ты потребовал от него spice-иллюстрацию. Если честно, то я знаю что такое spice-модели, но без понятия что такое spice-иллюстрация.
5) Он в ответ тебе написал что для всяких дифференциальных входов без гальванической изоляции требуется определенный диапазон common mode voltage, который может не обеспечиваться, если не соединять земли.
6) Я, в ответ на это написал, что определенный диапазон синфазного напряжения требуется и для других устройств. Да хоть для проводов на изоляторах. Также я удивился зачем тебе понадобилось spice-моделирование, когда можно было обойтись моделью из нескольких резисторов и источников тока или напряжения.
7) И тут ты начал выебыватся на меня.
Как мне надо было понимать такое? Вот я и не понял о чем ты. До сих пор не понимаю твой лепет. Но в результате этого идиотского обсуждения у меня остался единственный вариант - ты утверждаешь, что для некоторых многополюсников нет никаких ограничений по синфазному напряжению.
>батарейки
Потому что это абсолютно ни при чем. Ты бы еще написал что в данном случае будет какая-то разница в зависимости от топлива, на котором работает электростанция.
>Потому что это абсолютно ни при чем.
Ну, конечно. Нарисуй путь тока пробоя трансформаторов при батареечном питании.
Вместо генератора на электростанции ставишь хорошую такую батарейку, что от этого изменится?
Само по себе максимально допустимое синфазное напряжение не зависит от способа питания какого-то абстрактного устройства, потому что это характеристика этого устройства самого по себе. Ты теперь будешь спорить с тем, что максимально допустимое синфазное напряжение будет отсутствовать даже просто для проводов, висящих на изоляторах?
Так что тред ты читаешь жопой, в результате чего несешь бред.
>синфазное напряжение будет отсутствовать даже просто для проводов, висящих на изоляторах?
facepalm
Будешь спорить с определением из википедии? Синфазное напряжение может быть определено для любого многополюсника, хоть просто для проводов.
А если ты про то что синфазное напряжение может быть определено относительно земли (в горшке с цветком), то при определенном напряжении все равно случится пробой. Между корпусом устройства и этим горшком, например.
Или рисуй цепь
Или spice
Или еще какой-нибудь строгий формализм
Твои слова не однозначны технически.
Вот так чуть лучше будет.
Я уже писал, что эти напряжения относительно общего провода или корпуса. Или еще какой угодно точки, находящийся внутри устройства.
И тогда у тебя не нашлось возражений на это утверждение. А сейчас ты просто пытаешься извернуться. Может ты напишешь, что для компаратора синфазное напряжение нужно определять не относительно общего провода компаратора, а относительно чего-то еще?
Напряжения обозначают Uij, где i, j узлы/полюса.
>А сейчас ты просто пытаешься извернуться
Нет, я лишь пытаюсь понять, что ты хочешь сказать. Ок, давай страницу из книги с математизированным определением. Статья в википедии уровня пту.
для LVDS стандарт TIA/EIA-644 указывает, что синфазное напряжение на входе должно быть в пределах от 0 до 2.4 вольт. для трансформатора Ethernet типичное напряжение пробоя изоляции 1,5 киловольта, для оптопары от 2,5 киловольт и выше. за этими пределами поведение твоего приемника, трансформаторе, оптопары не определено. то есть может быть что угодно - и бывает.
если ты, анон, не соединил земли приемника и передатчика (и если электрик дядя вася не сделал это за тебя), ты не можешь гарантировать, что синфазное напряжение останется в каких-то рамках, а твой приемник LVDS, трансформатор, оптопара не гарантируют, что будут работать так, как ты ожидаешь. ты можешь понадеяться на авось да небось, и будет, как всегда.
к примеру, летит самолет, в хвосте стоит датчик чего-то с передатчиком LVDS, в кабине сидишь ты с приемником. земли приемника и передатчика не соединены, потому что все на батарейках. в самолет попадает молния, и приемник выпускает тонкую струйку дыма. или, к примеру, ты сдвинул модную фетровую шляпу на свой эбонитовый затылок и звдумчиво тронул твою конструкции пальчиком, и приемник тихо отправляется в мир иной. или просто твой передатчик лежит на бабушкином финском холодильнике Розенлев, и каждый раз, когда он включается, LVDS перестает работать. ты не можешь гарантировать, что оно будет работать, и поэтому что-то обязательно случится, может быть, не сразу.
Лучше точно знать, что не знаешь, чем знать на уровне пту, но питать иллюзии, что ты спец.
Типа кластеров.
Обьясните на пальцах и конкретном примере, почему во втором случае, как вот с такой херней >>370957 когда в БП нет гальванической развязки с розеткой, объединять земли нельзя и лучше USB через гальваническую развязку подключать? Что может произойти?
Наводящий вопрос, а если оба БП будут без гальванической развязки, то потенциала между их землями не будет и их можно объединять?
От схемотехники зависит.
Короче пришли ко мне из китая аж три голубые таблетки.
Ноги припаяны, CMSIS скачан, st-flash скомпилен, non-eabi-gcc скросскомпилен. Но вот стал я рыться в гайдах и заметил одн интересный совет. Ннада кровь из носа включить SWD https://eax.me/stm32-on-breadboard/
Если чип прошить без поднятого сериала то перепрошить его будет геморно?
>Чет вообще вголос с этого, ведь есть AtmelStudio
Так, стоп, в божественной атмел студии можно программировать под стм32? А то я ставил плагин под вижл студию для этих целей.
Атмел студио нужен для программирования 8ми битных контроллеров AVR от компании Atmel
Можно и их армы 32битные прогать, но мне не понравилось
Что плохого в жабе и хал?
>говно за которой ты будешь еще дольше вычищать?
Примеры говна в тред, пожалуйста? Куб довольно аккуратно генерит, ты его может со FrontPage-м времен 00-х спутал?
Хз уебищно. Я люблю писать наглядно и максимально понятно, что бы как книга читалась. Куб срет своими комментами и очень кривым интерфейсом функций.
>>374534
Пик, понятно, что высрать прототип на нем в 100 раз быстрее, но блядь, дрочить строки как на 2ом пике в главном цикле - уебанство дикое.
Я тоже пользуюсь, плюясь, т.к. для GPIO западло свою либу писать, а готовых что-то не находил. Но стараюсь заворачивать глубоко-глубоко и получается чисто, наглядно и аккуратно
Так же согласен с использованием HAL для тяжелой периферии типо USB, так как там низкий уровень чрезвычайно сложен, а пары месяцев на поверхностное вкуривание нет.
Но вот инициализировать АЦП, где надо 3-4 бита вписать вот этими строками, хуй знает, пиздец какой то.
И хер бы с ним, но куб не дает это дело нормально завернуть в человеко-читаемые оболочки, т.к. требует определенную структуру проекта и это ебет мозги.
Ебанул под себя турбострую, засунув свой код в пик 2. Орунл. Умер.
Поо
Т
компилим strart.s, и собираем по скрипту линковщика вместе со всеми остальными объектными файлами.
Посоны, а шо такое Handler? Я как то не понел.
А асм файле указатели на прерывалния? И чо, мне штобы делать прерывания изменению уровня по ноге надо будет в асм лезть что ли?
Ткните носом где это расписано, на русском языке. Курить целиком Reference Manual я пока не готов, слишком дохуя всего и сразу.Листаю Варрен Гея, но он тоже на буржуйском. А вкуривать новые абстракции на чужом языке сложно.
> И чо, мне штобы делать прерывания изменению уровня по ноге надо будет в асм лезть что ли?
Ты бредишь?
Возьми baremetal примеры и изучай.
Не делай через куб блядь! По первому. Там реально все в 100 раз проще, ИМХО даже удобнее чем с АВР с ее фузами.
Подрочи байты первые пару проектов, потом сам поймешь когда и для чего нужен куб.
Чего я понял за пару часов беганья в инетрнетах. В .ld скрипте мы указываем компилятору сколько у нас памяти откуда растёт стэк и например что он не должен быть больше чем чего то там. Вся эта информация на прошивку не влияет, а только позволяет бить линейкой по рукам при компиляции и орать что памяти не хватит.
Ассемблерский файл start.s это что то вроде таблицы с адресами прерываний. В кубовском ещё в нём же реализован resetHandler, который просто обнуляет SRAM. Нахошёл проектик на гитхабе, где заместо асма был сишный файл с описанией всей этой хуйни.
Я всё правильно понел?
> А ещё тама ассемблерные фалики есть. В папке startup, они то нахуй нужны?
Затем и нужны: таблица векторов прерываний, плюс чистка памяти (и копирование значений переменных из ПЗУ в ОЗУ) перед запуском main(). Именно ассемблер там, кстати, необязателен (остался в качестве реликта времён ARM7 и ARM9), можно на чистом C всё сделать: https://www.eevblog.com/forum/microcontrollers/cortex-m-startup-files-without-assembler/
> А если без кубов?
https://github.com/STM32-base/STM32-base/
Буду благодарен за актуальные ссылочки с али.
это пример чего я ожидаю, только без ебанутых жестов
https://www.youtube.com/watch?v=ZfMOEaH0Sko
жидхаб этого чувака гласит шо он делал stm32f4 discovery
https://github.com/Blast545/Effects_Manager/blob/master/Voice effects manager - HW.pdf
а это пример к чему стремиться
https://www.youtube.com/watch?v=H6TWbdenxO0
Итого использовано: либа ST, выдрал оттуда буквально только то что относится к CMSIS, стартовый асм файл. Из кубатуры спиздил ld скрипт и ключи компиляции.
Но вот мне решительно непонятно, а откуда я должен в идеале знать и применять эти стопитсот ебенячьих ключей конпеляции GCC. Как же херово без норм образования...
А ещё эти ебаные расширения GCC которые не входят в стандарт, всякие __atribute__ _IO Как вобще копать в эту сторону? И насколько необходимо это знать.
Установочная цель устроится байтоёбом за жрат. Что бы хоть как то вкотиться в ойти ололо.
>Как же херово без норм образования...
Лол, чет мне вспомнился директор одной из ИТ контор, дядька за 55, который пытался набирать с образованием людей, в итоге у него проект полугодовой, пилили года 3.
Мне очень интересно, где тебя поучат внутрянке GCC или еще каких компиляторов.
>Но вот мне решительно непонятно, а откуда я должен в идеале знать и применять эти стопитсот ебенячьих ключей конпеляции GCC.
Берешь и пользуешься человеческими инструментами и не знаешь.
>Установочная цель устроится байтоёбом за жрат
Ты пиздец не в том направлении уебал. Тебе надо в высоту идти, а ты вниз идешь. Кроме пачки дебилов с линукс.орг какого, всем похуй на ручную компиляцию и это точно, не то, что потребуют с рекрута. Тебе надо устройство, работающие создавать и быстро. Всем похуй КАК, пока оно отвечает ТЗ и вписывается в требования по бюджету.
Тебе надо брать сейчас FreeRTOS, Modbus, Ethernet, wi-fi , CAN, bluetooth, TFT дисплей, тач, RFID, пяток промышленно популярных серий МК, желательно на разных ядрах.
Вот все это задействовать и научится пользоваться. Потом взять книг и АЦП\ЦАП, запиздячить чего прецизионное и хуй знает, в принципе можешь идти искать работу, даже с половиной этого списка оторвут с руками.
А вот твой дроч компиляторов никому не нужен, этим владеют конечно крутые ребята, но не по причинам первой необходимости.
Всё так. От себя добавлю modbus не нужен, лучше изучить протокол Owen, как наиболее распространенный в РФ. Ну и обратить внимание на оборудование этой фирмы.
Чегото геморно всё это я посмотрю по сравнению с "обычными" АВРками. Чем больше читаю,тем больше охуеваю. Лежат несколько СТМок. Правда мне тут порикомендовали IAR . Как народ оценивает данный продукт ?
Всмысле? Это некоторое время назад, по мненеию некого круга независимых экспертов, лучший компилятор для микроконтроллеров.
Как IDE - ну она говно, как и все остальные, Keil чуточку потехнологичнее.
Вообще, если ты такой разпиздатый ебатель компиляторов - бери Embedded GDB и MVS и захуяривай там. Вот это действительно хороший вариант.
Потом, еще можешь туда компилятор IARовский прикрутить.
А если еще гайд напишешь, так вообще охуенно будет.
В результате метаний меня посетила светлая мысль что reference manual бывает не только у МК. Скачал таковой для GCC, и о чудо, там есть описание всей той хуйни что меня интересовала.
Если кому интересно, в кубах есть три интересных ключа компиляции: -ffunction-sections, -fdata-sections, -fstac-usage
Суть в краце, каждый объект\функция комплилируется в отдельный загон, чтобы оптимизующий линкер смог безболезненно их ёбнуть, если выяснится что в рантайме они не будут использованы.
> Надо было крикнуть RTFM
Это очевидно.
>есть три интересных ключа компиляции
>Суть в краце, каждый объект\функция комплилируется в отдельный загон, чтобы оптимизующий линкер смог безболезненно их ёбнуть, если выяснится что в рантайме они не будут использованы.
Всю жизнь так живем. Что у тебя за мания дрочится в кишках инструмента? Что мешает настраивать опции компилятора через гуй?
>>339689
> STM32CubeMX + Keil + STMStudio
Под линь вменяемая связочка есть, или опять в дуалбут вкатываться?
Куб+CLion например. В 2019.2 завезли memory view и register view (нужно только svd от своего камня подсунуть).
> Вся эта информация на прошивку не влияет
Неправильно.
В ld-скрипте можно разбивать память на секции под различные задачи, которые будет выполнять программа, например, часть под стек ОС, часть под буферы памяти какого-нибудь быстрого интерфейса или графики, часть под хранение переменных данных в eeprom. В частности, на некоторых контроллерах DMA имеет доступ только к некоторым областям памяти, и приходится для работы с ним объявлять функции и буферы в этих областях. Можно конечно прибить их гвоздями к конкретному адресу типа 0x20001000, но это некошерно, лучше объявлять секции в ld и потом указывать в атрибутах мнемоническое обозначение секции, а уж линковщик пусть сам размещает. Аналогичным образом приходится действовать, если у тебя применяется внешняя память.
Заказал на али BluePill, платки на чипе stm32f103.
Описание и отзывы читал жопой, приехали платки с контроллером cks32f103. Чтобы прошить st-linkом приходится нажимать ресет кнопку, отладчик в keil не запускается, говорить cant reset core или internal command error. Но прошивки заливаются и исправно моргают светодиодами. Пробовал различные комбинации reseta, connect under reset и прочее, все без толку. Кто-нибудь сталкивался? Есть вариант их подружить с отладкой?
Вывод ресета подключал к STLINK или только SWDIO+SWCLK c текстом и так сойдет? Без него "различные комбинации" не имеют никакого смысла.
Что за говнокод льешь? Может быть он отключает режим отладки по JTAG/SW. В кубе надо явно разрешать отладку, иначе соснешь хуйцов при попытке отладиться.
Выкинь, это говно
Рефман это правильно, мне вот терпения не хватает его изучать. А так гугл в помощь, по крайней мере самые ходовые вещи вроде примеров работы с линкером обычно хорошо описаны на всяких буржуйских сайтах типа stack-overflow или mcuoneclipse. Встречаются информативные примеры также на форумах производителей микроконтроллеров. Ну и проекты для демоплат изучать, само собой. По большей части там говнокод из разряда "лишь бы заработало", но встречаются и полезные вещи.
Алсо, в моей мухосрани Ижевск ещё есть два магазина Радио, которые чуть ли не со времён совка существуют, ну с 90х точно и ещё какой то магазинчик в одном ТЦ, не помню названия.
>совка
Откуда ты взял это слово и зачем ты его используешь, задумайся. Сейчас совок с говном. И эту говнину заливают в головы.
Как красноглазый адепт пожирателя мозолей я конечно первым делом наткнулся FreeRTOS. Но есть же ещё всякие амазоны
Чем отличаются, напичканы ли дрова говном как HAL и тысяча вопросов, которых я пока не знаю, о которых честно говоря надо бы отдельный трэд делать.
Насколько я понимаю, микроконтроллерные RTOS отвечают только за ядро и задачи. Всю периферию ты реализуешь сам, как тебе надо и любыми драйверами.
Понравилась книжка
Так Амазон вроде как купил права на freertos или типо того. Так что по сути они не должны отличаться, разве что функционал допиливают
>купил права на freertos
Там же вроде как лицензия MIT. Т.е. берёшь и делаешь с исходникакми абсолютно что хочешь.
Ну может ты прав, не секу в этом вопросе. Есть у меня смутные воспоминания, что раньше какая-то муть была с подробной документацией на freertos, то ли за нее платить надо было, то ли ещё что-то. А сейчас вроде вообще все доступно
Amazon сделала свой форк freertos (я так и не понял нахуя). Сама базовая FreeRTOS абсолютно свободна, есть доступная документация на офсайте, там же есть pdf-книжка.
> (я так и не понял нахуя)
Амазон начал люто двигать вперёд интернет вещей, и чтобы сократить расходы на НИОКР тупо дали бабла разрабам фриртос на интеграцию своих библиотек безопасности и прочей хуйни связаной с интернет подключением.
Во первых как тебе уже тут сказали надо обязательно включать в cube mx режим swd отладка, а во вторых надо включать режим software reset mode в настройках swd самого keil. В этой плате (blue pill) аппаратный резет банально не подключен и работает только программный
Народ, че там нынче в моде за недорого из отладочных плат?
Поднимаю вопрос. Некоторое время назад, вооружившись всеми гайдами СРУнета (по той причине, что из-за сраной политики ютуба, все завалили однотипным говно без смысла и полезной инфы и за рубежом 1в1 как у нас инфа).
И всетаки осилил CustomHID + Ответный софт на ПК.
Более менее разобрался с написанием дескриптора и точках выхода инфы из драйвера.
На ПК - аналогично, научился считывать\отправлять инфу в драйвер.
Вот только все эти знания без понимания внутрянки драйвера - не особо нужны, т.к. кроме как повторить пример с некоторым кол-вом отсебятины оно не позволяет.
Че делать? Самое ебанутое, что в референс мануале стм, о усб пара страниц.
Кто осилил USB в комплексе? Подскажете куда посмотреть?
А что там?
Исходники Linux
Ну и нехуй туда ходить по хорошему, там куча нефильтрованной инфы.
Должно быть где-то более упрощенное\укороченное.
Тогда копай сорцы V-USB под AVR, там софтварная реализация USB 1.1 под Си, возможно немного ассемблера.
Пацаны на реддите рекомендуют книгу "usb complete".
Я глянул - там уже несколько переизданий у нее.
Зачем предлагаешь сразу easy-way?
Можно начать с пикрила - MOS6502 на рассыпухе https://monster6502.com/. А то сразу - на тебе готовые логические элементы. Пусть сам собирает из транзисторов.
Когда-то я хотел спаять это, но оттолкнул сингл-борд дизайн. Лучше и красивее был бы вариант более компактной мат. платы, со слотами под отдельные функциональные модули.
Вощем, я смотрю тут у многих 407 камень, в него наверно и буду вкатываться. Как вам вот этот девайс https://ru.aliexpress.com/item/32878592679.html
Вроде как именно с Sram и 407 https://aliexpress.com/item/32890500011.html
Может сразу ебанешь подобное? Нравятся Боинги, но как-то больше нравится 747 чем массовый 767. https://aliexpress.com/item/32881207693.html
Тебе лучше малину брать сразу.
Эти процы гораздо ближе к SoC, нежели к МК.
Один хуй на них без RTOS нехуй делать.
>>376335
Отчасти соглашусь. Одна из причин, почему иногда рядом с процессорами ставят мелкие микроконтроллеры - это жесткий realtime. Редко, но бывают случаи где крайне важны задержки.
На больших процессорах - хуй посчитаешь задержки и джиттер, на contex - уже чуть проще, даже используя RTOS, на avr/pic - уже по тактам можно посчитать гарантированное время.
Из побочных эффектов - энергопотребление. Поставь свою малину на счетчики воды в сортире. Сколько она на батарейке проживет? Сколько проживет какой-то STM32 в режиме глубокого сна? На ESP или MSP430?
Сколько секунд стартует малинка? Ебать колотить, ты программируешь bare metal? Почему раньше не сказал? Сколько стартует код на STM32 или подобных МК без ОС?
>Сколько секунд стартует малинка? Ебать колотить, ты программируешь bare metal? Почему раньше не сказал? Сколько стартует код на STM32 или подобных МК без ОС?
Ты перефантазировал и приписал мне много качеств. Я в душе не ебу, я обычный байтоеб.
На самом деле я просто имел ввиду, что создание всяких говноподелий это сорт селфчеленджа.
А взять 240МГц проц, залить туда ОС и запустить готовый экзешник - так себе челендж.
В добавок он будет абсолютно не эргономичным и дорогущим.
Вот да, несколько миллиардов транзисторов сливают за тобой говно.
>Одна из причин, почему иногда рядом с процессорами ставят мелкие микроконтроллеры - это жесткий realtime.
На самом деле нет или не совсем. Новомодные контроллеры имеют сорт спинного мозга (DMA + Сигнальную систему, позволяющую триггерить одну периферию другой, без вмешательства ядра).
А RTOS, работающие на десятках МГц, вполне себе позволяют гарантировано реагировать на события, гораздо быстрее 8биток, просто из-за огромнейшей частоты.
Ясен хуй, такие монстры в этих ситуациях не спят, но вот в хальте вполне себе могут стоять.
Все это относится к устройствам с постоянным питанием. С батарейными конечно так не получится, но F4 и мобильные устройства - очень специфичное сочетание, если тебе так нужно потребление, хули ты EFM8 не возьмешь какой?
С чего начать осваивать Малинку? Накатил линукс, написал на питоне программку мигания светодиодом. Что далее?
Вот нахуя ты занимаешь электроникой? Что ты мечтал сделать, когда вкатывался?
>В чем прикол,
Ну лично мне улыбнуло аппаратное деление и фпу, на первых порах. А насчет дешевле, так под себя ходить еще дешевле.
От мигания светодиодом до задания цвета точки на TFT экране через SPI всего неделя. Берешь экран и пишешь код, можно взять готовый код и под свои нужды подстроить. Можно взять готовый рабочий код (если найдёшь, лол) и сразу рисовать красивости. Можно взять потом датчики, пачку датчиков, массу проводов и датчиков и сделать очередную нужную только тебе погодную станцию со свистелками и перделками. А можно сделать смыватель унитаза с веб камерой, чтобы знать кто не смыл. Если подключить ещё микрофон и динамик через усилитель, то можно и поругать его за то, что не смыл.
Главное - идея, а не тип процессора/микроконтроллера/системы_на_чипе.
Это всё есть на пистоне и схх с библиотеками. Мне хотелось бы bare metal иминимальную ОСь запилить, например.
Пили. FreeRTOS на то и FREE.
Если тебе хочется пилить ось, ты берешь и пилишь ось. Ну светодиодом поморгаешь разве.
Все. Тебе не нужны крутые процы или еще что то, самый обоссаный контроллер пойдет.
>>376437
>От мигания светодиодом до задания цвета точки на TFT
Увы нет. По гайду можно сделать и за вечер. Многих в ступор не алгоритмы и сам процесс вводит.
А среды и инструменты. И все затыки самые жесткие именно там.
STM32MP1 microprocessor hands-on workshop for developers
https://www.st.com/content/st_com/en/about/events/events.html/stm32mp1x-hands-on-workshop-emea-2019.html
Через табуляции ентер плюс минус. Сам использую две кнопки для меню на прерываниях.
Не понял вопроса. Более подробно опиши.
Просто берешь, без задней мысли, подходишь и меняешь. Строка это массив же.
Строка массив, а если скажу тебе, что три участка в строке надо менять и как выбрать , например, второй участок и изменить его? При этом первый и третий участок должны быть неизменными. Как?
Дай больше инфы, сколько у тебя кнопок в наличие и на каком камне ведёшь разработку.
Что за дисплей, няша? Символьный?
Я недавно такую штуку писал на работе. Правда исходником вряд ли смогу поделиться.
In general, не важно, что за камень и какой тип экрана, последовательность работы мне видится такая:
Где-то создаёшь строку, по таймеру (либо по изменению значения) её обновляешь.
например, это будет выглядеть примерно так с таймером
void display_string(char string_for_display[17]);
uint8_t pipa = 0;
uint8_t popa = 1;
char str_buf[17] ="lolkastring";
void SysTick_Handler()
{
sprintf(str_buf, "pipa=2%d popa=3%d", pipa, popa);
display_string(str_buf);
}
Дальше, в меню (в той части, которая работает с кнопками), изменяешь те значения, которые тебе надо изменить.
typedef enum{
ITEM_PIPA = 0,
ITEM_POPA = 1,
NUM_OF_MENU_ITEMS;
}MENU_ITEM;
MENU_ITEM current_menu_item;
uint8_t p_item = 0;
void menu (void){
while (1)
{
switch(button_pressed)
{
case влево:
p_item = p_item - 1;
break;
case вправо:
p_item = *p_item + 1;
break;
case кнопка_перехода:
increaseCurrentMenuItem;
break;
default:
break;
}
}
}
void increaseCurrentMenuItem(void)
{
current_menu_item++;
if (current_menu_item >= NUM_OF_MENU_ITEMS)
{ current_menu_item = 0; }
}
Тут конечно дохуя чего нет, например, считывания кнопок, или самой процедуры вывода на экран, или "подсветки" изменяемого элемента. Да и писать/форматировать в окошке двача не оч удобно. Но касательно меню ты меня понял в общих чертах, я думаю.
Это, если что, для 2х - 3х кнопочного устройства.
Что за дисплей, няша? Символьный?
Я недавно такую штуку писал на работе. Правда исходником вряд ли смогу поделиться.
In general, не важно, что за камень и какой тип экрана, последовательность работы мне видится такая:
Где-то создаёшь строку, по таймеру (либо по изменению значения) её обновляешь.
например, это будет выглядеть примерно так с таймером
void display_string(char string_for_display[17]);
uint8_t pipa = 0;
uint8_t popa = 1;
char str_buf[17] ="lolkastring";
void SysTick_Handler()
{
sprintf(str_buf, "pipa=2%d popa=3%d", pipa, popa);
display_string(str_buf);
}
Дальше, в меню (в той части, которая работает с кнопками), изменяешь те значения, которые тебе надо изменить.
typedef enum{
ITEM_PIPA = 0,
ITEM_POPA = 1,
NUM_OF_MENU_ITEMS;
}MENU_ITEM;
MENU_ITEM current_menu_item;
uint8_t p_item = 0;
void menu (void){
while (1)
{
switch(button_pressed)
{
case влево:
p_item = p_item - 1;
break;
case вправо:
p_item = *p_item + 1;
break;
case кнопка_перехода:
increaseCurrentMenuItem;
break;
default:
break;
}
}
}
void increaseCurrentMenuItem(void)
{
current_menu_item++;
if (current_menu_item >= NUM_OF_MENU_ITEMS)
{ current_menu_item = 0; }
}
Тут конечно дохуя чего нет, например, считывания кнопок, или самой процедуры вывода на экран, или "подсветки" изменяемого элемента. Да и писать/форматировать в окошке двача не оч удобно. Но касательно меню ты меня понял в общих чертах, я думаю.
Это, если что, для 2х - 3х кнопочного устройства.
Всегда делал меню:
Список с контентом меню
Номера списка закинуты в массив, повторяющий структуру меню.
Переменная с текущим отображаемым номером списка. В которую функцией навигации помещается номер позиции списка и откуда он считывается функцией дисплея.
Ну в принципе у меня так же запилено. Только в моей рабочей реализации, котнент меню был в массиве, и сразу оттуда вызывались по текущему номеру.
Просто он спросил как менять разные параметры в одной строке если я правильно понял, вот я и родил это нечто.
>котнент меню был в массиве
Жирновато же, да и на пюр-си получается переусложненно.
+ больше операций, если отображается динамический контент (приходится паковать в массив, потом его оттуда брать).
+ не получится "легкого" оверфлоу пунктов меню (если хранить номера, а не контент, можно зарезервировать на пустой\ошибочный\переводящий и пр).
>не получится "легкого" оверфлоу пунктов меню
Вообще я чот подумал посидел, вспомнил что там было я просто не могу сейчас код этот прочитать, он на бывшей работе - у меня скорее действительно то, что ты описал: есть массив с указателями на элементы, а элементы это структурки содержащие контент, указатель на функцию привязанную к элементу и всякие сайдовые параметры
>Жирновато же, да и на пюр-си получается переусложненно.
Ну хз, возможно, у меня так было сделать вполне целесообразно.
Готовых вариантов я не нашёл нихуя почему-то, а то что получилось выглядело вполне лаконично.
У меня просто в самом меню хуева гора подменю и привязанных действий, и экран может одновременно отображать только один пункт меню.
Двухстрочный, 1602, я не придумал чем было бы полезно отображать за раз больше одного пункта меню, и в итоге просто заполняю весь экран согласно текущему пункту. Получилось ок.
Получившийся в итоге код содержит один универсальный обработчик для всех меню/подменю, с возможностью настройки/выбора действий по кнопкам в текущем уровне меню.
Короче не сказал бы, что сильно переусложнено, на плюсах вышло бы не проще (и работало бы не быстрее, хотя это, по большому счету, похуй).
>больше операций, если отображается динамический контент
Не совсем понял о чем ты, у меня "динамический" контент был, и в примере он тоже "динамический" - просто триггеришь по изменению значения (или по таймеру) изменение строки и всё, а по изменению строки триггеришь вывод оной на экран.
если представить строку как массив, то надо в этой строке найти число и представить его еще как число а не как строку. Еще и иметь в виду, что число там может быть не единственное.
>>376827
дисплей графический 128 на 64
>>376820
Камень stm32F407
У меня есть в наличии клавиатура с кнопками вверх/вниз/влево/вправо и кнопки enter и esc. Сами кнопки как мне кажется роли не играют, пусть даже у меня будет энкодер вместо кнопок.
У меня нет особых проблем если мне надо реализовать в меню чисто визуальную информацию или если в одной строке у меня находится только одно число, которое я могу начать изменять нажатием кнопки enter(например). Но если в строке находится несколько параметров которые можно изменять независимо друг от друга, тут уже проблема.
Как банальный пример настройка даты. В одной строке находится три числа (день, месяц и год). И я как бы должен иметь возможность менять каждое число отдельно. При этом еще было бы хорошо изменять по разрядам, иначе дрочить кнопку 30 раз чтобы изменить дату с 1го на 30ое такое себе удовольствие.
Я делал на другом проекте меню с помощью структур и указателей на соседние меню. Но там было мое ограничение на одно число в строке, и то не смотря на это было куча костылей потому что некоторые строки при нажатии должны были выполнять разные действия.
и при всем этом сама структура меню не должна по идее быть монолитной, т.е добавление новых пунктов меню в произвольных местах не должно сопровождать анальной болью
Бля, ну я чот совсем тупею, не могу такие простые вещи на словах объяснить, прости анон. Если я тебе описываю не то что тебе надо, поясни что именно ты хочешь услышать: структуру, реализацию в сях или ещё что. Просто так я буду долго распыляться, но ничем полезным не помогу.
>добавление новых пунктов меню в произвольных местах не должно сопровождать анальной болью
Тут я тебя не понял, какое тогда меню ты считаешь монолитным? СвитчКейс для каждого пункта меню?
>Но если в строке находится несколько параметров которые можно изменять независимо друг от друга, тут уже проблема.
Надо подумать, как это запиливать. Я с ходу вижу такой вариант: переходить для настройки к экрану калибровки текущей величины (просто отдельный обработчик для кнопок и строк вызываешь), и там, в зависимости от текущего выбора меняешь определенную величину.
Чтобы не закрашивать весь экран пустотой, а сделать красиво (как будто ты находишься всё ещё в том самом меню) перерисовывай только ту строку, в которой меняешь настройки.
Алсо:
Думаю, как моргать курсором ты придумаешь сам, правда? Ты уже разобрался как с символьным экраном работать?
Алсо2:
Может пригодиться. https://en.wikipedia.org/wiki/Binary-coded_decimal
Монолитное меню в моем понимании это когда тебе например надо добавить где нибудь в середине новую строку с вложенным меню, но чтобы это добавить и заставить нормально работать необходимо пройтись по всему коду навигации или отрисовки и в куче мест(или даже в нескольких местах) сделать небольшие изменения
Ну да, это был бы непотребный пиздец.
Просто чтобы такой хуйни не происходило, надо разделять объекты на экране. В случае того, что я пытаюсь советовать, объектами являются строки.
Я, честно говоря, не знаю как объяснить тебе что делать. Начни с малого, напиши что-то простое (сам, чтобы понимать как жто работает), а потом скрести ужа с ежом.
Посмотрю ещё сегодня код с того проекта, может пришлю что-то. Но не факт.
Объективно да
Делал такое кучей методов, но нашёл-таки идеальный: массив из структур, каждая из которых описывает пункт меню. Для каждого пункта описан его тип и union, в котором для этого типа описаны параметры, например, ссылка на подменю.
А как решается несколько параметров в одной строке? Тоже делал через структуры, но как и описывал проблему выше, когда несколько параметров в строке и которые можно изменять все превращается в Франкенштейна
Рассматриваешь каждый параметр как подпункт меню с особыми свойствами, переключаешься между ними влево-вправо по аналогии, как ты ходишь по меню вверх-вниз.
В горизонтальных пунктах есть вертикальные субменю и это всё превращается в Ад!
У меня тут вопросик с претензией на платину. А существуют ли симуляторы для этих ваших стм32? Или под 32 битный камень писать симулятор это уже за гранью?
Блять удобно же, чем по 1000 раз свой говнокод туда сюда перепрошивать изнашивая контроллер.
http://beckus.github.io/qemu_stm32/
Или
https://wiki.qemu.org/Documentation/Platforms/ARM
Но придется поебаться
Лежала у меня stm32f4discovery, я поробовал на ней реализовать простенький проект, с 4 светодиодами, которые должны мигать с разной частотой и шимом регулировать яркость, и что-то охуел мальца. За последние несколько лет сделали либы, чтобы писать код просто как на ардуине, или stm32 все еще для илитных господ, которые могут 1000 страниц мануала прочитать и закончили профильный университет?
Это разрабы так облегчают переход на их контроллеры, лол, сам в ахуе с этих дегенераторов.
Хотя асм у них во многом похож на атмеловский всякие мовсы хуевсы, но с углубленным познанием иховской архитектуры.
Ног мало, цап и ацп всратые, мощи недостаточно для чего-то связанного с хоть какими-то вычислениями на контроллере, а стоит ненамного дешевле.
У стм вроде есть линейка камней на которых можно прогать как на Ардуино
Но ведь дегенератор ето тi. Подумай на этим.
>Это разрабы так облегчают переход на их контроллеры, лол, сам в ахуе с этих дегенераторов.
Мне почему-то вспомнился пикрелейтед.
Это интересный вопрос, но он ортогонален обсуждаемой теме.
Так раноны я делегирю этот курс леций на платину по вкатывания в серьёзные мк
https://www.youtube.com/watch?v=qiSjLxeyNv4
Да он же долбоеб, и не умеет нихуя.
Курс от дихальта пизже в тысячу раз, он хотя бы не дауном для даунов сделан.
Он столько говна побочного генерит, что лучше уж самому.
Хз куб использую для тяжелой периферии, т.к. там заебешься сам писать.
По поводу всяких АЦП\Таймеров и прочей хуйни - хуй знает их по хорошему один хуй приходится по РМ изучать, после которого уже можешь сам растолкать биты, чем переписывать эти тонны дефайнов.
Spl бывает удобно для периферии подгрузить, но хуй знает не более, нахуя?
Рожал ЭТО целый вечер. Я тут походу самый успешный
Настройка тактирования через CMSIS
https://ideone.com/QJ72Rw
Чтение RM0008 Reference manua
Хорошо написал. У тебя там вообще абсолютные адреса в инструкциях переходов. Хоть бы через gcc -S сделал.
>>while
> Не надо так с процессором.
Хороший способ его нагреть.
> Лучше считать разницу между текущим и заданным.
И? Использовать прерывание по таймеру?
>Не надо так
Пару сотен микросекунд может и потерпеть. Все равно большинство времени он бездействует в ожидании прерываний от систика.
Да ну, зачем плату портить. Куда ты его потом припаяешь? У него корпус с выводами под пузом
Ну поэтому спрашиваю, что подойдет для такой задачи, попроще чем stm32f4, шобы свой микро, да и без наворотов менять голос риал тайм, пару эффектов, тон эхо.. все дела
хотя куда я замахнулс, сначала на ардуино сделаю фпесду
> менять голос риал тайм, пару эффектов, тон эхо
> на ардуино сделаю
Ты уверен, что ты вообще понимаешь, на что ты замахнулся?
>>381077
смисол спрашивать у вас если вам пох на вопрос, анон хуле ты тупишь.
Даже если перделку, получу опыт, прежде чем заказывать стмку
Да, понимаю, что ардуины не хватит
https://www.youtube.com/watch?v=3tEHxL_1UYw
Бери эту плату и вперёд изучать цос. Тебе хватит ее более чем. Если решишься, то могу потом более подробно рассказать куда копать.
> смисол спрашивать у вас если вам пох на вопрос
Смысл тебе отвечать, если ты не слушаешь никакие ответы, кроме тех, которые подтверждают твою маняточку зрения?
Это называется confirmation bias, если что
Сделай все для начала на компьютере, тогда будут яснее требования к микроконтроллеру. А потом просто перенесешь код с компа на микроконтроллер. И покупать для изучения цос какие-то платы не нужно. Ну просто совсем не нужно.
Но, как пишет анон выше, ты явно не последуешь совету.
> 2 ответа на следующий день
> уточняющие вопросы
> дельные советы
> НЕТ У МИНЯ КАГНЕТИВНЫХ ИСКОЖЕНИЙ!!!! ЭТА АБРАТНАЯ СВЯСЬ ТУХЛОЯ!!!
Понятно, нахуй иди даун
бом бом
Например понадобилось работать с картами памяти по SPI. Вместо того чтоб разбираться, как её там инициализировать я тупо спиздил код с гитхаба. Кубом сгенерировал проект тыкнув с поддержкой FatFs. Малость допилил и оно даже работает.
Но чувство своей никчемности остается.
Сначала делаю лишь бы работало, из КУБовской зелёнки и библиотек с гитхаба или видеоуроков. Потом уже раскуриваю и переписываю все самостоятельно.
Не имеет смысл как ты относишься.
Имеет смысл как ты ДОЛЖЕН относится.
А должен полностью положительно. Тут блядь уже больше полувека ебутся над модульностью и если что то встало со свистом и удовлетворяет требованиям - не трож!
Не потому, что сломаешь или еще что-то, просто потрать время на что то более полезное.
О твоем опыте будут судить по реальным устройствам, а не количеству велосипедов внутри.
>>381105
В догонку, ширина опыта в подавляющем большинстве случаев гораздо более важна.
Если тебе нужно будет завелосипедить FAT - поверь ты завелосипедишь, поебешься может, но результат будет 100%.
Это тривиальная обыкновенная задача. То, что кто то всрал месяцы и ее решил - молодец, но нахуй тебе это повторять, ради чего?
Реально полезных новых знаний ты получишь крохи.
Другое дело, когда твои познания раскинуты аки щупальца в максимальном числе направлений и благодаря чему, ты можешь очень хорошо планировать структуру и архитектуру решения.
Вот это действительно не тривиальная хуйня.
Ее нельзя просто взять и изучить по документации.
Так, что не еби мозги себе, поебаться в глубь ты еще не раз успеешь.
>ты можешь очень хорошо планировать структуру и архитектуру >решения.
Это под час несколько даже важнее велосипедов.
Ибо убив тучу времени на "ковыряние" , и прокачав скилл. На выходе может получиться монстр.
>переписываю все самостоятельно
Ну или просто забиваю и оставляю как есть. Но хотя-бы поверхностно знать как оно работает не повредит.
В магазине.
Малаца, хорошо зделали. Сам камень позиционируется, как переходная форма от МК к процессорам, когда у тебя задача с реалтаймом, но ещё хотелось бы иметь и линукс. По софту - заебись, всё, как обычно, опенсорсное, но при этом, в отличие от других вендоров, специфические патчи по-максимуму пушатся в апстрим, так что ты всегда сможешь пользоваться свежими версиями ядра/либ/инструментов и свободно конфигурировать всё, как тебе надо. Из всей полезной информации половина - сам семинар, половина - комментарии из зала. Собственно, на подобные мероприятия ходить и стоит хотя бы ради того, чтобы послушать кулсторей от опытных специалистов.
А теперь представь что есть области разработки встраиваемых систем,и их достаточно много(думаю ты догадаешься какие), где нельзя иметь ошибки в коде, а ты заимствуешь чужой код и не смотришь под капот. Какие варианты событий могут быть, как думаешь?
Количество проектов не показатель, так как работая с железом ты всегда уходишь в долгосрочную поддержку своих решений.
Если только для попробовать или демо проекта, а так таймер и только.
Если ты хочешь работать с мк не на полную нагрузку, то бери РТОС, если тебе прям вообще пиздец реал тайм надо, чтоб подстройка по фазе на высокоскоростной шине была, обработка пакетов на самом низком уровне, всякие CRC, коррекция ошибок и т.д, то только напрямую через регистры надо.
Высокий порог входа делает профессию более закрытой, и перспективной на длинной дистанции.
А нигра порадовал, очень недалекий поц)
Эти сферы во первых оплачиваются, а значит вся ебля велосипедов - тоже оплачена, во вторых, разрабатываются группой людей, знающих что они делают.
Правильный ответ
>заимствуешь чужой код и не смотришь под капот
Так этого никто и не пропагандирует, особенно в указанных областях. Если уж лезть в высокие материи, то там положено иметь полноценный процесс разработки, который начинается с проектирования и включает в себя тестирование и верификацию, так что там уже не важно твой код или нет. Тем более, что какой-нибудь FatFS прошёл гораздо большую проверку временем и лучше отлажен, чем свой велосипед.
>>381194
Да так и делаю, анон. А конкретно с MP1 в том и прикол, что там в одном корпусе кортекс-м и кортекс-а. На первом крутится всё как ты сказал, а на втором - линукс с вебом, гуями, питонами, машинным зрением, нейронками и прочим. При всём при этом, реалтаймовая часть и линуксовая друг другу не мешают и имеют возможность быстро обмениваться данными через разделяемую память.
>>381195
Я это скорее к потому, что, как мне кажется, куб с халом и так уже достаточно простыми сделаны. Да, надо напрягаться и изучать, потому что ещё проще уже некуда - стм32 в принципе сложнее авр. Если дальше упрощать - то получится совсем примитив, негодный для реального применеия.
Все так. Тут по ходу сидят либо те, кто все и так понимают с полуслова и им ничего не надо доказывать, либо те, кто понимает очень мало и сами не понимают что говорят. А между ними молчуны, которые осваивают и им некогда болтать)
Так-то да но не критично
Маркетинговая часть и теория на русском, практика на английском. Ничего не дали, но дико извинялись.
> так что ты всегда сможешь пользоваться свежими версиями ядра/либ/
угу, новыми суперабстрагированными от старых свежими версиями.
То, что иногда на тормоз полезно нажимать, все хорошо в меру.
А хули говорить, на вопросы, что знаю - отвечаю, на те что нет - не отвечаю.
Все кто не знает основ - сидят в ардуине, на арм в принципе идут люди вкатившиеся и как минимум тупые вопросы умеют гуглить, так что переходы и сменя ядер происходят бесшумно.
Никто не рассказывает тут про свои проекты или кулстори, не обсуждает идеи.
Для сложных вопросов форума лучше.
Итак! В будуещем потребуется создать сеть из микродатчиков по всей избе и участку. Смотреть в сторону стм8 не собираюсь ввиду копеечных ценников на младшие стм32. На чем посоветуете планировать сеть? САN? Modbus?
Если нужна НАДЕЖНОСТЬ и отсутствие влияния фаз луны, соседей со сварочниками, пердежа от телефонов и прочих радостей радио - то только кабель. Если поиграться и не управляешь ядерным реактором - можешь послушать >>384950
Если надо будет за раз передавать больше 8 байт - то готовься к пердолингу используя MODBUS (over RS485). Если сильно ленив - то CAN твой лучший друг. Аппаратные фильтры 11(29) битного адреса (в modbus их сам делаешь и максимум около 240 устройств), авторазрешение коллизий - твое дерьмо будет ГАРАНТИРОВАННО доставлено единым куском. В самом же STM - у тебя будет прерывание, уйдя в которое читаешь присланное число байт из mailbox и туда же пишешь данные на отправку. Красота. Никакого пердолинга с таймаутами, фильтрами, CRC..
>сеть из микродатчиков по всей избе и участку
>копеечных
Платы Blue Pill
NRF24L01
Ардуино и библиотека MySensors
>С модбасом так то поменьше ебли, не? Он банально более любительски освоен.
Нет. Самый минимум ебли - это CAN, который умеет передавать за раз до 8 байт. Можно даже 0 байт передавать.
С модбасом или DCON будет намного больше ебли и он не умеет в push режим - у тебя один(два.. как их арбитраж собрался делать?) мастера, которые опрашивают слейвов, а слейвы сами при поступлении какого-то события сами не могут ничего отправить мастеру(ам).
Надо сказать что CAN - это все лишь физический уровень передачи данных, как и RS485. Но отличия очень большие - в RS485 идет побайтовая передача без разрешения коллизий, а в CAN - передача фреймами, внутри которых уже есть и адрес получателя (адреса отправителя нет) и он же приоритет, контрольная сумма фрейма, до 8 байт данных и даже бит получения другими устройствами (в RS485 - срешь в пустоту и не поймешь - принял кто или не принял или есть ли вообще кто-то на шине, в CAN - есть спецбит, который устанавливают все другие устройства, говоря что на шине кто-то есть и этот(эти) распознали и подтверждают прием фрейма с шины. Просто прием, а не то что программой обработан)
Годно! Посмотрел, драйверы копейки стоят, двухпроводная линия, камни с поддержкой CAN от 70р. Пожалуй самый оптимус.
Для дебага не поленись собери типа такой хуйни https://full-chip.net/shemy-na-mikrokontrollerah/108-usb-can-interfeys-ili-prosto-can-haker-svoimi-rukami.html . Яростно не гонял, как минимум соединив 2 между собой - получалось отправлять спам с одного на другой. Может зайдет такого плана https://habr.com/ru/post/256493/ (не проверял на практике).
Если внимательно читал прошлый пост - в пустую шину (где ты один) не отправишь данные, кто-то еще должен быть живым и настроенным на шине. Хоть тот же сниффер не в режиме только прослушки, да и тестовые фреймики сможешь покидать-посмотреть при первичной настройке и настройке фильтров адресов.
>RS485 - срешь в пустоту и не поймешь - принял кто или не принял или есть ли вообще кто-то на шине
На каждый запрос от хозяина раб выдаёт ответ-подтверждение.
Драверы - не драйверы, это просто PHY, а вот MAC тебе уже потребуется либо софтом реализовывать и я честно его не находил - тыкните, если есть.
Либо покупать МК с ним. В то же время для модбаса нужен уарт который есть везде, а PHY RS-485 стоят то-же копье.
Это не отменяет то, что писал анон выше, но иметь ввиду стоит.
>>385041
Я еще предлагал PLC, что думаешь? Мне кажется очень интересное и прикольное решение.
>Либо покупать МК с ним
32f072 от 101р у нас. Заказал у китайцы пяток 32f103cbu за 650р, т.е. по 130р/шт У них памяти жирно, по 128кб, периферии дохуя. Даже как-то жалко использовать для таких прозаических целей. Хотя нету смысла изголяться с более дешевыми ибо 100-130р это таки совсем копейки для десятка датчиков.
Опять вы жопосчетцы.
Покупать обвязку, ебатся с коммутированием 5 и 3.3, разводить и травить заебные схемы?
В плане иногда легче купить не STM32 за 100р, а PIC16 за 200 и иметь удобный корпус,маленькую плату и без ебли с периферией.
>На каждый запрос от хозяина раб выдаёт ответ-подтверждение.
Если он есть на шине и с правильным адресом.
Про таймаут на время ответа не забыл? Будешь бесконечно ждать ответа слейва? Изначально же архитектура модбаса - запрос-ответ. Просто так в произвольный момент времени ответ мастеру не вышлешь - у него же нет адреса и принимает ответы только когда был запрос с его стороны.
В CANе даже если не совпадает фильтр маски - это устройство отвечает и подтверждает прием фрейма. Да, это не ответ устройства и не показатель что нужное устройство живое, но оно хотя бы говорит о том что на шине мы не одни.
>ебатся с коммутированием 5 и 3.3
Зачем?
>Покупать обвязку
Конденсатор штоле?
>PIC16 за 200 и иметь удобный корпус,маленькую плату и без ебли с периферией
Т.е. в него прямо датчики с периферией встроены? Только Крону к двум ногам остается подкинуть?
>Если он есть на шине и с правильным адресом.
Согласен.
>Про таймаут на время ответа не забыл? Будешь бесконечно ждать ответа слейва?
Время на обработку запроса задаётся на стадии проектировки. Прописали, скажем, что время между запросом и ответом 10 мс - тогда ждем 11 мс.
>Изначально же архитектура модбаса - запрос-ответ. Просто так в произвольный момент времени ответ мастеру не вышлешь - у него же нет адреса и принимает ответы только когда был запрос с его стороны.
Мастер постоянно опрашивает все слейвы, и если один слейв пропал(не отвечает) это выяснится - какой именно раб пропал.
Сразу нахуй. Я не смогу обеспечить стабильное питание дворовых датчиков. Там думаю применять L-серию с микропотреблением и йоба-способностями ко сну, и прочем гибернациям.
> Там думаю применять L-серию с микропотреблением и йоба-способностями ко сну, и прочем гибернациям.
И как это тебе поможет при нестабильном питании? И почему ты считаешь, что нестабильное питание для esp это проблема, а для stm32l серии нет? С чего ты взял?
>С чего ты взял?
C того, что L-серия допускает работу в режиме Range3 при 1.2В, а твоя ЕСП сдохнет при падении ниже 3В
>Зачем?
Потому что многие датчики с алиэкспресса работают от 5В, многая периферия работает от 5В.
>Конденсатор штоле?
>Т.е. в него прямо датчики с периферией встроены? Только Крону к двум ногам остается подкинуть?
Ну если у тебя из обвязки один конденсатор идет - можешь и арм ставить.
А я в рот ебал травить 0.2 платы, просто ради того, что бы мочь срать говнокодом.
>>385251
Пик
А что, твоё нестабильное питание падает ниже 3В, но гарантированно не падает ниже 1.2В?
Хуяришь дороги 0.15 и между ними получается 0.3. Вот если бы 0.1 по осям было, тогда беда.
>Хуяришь дороги 0.15
Лол ну хуярь.
Я хуярил 0.2, раза с 3го получалось, с небольшими исправлениями.
Чем ты 0.15 дороги сделаешь? ЛУТом - сразу на хуй идешь, фоторезистом - при проявки такие тонкие постоянно отрываются.
Есть смысл как раз хуяить дороги 0.3 - 0.4, т.к. в силу свойств домашнего засвета фоторезиста они будут 0.3 или 0.25.
А там где слипниться разрезать.
Но это все равно ебля, на каких DIP\SO таких проблем нет.
долго искал классное иде, но в конечном итоге бросил это гиблое дело и пишу все в текстовом редакторе, компилирую(arm none eabi gcc) все и заливаю(https://github.com/texane/stlink) через терминал
из куба достаю мэйкфайл, правлю его немного, дописываю пути, иногда флаги, убираю баги(куб глупенький и иногда оставляет ненужные символы в мейкфайле)
все делаю под линой, на дебиане и убунту все фурычит
из железа использую ща диско борд, но китайский stm32f103 тоже отлично работает
пысы в цмсисе и по сей день баги(хотя могут быть и в железе), время от времени сталкиваюсь с проблемой, что некоторые юарт\спай\i2c могут читать, но не писать или наоборот, тогда перекидываю все на другой порт и там все работает. Было еще пару космических багов, когда например глобальная переменная, которая была проинициализирована нулем(сейчас то я знаю что это было необязательно) не меняла своего значения(а вторая, которая была рядом меняла) в рантайме, хз в чем была проблема, это я к тому что если что-то не фурычит - эт не всегда ты долбоеб, но это не точно
>Я долго искал тян мечты, но в конечном бросил это дело и стал пидором.
Не понимаю я людей использующих линь его наиболее слабыми сторонами или ради идеи.
Можно блин просто настроить MVS и не ебать мозги.
Какие операционные системы можно накатить на STM32?
С него можно смотреть аниме подключив к монитору или слушать музыку?
На пикрил можно накатить МС-ДОС 6.22 РУ и поверх Виндовс 98, соответственно все программы будут работать.
В студенческую пору запускал виртуалку вин98 на древнем андроиде с одноядерным ARM6 800 мгц и 512 мб памяти. Считай, что практически виртуалка в виртуалке. Да, тормозило сильно, но в остальном работало без проблем. Грузилось в пределах пары минут, как помнится. На самой виртуалке запускал и гонял самописные СУБД на делфи, лолблядь. Все работало. Препод даже пожал руку, для него были открытием такие возможности у смартфона. Так что производительности современной демоплаты с жирным ARMом должно хватить с лихвой.
мимо
Я, к примеру, ебал эти регистры запоминать. Написано HAL_UART_Transmit значит передать по юарту, еба. Пили себе сам цикл с регистроебством.
Лол
Это тот самый в котором ты из переменный перекладываешь в регистр и уходишь?
Охуеть регистроебство.
При этом, что бы настроить через сраный хал, тебе надо знать все тоже кол-во дефайнов и прочей хуйни.
Вас напугали голой жопой и вы хуйней страдаете.
>Это тот самый
Это цикл, в котором байты из массива перекладываются в DR. Само собой, в этом же цикле имеется ожидание бита TXE в регистре статуса или что-то подобное.
Даже до простых прерываний наш любитель HAL-а похоже не дорос.
При отладке копаться в коде этого порождения индусов под названием HAL как-то не оче. А при LL или CMSIS сразу видно в ожидании установки какого регистра всё встало колом. Ну и в ЛЛ код не такой мозговыносящий получается, никаких там
УОБА->ДВОЩ &= ~ПРАВАЯ_ПЯТКА_ЛЕВОЙ_НОГИ_66_ИНДУСА
>имеется ожидание бита TXE в регистре статуса или что-то подобное.
Че бля?
Ты че не в прерывании их закидываешь чтоли?
Всего лишь описал содержимое функции HAL_UART_Transmit. Для передачи по прерываниям там есть HAL_UART_Transmit_IT, судя по всему. Если ты про использование HAL_UART_Transmit в прерываниях, то это уже просто бред.
И я ничего не закидываю, потому что использую STM32 очень редко.
Cube MX и HAL - это как Arduino IDE для STM32?
Тех, кто ими пользуются, презирают так же, как ардуинщиков?
нет
И ардуинщиков тоже никто не презирает, пока они выебщиками не становятся и\или в про сферу не лезут
Совсем нет, но последствия иногда бывают аналогичные. Вон чуть выше пример с функцией HAL_UART_Transmit, которая тупо в цикле тратит время на ожидание флага. Конечно и такие функции иногда нужны, но также весьма часто такое не подходит. А любитель HAL, судя по отсутствию аргументов, выучил одну эту функцию, как аналог ардуиновской, и даже не подозревает о других возможностях, которые тоже есть в HAL.
>И ардуинщиков тоже никто не презирает, пока они выебщиками не становятся и\или в про сферу не лезут
Сталкивался с дизайнером по профессии, у которого было ардуино головного мозга. Он всерьёз настойчиво советовал юзать вместо STM32 в TQFP-корпусе в серийных изделиях ардуинки-модули, которые вставлялись бы в PLS-разъёмы на платах.
Не стоит утверждать так категорично. Вполне можно найти случаи, когда это будет ничем не хуже других вариантов. Например, что может быть плохого в том, чтобы таким образом сразу после включения питания выдать в UART номер версии прошивки?
При желании можно даже найти случаи, когда иначе вообще никак. Например, в Cortex-M0/M1 нельзя изменить положение таблицы прерываний через регистр VTOR. А значит, в бутлоадере придется не использовать прерывания. В некоторых микроконтроллерах (кажется всех STM32) это можно обойти, но не везде.
Так что нет ничего плохого в том, что такая функция имеется в HAL.
Ты слишком взрослый для этого итт треда
>який програматор ???
Встроенный. Разобрался уже. В ст-линк надо было экстернал лоадер подключить, тому що малюнки льются в нанд-флеш распаянный на плате
Зачетный дядька. Поддвачиваю. Иногда посматриваю, как и Jack0v.
У тебя что-то с форматом картинок не так. Если бы была проблема в железе, то тогда бы и надписи поехали
Дядька иногда несёт ересь, но в большинстве своём - годный материал :-)
Всего есть три основных способа. Ожидание флага в цикле, передача по прерываниям и ПДП. В зависимости от решаемых задач, целесообразно использовать один из этих способов.
HAL_UART_Transmit и подобные - это блокирующие функции. Все останавливается, за исключением прерываний. Это не плохо, только часто целесообразнее использовать не блокирующие способы.
> Ожидание флага в цикле, передача по прерываниям и ПДП.
Ну я в прерывании поднимаю флаг и отрабатываю его в цикле.
Это неправильно?
LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_1);
LL_mDelay(0xF73 0xFFFF);
LL_GPIO_ResetOutputPin(GPIOC, LL_GPIO_PIN_1);
LL_mDelay(20000);
72 часа стоит, 20 секунд включен, и так по циклу. Будет это работать? Именно значение 0xF73 0xFFFF не упрется в максимум в 65535 миллисекунд?
То есть максимально 2147483647? А если надо больше? Можно две строчки задержек делать?
>А если надо больше?
Там RTC есть, болезный! Хоть годовые задержки делай, только Vbat подключи
Нет, максимальное значение 232-1=4294967295.
>больше
4294967295 миллисекунд это 49 дней. Однако, если микроконтроллер должен делать что-то еще кроме мигания светодиодом с таким периодом, то эту функцию нет смысла использовать.
Нет, никто это не делал. Ты будешь первым. Как получится - напиши, как это делать.
> только Vbat подключи
Тупа батарейку или аккум на 3.3В подключить к выводам Vbat и GND?
>>387710
> если микроконтроллер должен делать что-то еще кроме мигания светодиодом с таким периодом, то эту функцию нет смысла использовать
Это я уже понял. Пока что только полив. Если удастся разобраться, то повешу на него и реле светодиодов досветки растений. Пока что я даже чужой код позаимствовать не могу, потому что ничего не понимаю. Но я уже сейчас понял, что даже с обычной задержкой на 72 часа обосрался, потому как запитал контроллер от обычного блока питания. Если вырубят свет, контроллер перезагрузится и начнёт считать заново.
я делал, без вникания в происходящее - не особо сложно. Не таймер на ордуине запустить конечно.
А вот копать глубже - там уже жарко.
usb-uart и usb-mass storage device есть примеры в stdperiph, не знаю насчет цмсиса.
и прочитай для начала это: http://microsin.ru/content/view/1107/44/
Почитай про RTC в референс мануале.
Никогда не заебусь постить эту пикчу.
Как это относится к теме вопроса?
Хочу шимить 12В вентиляторы на частоте 25 кГц (high frequency pwm). Вентиляторы 4 пиновые: +, -, тахо и шим-вход.
Правильно ил я понимаю, что понадобится: три таймера с CC0, счётчик импульсов PCNT и мультиплексор (для переключения канала тахо с трёх вентилей на вход счётчика импульсов).
Помимо управления вентилями мк сможет выполнять другую работу? Вроде обмена данными по SPI \ ногодрыга.
Сделай на 1м таймере блядь, будь мужиком.
Если автоматический счетчик хочешь то 2.
Но можно управляющий не в режиме ШИМ, а системного таймера сделать и тогда будет 1 на тахометр + 1 системный мультизадачный.
>я даже чужой код позаимствовать не могу
Иди раскуривай уроки дедули с narodstream. Он там как-раз по Си уроки пилить начал.
>подключать стм32 компьютеру через microUSB и передавать данные с МК на комп
Берешь КУБ, включаешь там USB. Затем надо добавить в проект вот это(в соответствующие места)
/ USER CODE BEGIN Includes /
#include "usbd_cdc_if.h"
/ USER CODE END Includes /
/ USER CODE BEGIN 4 /
void SendToUSB(const char text)
{
CDC_Transmit_FS((uint8_t)text, strlen(text));
}
/ USER CODE END 4 /
И можно в бесконечном цикле отправлять что-нибудь.
SendToUSB("Sup ra\r\n");
Благо дарю. Давно не смотрел дядю. А СИ подучить надо.
Лолблядь!! Неужели так просто свой COM порт на STM32 запустить? Охуенно!! Спасибо, не знал.
Когда еще не было куба, было не намного сложнее. Достаточно было взять пример и поменять настройку портов под имеющуюся плату.
Надо будет пересмотреть.
Чисто с моего дивана мне это представляется как некая работа с теми же микроконтроллерами, но с достаточной примесью высокоуровневых языков и связанной работой между этими двумя компонентами.
Интернет вещей это когда ты спроектировал 3D-дилдак новой оптимальной конструкции и не выходя из дома запилил пробную партию из 100 штук на заводике в Китае.
>>388201
Ебанутые?
Ебанутые.
Это построение взаимодействия между устройствами, сервисами и потребителем. Конкретная реализация в этом контексте не важна.
Это могут быть пакеты молока с автозаказом по опустошении.
Может быть ардуиноунитаз с подсветкой и голосовым управлением и автоматическим нагревом душа по вылезанию какашечки.
Камеры на дорогах - суть тоже IOT.
Защиты всяких коммуникаций с вызовом ликвидаторов и тд и тп.
Короче это дохуя широкое понятие, но ОБЫЧНО его употребляют именно в первых двух вариантах. Т.к. в 3 и 4 работают серьезные дядьки и им не до хипстерского сленга.
А вот в 1 и 2 очень много разводил, выебщиков и мутных фирм, там процветает всякие модный сленг и прочее.
Кто сталкивался с POE?
Попросили сделать устройство с доступом по сети, и POE-питанием. Искал готовые решения, нашёл пока только https://robotdyn.com/poe-module-9v.html.
Во всех POE-схемах из гугла, Data-каналы идут через фильтр (Magnetic Interface Circuit).
Вопрос: 1. Как в моём случае должна выглядеть нормальная схема подключения MCU к RJ-45 коннектору (с POE и PHY)?
2. Существуют нормальные, не дорогие решения PHY+POE? (Т.е. либо одна микросхема, совмещающая PHY, POE и устанавливающаяся на плату, либо готовый модуль, желательно с RJ45-разъемом, и выводом питания.)
Спасибо.
>Кто сталкивался с POE?
Не сталкивался, но тем не менее находится такое нетрудно.
https://www.digikey.com/products/en/integrated-circuits-ics/pmic-power-over-ethernet-poe-controllers/779
И выбираешь там тип "Controller (PD), DC/DC".
Смотри на модули для камер типа
https://ru.aliexpress.com/item/32821605262.html
https://ru.aliexpress.com/item/4000118924552.html
Ты еррату вообще читал?
Криво нажал кнопки в кривом кубе, однозначно в этом виноваты баги микроконтроллера, а не баги куба или нежелание читать документацию.
Если чисто для себя то можно, но не более.
Считаю что одна из проблем stm32 это отсутствие аппаратного буфера хотя бы под UART, spi.
Я все сказал
>Разносит куб и сам камень, как будто это не единый, комплексный продукт
Ты ещё скажи, что я должен под каждый микроконтроллер либы вручную писать.
мимокрок
А где он есть? Обычно просто программно берёшь из UDR считываешь по флагу и записываешь в кольцевой буффер.
Бывает такое. Например в LPC есть аппаратный FIFO.
Основная проблема этого буфера то, что он имеет фиксированный размер.та если придет чуть меньше или чуть больше, есть большой риск что потеряются необходимые данные
Дебс, этот буффер можно кольцевать, с прерываниями по заполниению всего/половины буффера.
Ну и что? Чисто гипотетически представим что ц тебя буфер на 10 символов, а прислали 12. Аппаратно у тебя не никакое прерывание про эти 2 байта не сообщат. Только если ты сам будешь вручную чекать регистры или на крайний случай включить аппаратный захват конца сообщения для modbus rtu(там мк сам отсчитывает время молчания в 3.5 символа и включает прерывания или типо того, не помню точнее)
1. Иметь буффер на 10 байт когда у тебя можно быть всего пару буфферов — дизилизм, а при буфферах большего размера вероятность таких ситуаций резко падает.
2. Как только буффер заполнится наполовину/полностью, ты получишь прерывание, в котором ты, скорее всего, тупо скопируешь буффер в большой буффер, если данных в текущем недостаточно, при этом вторая половина буффера продолжит писаться, пока ты выполняешь свой код прерывания (или копируешь пол буффера в свой больший буффер, в т.ч. используя mem2mem)
Мне кажется что ты что-то путаешь. В некоторых микроконтроллерах одновременно есть и ПДП и аппаратный FIFO. Для примера LPC1768.
В чем разница? Зачем так сделали?
ПДП копирукт данные без участия процессора, а ФИФО позволяет хранить ждущие для чтения или для передачи байты локально. Это уменьшает количество прерываний и/или активации ПДП во время работы периферии.
разница 2к со 100 рублями значительна, учитывая шо мне для ознакомления, знаю шо f4 и f7 имеют dsp, но хотелось бы бюджетнее
Зачем для этого микроконтроллер? Почему на компьютере нельзя сделать то же самое?
>16 ацп на нём.
АЦП там все же один, с мультиплексором.
Если ты делаешь какую-то обработку звука, то советую для начала отладить на компьютере. Вот серьезно, чем код для компа будет отличаться от кода для микроконтроллера? Если нормально напишешь, то будет отличаться только ввод/вывод.
Только им не рекомендуется мерить температуру внешней среды или типо того.
Анон, возникла проблема...
Когда я первый раз подключаю мк к компу, то всё происходит прекрасно, данные передаются правильно. Но затем, когда я отключаю USB и подключаюсь снова, то комп выдает ошибку код 43 (сбой запроса дескриптора устройства). Если же отключить питание микроконтроллера и потом подключить снова, то первый раз все пройдет успешно, а после вытаскивания юсб и подключения будет опять возникать эта ошибка... в чем может быть проблема? Пробовал обновлять драйвера, ничего не помогло
Чини код в контроллере, там где-то баг(и).
Если плата Blue Pill то придется возится с выпаиванием подтягивающего резистора на USB. Я бы забил и оставил как есть.
Тогда придется раскуривать работу USB, чтобы он умел определять что был отключен и перезапускался.
У меня ф4 дисковери с 407 контроллером, которая без дисплея и с аудио-выходом. ЮСБ работает норм. В примерах были баги, например в примере с ЮСБ звуковой карточкой кривые настройки ПЛЛ были и что-то ещё. Давно игрался.
Да я уже заказал, только stm32f411ceu6, помощнее чем ccu6, но спасибо шо ответил.
В библиотеке от st такую строку (или отсылок к ней) не нахожу. Соответственно и изменить не могу, а хочется.
Есть подсказки?
Насколько я помню, она в файле с дескрипторами в классе hid в библиотеке hal
Нужно быстро сделать устройство, которое будет иметь Web интерфейс с 2 страницами (1 - периодически изменяющиеся результаты измерений, 2 - настройки устройства).
Есть отладка STM3210C, но нашёл на неё только слегка запутанный пример, где не до конца понятно, как формируются вэб-страницы.
Думал взять что-нибудь из примеров в кубе, какой-нибудь WebServer на FreeRTOS, но на мою плату ничего нет.
Есть пример который предоставляет сама FreeRTOS, но под IDE Rowley CrossWorks, которая у меня отказывается работать.
Есть какой-нибудь совет, анонче?
> Думал взять что-нибудь из примеров в кубе, какой-нибудь WebServer на FreeRTOS, но на мою плату ничего нет.
Если на твою плату есть LwIP, то веб-сервер уже не зависит от модели платы, и любой сервер, работающий поверх LwIP будет работать
На твою плату встаёт LwIP?
Имеет смысл добавить еще VTref (VDD Target). В принципе по минимуму хватит SWCLK, SWDIO и GND.
Если не нужно экономить место на плате, то ставь 20-контактный разъем, как на нормальном ST-Link, а не китайском поделии. Тогда можно будет втыкать в плату простой шлейф от отладчика, а не возиться с отдельными проводками.
>дебага через st link
>дискавери платы
В дискавери встроенный ST-Link, зачем что-то еще? И как соотносится дискавери с тем что у тебя на картинке?
А еще у тебя к выводам OSC32 подключен кварц на 25 МГц. Выводы, которые называются подобным образом, обычно предназначается для низкочастотных кварцев под RTC. Там обычно ограничение по частоте.
Я хочу ст линком с платы дискавери запрограммировать отдельную плату, вроде так можно.
За кварц спасибо, не доглядел
конденсатор тоже не особо нужен, там встроенная задержка
а смысл?
Когда и меня вела дорога приключений, а потом китайцы стали продавать готовые в металлическом корпусе за доллар
кто нибудь использовал DWT таймер?
32l152
в дебуге считает а сам-нет
не пойму,как пнуть
где найти инфу как разлочить в realase,
Джва чая, беру готовые и ДОВОЛЕН КАК КОТ.
Лол, обычный код на SD карту бери тогда и всё. Серьёзно, в сети fatfs как минимум джве библиотеки.
Спс, но у меня на плате не заработало. Почему - разбираться не стал.
>>390827
А вот это заработало. Взял LwIP, накатил на него httpd как в примере, идущем с STM32F4xxG.
Только не могу понять одну вещь, как мне в LwIP в рантайме сменить IP и MAC адреса?
Чтобы не костыльно (костыльно и так могу).
> как мне в LwIP в рантайме сменить IP и MAC адреса?
Мак-адреса с айпишниками никто на лету не меняет, или ты хакер кокойто?
Мак адрес по-хорошему должен быть уникальным и привязанным к конкретному устройству.
IP адрес можно получить динамически по DHCP от роутера при включении в сеть, dhcp_start() в lwip
Не, нужно статический Мак и Айпи, без дхцп.
Я уже передумал на лету менять, придумал что просто настройка мака и айпишника будет в отдельном режиме, всех устроит я думаю. Мне лично так нравится даже больше.
>А по среде разработки советую связку STM32CubeMX + Keil + STMStudio. Сгенерил проект в кубе и пишешь себе код в лучшей IDE для ARM
>в лучшей IDE для ARM
А при чём здесь Eclipse?
>1) Без книг по Си по любому не обойтись.
Справочника Шилдта хватит с головой. А через год уже полностью выучиваешь язык и книга становится не нужна.
> Мак адрес по-хорошему должен быть уникальным и привязанным к конкретному устройству.
Мак-адрес может быть почти любым, даже ты на своей сетевухе скорее всего можешь поменять его в любой момент в настройках драйвера. А еще можно поменять два младших битика в старшем октете и получить locally administered address. В этом случае главное - отследить уникальность адреса в пределах твоей сети, и все.
>>391992
> придумал что просто настройка мака и айпишника будет в отдельном режиме
Двачаю, тоже так сделал, зависимости нет, брат жив.
Ну в зависимости на сколько ты ебанутый. Некоторые считают хорошим тоном идеально знать приоритеты операторов и всякие понты типо запятых в условиях.
Но что бы писать хороший, код это вообще противопоказано.
Нет ничего хуже долбоеба понтующегося знанием приоритета операторов, просто хуже червя пидора.
Железо + указатели + знакомство с высокоуровневым языком, пару месяцев плотных упражнений и ок.
Ага, сменив компилятор и/или процессор, внезапно узнавать на практике, что у тебя UB. И даже не понимать после этого, что словил UB.
> Мак-адрес может быть почти любым, даже ты на своей сетевухе скорее всего можешь поменять его в любой момент в настройках драйвера
Я не говорил, что его невозможно поменять. Мой пост был не про то, как можно, а про то, как надо. Да, на сетевухе его возможно поменять, но зачем? Она точно так же перезапустит DHCP и получит айпишник от роутера, привязанный к новому мак-адресу. Меняют его, например, когда человек поменял сетевуху на новую, а в роутере жестко прописан мак адрес от старой, и нужно, чтобы новая тоже заработала со старым мак-адресом. Но это довольно специфическая ситуация, и таким в 2019 редко кто занимается
Про то, как надо, говорит 1 разряд старшего октета Мак-адреса, а он говорит о том, что если твоя железка не предназначена для выхода в глобальную сеть, ты вправе ставить ей любой адрес и не платить деньги дядям из IEEE за диапазон абсолютно уникальных адресов.
>example1
Если мы говорим о какой то переносимости - какой нафиг int?
Неявное приведение туда же.
Тернарник в аргументе - туда же.
Ты сам заряжаешь сраное ружье, а потом кичишься, что уворачиваешься от пуль.
Все эти примеры вглядят компактно и пиздато, только когда это примеры, как только они переезжают во что-то прикладное - это превращается в лютейший пиздец.
Тебе жалко строк текста? Мне жалко например времени, даже сраных 500мс, которые я буду вчитываться в ебучий тернарник в аргументе.
В примере, он очевидный, но ты сам знаешь (должен) во что это превращается в прикладной программе. Я вообще это дерьмо использую только что бы явно обозначить, что я куда-либо BOOL загружаю, а не 159 или 0.
https://ideone.com/R8ejI7
ЖИРНО, зато ребенок после 3х статей с гугла прочитает и сам будешь просто пробегать глазами и понимать.
За исключением доп функционала компилируется в тоже самое. Вопрос тогда нахуя все эти выебоны?
Так вот и я о том же.
>Железо + указатели + знакомство с высокоуровневым языком
К этому нужно добавить хотя бы осознание о существовании неявного приведения типов. А откуда оно возьмется без чтения хоть чего-то? А потом добавить еще кучу всего, только чтобы не стрелять себе в ногу.
Оно же как раз возьмется от знания железа и машинного представления данных.
Ну я черт знает, если у тебя в голове укладывается представление о UINT в железе, при этом ты используешь SINT и не пробовал задуматься а как оно выглядит - считай уже без колена.
И к слову, при сравнение знакового с безнаковым, оно разве не должно ворнинг выписывать?
>Оно же как раз возьмется от знания железа и машинного представления данных.
Нифига. Что мешало неявно привести к типу большего размера, раз уж программист вдруг захотел такое написать? Ну да, в железе это будет куча операций с битом переноса, но что с того?
>Ну я черт знает, если у тебя в голове укладывается представление о UINT в железе, при этом ты используешь SINT и не пробовал задуматься а как оно выглядит - считай уже без колена.
Свои фантазии постарайся держать при себе. Я не то что на ассемблере хелловорлды писал, но и самодельный процессор на ПЛИС делал.
>Что мешало неявно привести к типу большего размера
То, что через месяц будешь сидеть и думать, нахуя я тут к болшему типу привел.
Си не самый читаемый язык и все очень хотят его на кой то хуй усложнить и добавить побольше труднопредсказуемой хуйни.
>добавить побольше труднопредсказуемой хуйни.
Поэтому давайте разрешим сравнивать знаковые числа с беззнаковыми, а предупреждения будем выдавать только при каком-то флаге компилятора, который попробуй еще найди.
>И к слову, при сравнение знакового с безнаковым, оно разве не должно ворнинг выписывать?
В gcc эти предупреждения включаются через -Wsign-compare -Wconversion, но -Wall -Wextra это не делают.
Что ты мне пытаешься доказать, поехавший? Мой изначальный пост не противоречит твоему утверждению
Может анон пояснить, как выглядит GET-запрос JSON, и как мне на него отвечать при помощи httpd-сервера встроенного в LwIP?
Я думал это обычная текстовая страница, в JSON-формате, но оказывается думал неправильно.
>>391922-кун
>как выглядит GET-запрос
>Я думал это обычная текстовая страница
Запрос это явно не страница, по любому.
В заголовок HTTP нужно "Content-Type: application/json". Где это в LwIP я без понятия.
>Поставь wireshark, открой любую страницу и увидишь
Раньше канало, сейчас во времена httpS - хуй. Надо искать незащищенный сайт или через отладчик в браузере смотреть запросы и ответы.
Ничего утверждать не берусь, потому что lwIP не касался, но что тогда это такое в репозитории lwIP?
http://git.savannah.nongnu.org/cgit/lwip.git/tree/src/apps
Ок, я понял.
>В заголовок HTTP нужно "Content-Type: application/json". Где это в LwIP я без понятия.
Если правильно понимаю, можно подставить это в файлах в fsdata
А возможно я понимаю неправильно. Хуй знает.
>>393331
Ну и в пакете с самим LwIP идёт овер дохуя всего. Например тот httpd (в котором есть службы cgi и ssi).
>>393327
Ок, открыл пикрил в лисе. А запостить этот запрос как?
>А запостить этот запрос как?
В смысле вручную отправить то, что мне надо. Не очень понимаю механику процесса.
> А запостить этот запрос как?
Ну вставь в строку браузера просто и нажми enter. Он отправит GET запрос
Эмм если я не ошибаюсь GET\POST это текстовые запросы по TCP (в частности)
Т.е. так текстом и шлешь. Ну может заголовок отличается и какой двоичный. И за кодировку не скажу.
Да, всё так.
Можешь для примера посмотреть макакин json
2ch.hk/makaba/mobile.fcgi?task=get_boards
Решил накатить http-netconn. В примерах для F4xG есть LwIP+FreeRTOS+NetConn.
Ну прикрутил я к своему проекту FreeRTOS, вчера полдня ебся чтобы запустить на нём LwIP и NetConn.
Закончилось тем, что я пососал писос:
- LwIP инициализируется, всё нормально, винда STMку видит если вбиваешь arp -a.
- Тред с netconn создаётся. Микроконтроллер регулярно приходит в это тред.
- В процессе исполнения netconn приходит в "sys_timeouts_mbox_fetch" и остаётся там навсегда..
LwIP не передаёт какие-то сообщения операционке?
Не пойму, что за херня и куда смотреть.
>>393374-кун
Сразу через интернет заливать данные не?
Да, только на каталог глубже - /LwIP_HTTP_Server_Netconn_RTOS/
У меня вообще нет такой функции. В комментах предлагается ее реализовать самому при LWIP_TIMERS_CUSTOM==1
Как-то странно ты пишешь. lwIP кроссплатформенный. Код, непосредственно взаимодействующий с периферией микроконтроллера не входит в состав lwIP. Так что ничего не должно мешать использовать любую версию.
Ты не понял о чем я. Я пишу, что у меня в примерах может быть версия самого LwIP иная, чем у тебя (или не у тебя, а у более раннего анона, если вы не одно лицо).
Потому у тебя и отличается реализация "sys_timeouts_mbox_fetch".
Походу ты используешь ветку STABLE-2_0_0, а у меня STABLE-2_1_0 , поэтому у меня такой функции нет. Кто ее вызывает?
Как оказалось - я просто провафлил несколько важных моментов -
1. Я оставил NetIF config от "RAW" версии. В ней не был установлен указатель на неправильную функцию (ethernet_input вместо tcpip_input, но это я заметил и поправил раньше), и в конце я каким-то образом не заметил, что в FreeRTOS версии создаётся симафор и тред с "ethernetif_set_link".
2. Когда пофиксил это, Keil ругнулся ворнингом на макрос инициализирующий тред. Оказалось, что функции в ethernetif должны учитывать, что они работают с осью. Функции из RAW примера, ясен хуй, не подошли. Скопипастил в проект функции из примера F4, подправил под свой мк, и оно заработало.
Не совсем понял, почему не работает режим RX_POLLING, только RX_INTERRUPT.
3. Забыл, что надо добавить обработчик прерываний на Ethernet, и не мог понять, хули МК зависает. В отладку даже не заходил, потому что я хуй пойми, как отлаживаться с FreeRTOS'ом.
А ещё, как оказалось, MII_INT выход PHY не имеет никакого отношения к ETH_RX_INTERRUPT, да.
Теперь осталось сообразить, как перейти в режим RMII. В тупую поменять ETH_MEDIA_INTERFACE_MII в "low_level_init" не прокатывает.
>>393901-кун
Я винду буду переустанавливать через какое-то время или комп поменяю.
И зачем он мне? Просто чтобы снять табличку "Активация шиндошс"? Лично мне не мешает, а больше и некому.
Мне нужно ~16к раз в секунду снять и записать значение с 2 микрофонов. Что стоит использовать, 2 АЦП или 2 канала одной АЦП? Какие настройки должны быть у АЦПшки?
Снимать собираюсь по таймеру.
>~16к раз в секунду снять и записать значение с 2 микрофонов
Я хуй его знаю. Купил дискавери-746, на ней 2 микрофона присутствует. Примеры использования должны быть в кубе
Ты про MP34DT01? Так это ж MEMSы, для них АЦП не нужен, за то нужен кодек.
А кодеков, да и самих МЕМсов - в рашке в наличии я не нашёл.
> я хуй пойми, как отлаживаться с FreeRTOS'ом
Навешать себе rtos и lwip и пытаться починить это все без отладчика - так себе идея. Да хоть бы просто в отладчик зашел, просто при этом ты не увидишь, в каком потоке находишься. Да хоть бы и сделать отладочный вывод через UART/ITM_Trace, включив в freertos и lwip опции отладки и трассировки, и выводя в отладочную консоль Кейла. Да хоть бы и поставить TrueStudio, в котором все готовое из коробки бесплатно без мокрых писечек и смс, еще и редактор кода в 100 раз пизже, потому что eclipse.
>MP34DT01
Как ни странно, но есть в электронщике.
Для речи вполне хватит встроенного АЦП. Даже 8 бит хватило бы. Если тебя это устраивает, то какие проблемы? Усиливаешь, к примеру, на операционнике и на микроконтроллер.
Собрался рисовать UI на 746-дискавери, вдохновившись Экспансией и Прометеем, и ожидаемо соснул. Для подобных интерфейсов необходимы разрешения минимум 3840х2160. Со посоветуете почитать про UI на мелких дисплеях, типа 480х272?
Мне вот непонятно зачем брать для такого не одноплатник с линуксом, а микроконтроллер?
>Да хоть бы просто в отладчик зашел
Ну так я захожу в отладчик, только т.к. не понятно какой поток в каком состоянии - сосу бибу.
>Да хоть бы и поставить TrueStudio, в котором все готовое из коробки бесплатно без мокрых писечек и смс,
Да, я его первым накатил. Только почему-то начал работать в кейле, хз почему. Может потому что надо было начать с готового примера, а под TrueStudio он не заработал. И ещё потому что у меня отладчик - древний jLink V6, и мне было лень его настраивать.
>редактор кода в 100 раз пизже
Чот мало, я бы сказал что разница в редакторах как между кейлом и ардуино - небо и земля просто.
>>394540
>Как ни странно, но есть в электронщике.
Мне нужен MP34DT05 (у него нужные мне характеристики). И для него, как и для MP34DT01, нужен кодек. Их я найти не смог. Если пояснишь, как искать такое - буду признателен.
Мне нужно, чтобы было в наличии в рашке.
>Для речи вполне хватит встроенного АЦП.
Вопроса в том что встроенный АЦП подойдёт - у меня не возникает. У меня возникает вопрос, какие настройки нужно выставлять ему для моей задачи (включить измерение в непрерывном режиме или по запросу, какое время сэмплирования, частота тактирования, постоянный использовать 2 отдельных АЦП на каждый микро, или просто можно использовать 2 канала одного ацп).
Ну и ещё вопрос, в том можно ли охватить диапазон 30-130дб одним микро и этим 12-битным АЦП.
>вдохновившись Экспансией и Прометеем
Что за интерфейсы такие? Чем лучше стандартных UI от STM'а?
>Что за интерфейсы такие?
Да, блядь, киношно-космические. С кучей интерактивных графиков от которых контроллер жидко пернет и сдохнет.
На работе в конторе сказали, что avr и pic это старое говно и теперь переходим на stm32, вот уже с месяц его изучаю.
Я правильно понял: в AVR хардварные настройки(частота тактирования, сторожевая собака, напряжение питания и т.д.) задаются прошивкой фьюзов, а в stm32 их прописывают в начале программы?
>приоритета операторов
В каждом компиляторе может быть разный.
Тот же MISRA C указывает задавать приоритет скобками, чтобы не было двусмысленности трактования приоритета.
>но и самодельный процессор на ПЛИС делал.
Нашёл чем хвастаться, это делает чуть ли не каждый, кто вкатывается в ПЛИС.
Относительно частоты и срабатывания сторожевого пса все делается программно. По счёт питания сказать не могу
>фьюзов
Там обычный епром а не фьюзы, емнип.
Но в остальном да, тут вся хуйня выставляется в начале проги. Даже небо, даже Аллах. Как происходит работа с DSP в моделях где он встроен - не знаю, вероятно тоже так же.
В начале, у тебя МК заводится на встроенном генераторе, дальше ты идёшь его конфигурировать, потом работаешь как тебе надо.
Сакральный смысл в том, что ты можешь менять частоту в процессе работы, и снижать потребление устройства.
>30-130дб
Как-то все странно. Что это означает? дБ - это просто логарифм отношения одного числа к другому. Может ты имел в виду дБа?
Но даже если так, то 100 дБ это изменение по мощности в миллиард раз, а по напряжению в 100 тысяч раз. А у тебя АЦП 12 разрядов.
Может тебе нужно использовать АРУ?
>АРУ
Нет, мне нужно без АРУ, мне всегда нужно знать точный уровень.
>по напряжению в 100 тысяч раз
Это тоже правда, что посоветуешь?
Читаю мануал, там есть такая табличка (пикрил).
Но не могу понять 2 вещи:
1. Почему Vdda сделан отдельным выводом, если он должен быть равен Vdd обычному? Точно так же с Vssa и Vss.
2. Примерно то же самое с Vref- почему от должен быть равен Vssa?
>в миллиард раз
10^10 - это 10 миллиардов, тут я написал не правильно, а про 100 тысяч тем не менее правильно.
>>394748
>Это тоже правда, что посоветуешь?
Знать бы еще что тебе нужно. Может ты из ардуиновского треда с дурацким шумомером?
>Но не могу понять 2 вещи:
Электромагнитная совместимость, разделение земель и все такое. У ST наверняка есть что-то с названием вроде "EMC design techniques", где написано про все такое применительно к их микроконтроллерам.
> Нет, мне нужно без АРУ, мне всегда нужно знать точный уровень.
100 дБ это слишком дохуя для 12 разрядов без АРУ. Тут уже скорее 24 надо, и то еще не хватит, т.к. эффективная разрядность меньше окажется.
Про 100к раз я тоже посчитал, иначе бы подправил
>Может ты из ардуиновского треда с дурацким шумомером?
Йап
Есть предложения? Можно, конечно, сделать как у Gravity, с их Decibel Level Meter'ом (один микрофон, несколько операционников, аналоглвый мультиплексор и мк, мне так же, только без мультиплексора), но если можно на двух каналах - то лучше на двух каналах.
Зачем тогда тебе микроконтроллер? Не проще ли обойтись одним логарифмическим усилителем?
>аналоглвый мультиплексор
>на двух каналах
По твоему, что такое каналы АЦП в микроконтроллере? Это аналоговый мультиплексор и есть.
Потому что у меня есть овердохуя каналов АЦП в МК.
>>394768
>Зачем тогда тебе микроконтроллер? Не проще ли обойтись одним логарифмическим усилителем?
Потому что мне нужно получить данные о уровне звука в микроконтроллер, а потом делать с ними одному мне известные дела.
>По твоему, что такое каналы АЦП в микроконтроллере? Это аналоговый мультиплексор и есть.
Ну тоже правда, но это не снимает моего вопроса о настройках АЦП и необходимости использовать два АЦП вместо двух каналов.
Так понимаю, нужно поставить режим непрерывного измерения, выбрать нужные каналы, по таймеру ~16к раз в секунду снять данные с 2 (или больше) каналов?
Не мог прикрепить к прошлому сообщению
https://blog.yavilevich.com/2016/08/arduino-sound-level-meter-and-spectrum-analyzer/
Вот такую няшу надо, только с нужным мне диапазоном.
А пикрил - то что упомянул в прошлом посте, Gravity Decibel Level Meter. Если правильно понимаю, сигнал подаётся с микрофона на 4? операционника с разным КУ, через мультиплексор, на микроконтроллер C8051F330, дальше преобразует это в какую-то линейную шкалу и выводит на ЦАП, судя по всему. Только мне не до конца понятно, как работает параллельное подключение к 4 ОУ одновременно (как избавляются от негативных эффектов) и для чего 2 сборки по 4 усилителя.
Если я хуйню где-то несу, я прошу чтобы анон меня поправил, если что.
>в какую-то линейную шкалу
Не понимаю такого. Микрофоны и так более-менее линейные. Может ты имел в виду логарифмическую шкалу?
>Потому что мне нужно получить данные о уровне звука в микроконтроллер
Как раз для этого можешь взять логарифмический усилитель, например AD8310.
> 4? операционника с разным КУ
Ты понимаешь, что требуешь решение без АРУ, приводя в пример схему с АРУ?
>Ты понимаешь, что требуешь решение без АРУ, приводя в пример схему с АРУ?
Ну, во-первых, я ничего не требую, лол. Я тут вроде как не в позиции, чтобы что-то требовать. Я спрашиваю совет.
Во-вторых пример - это просто датчик уровня звука, который измеряет шум в помещении, и в зависимости от КОЛИЧЕСТВА ДЕЦИБЕЛ устанавливает напряжение на выходе.
"АРУ" там выполняется микроконтроллером. Пример тут от того, что мне нужно получить данные в микроконтроллер, примерно так же, как получает он. Дальше как с ними работать, и как исполнить собственную "АРУ" - я вроде как знаю.
>>394826
>Может ты имел в виду логарифмическую шкалу?
Simple Conversion: linear analog output, 0.6~2.6V linear correspondence 30~130dBA, no complex algorithm is required
>Как раз для этого можешь взять логарифмический усилитель, например AD8310.
Вот всё в нем заебись, даже в чипдипе есть, только не могу найти готовую плату с ним в наличии.
> Так понимаю, нужно поставить режим непрерывного измерения, выбрать нужные каналы, по таймеру ~16к раз в секунду снять данные с 2 (или больше) каналов?
Ну видимо да, раз так стоит задача. А зачем два АЦП или два канала? Если для двух разных диапазонов, то видимо придется делать автоматическое переключение диапазонов, т.е. переключение между каналами.
>correspondence 30~130dBA
Это означает, что напряжение на выходе этой платы пропорционально логарифму от интеграла входной мощности (или квадрата входного напряжения). В этом контексте, шкала это то же что и масштаб. Тут даже не понятно к чему относится масштаб, но про линейность это странно.
>только не могу найти готовую плату с ним в наличии.
Какая нафиг плата? Это SOIC-8, ты еще отладочную плату для простого резистора запроси.
>>395004
>А зачем два АЦП или два канала?
Из-за того что он хочет обеспечить 100 дБ перекрытие.
>Из-за того что он хочет обеспечить 100 дБ перекрытие.
this.
К стати, есть какие-то советы/мысли на этот счет?
>Какая нафиг плата? Это SOIC-8.
Ну я хотел какой-то референс дизайн, чтобы не паять и не настраивать сейчас самому это вот всё.
>>395004
>Если для двух разных диапазонов, то видимо придется делать автоматическое переключение диапазонов, т.е. переключение между каналами.
Ну я буду смотреть, если превышено значение на мелком усилении - читать, что происходит на втором.
>Ну видимо да, раз так стоит задача.
Вопрос в выборе именно настроек АЦП. Я не очень понимаю, что мне даст выбор континьюс мода, и что мне даст выбор определенной продолжительности семплирования (например 13.5 циклов АЦП, или 71.5 цикл АЦП, или вообще 1.5 цикла).
И ещё, как континьюс мод будет работать с аналоговым мультиплексором - не внесёт ли это доп помеху.
>Хочу вкатится в разработку на stm32.
Зачем? Лучше в веб вкатываться и делать сайтики, стабильный спрос хоть в офисе, хоть на фрилансе и нормальный доход.
На микроконтроллерах и плисах работы кот наплакал и платят за неё копейки - ненужное говно.
Для сайтиков нужен один комп, а для электроники кучу инструментов, приспособлений, приборов и девборд. Материализм, сука.
Я ранее (месяц назад) спрашивал про POE-модули.
Подумав, поковырявшись и поняв что времени ждать посылку с алика нет, я решил собрать POE самостоятельно. Кто-нибудь из местных анонов, собирал POE-модуль самостоятельно?
В процессе гугления понял, что понадобится: RJ45 разъем (простой 8-контактный, без встроенного трансформатора), сигнальный трансформатор (вроде H2019), диодный мост, POE интерфейс, DC-DC преобразователь.
Вопросы такие:
1. Напомните, где искать? Нужно из наличия. И желательно, чтобы было овер дохуя. Смотрел на ЧипДипе, там нет нихуя - ни разъемов нормальных с трудом подбирается SMT разъем без трансформатора, но и без светодиодов, к сожалению, ни H2019 в наличии, ни ху я.
2. Какой RJ45 посоветует анон? Если со встроенной индикацией - то вообще заебись было бы.
3. Нужен DC-DC преобразователь с 48 на примерно 7.5V (можно чуть больше, можно чуть меньше). Мощность хотелось бы соответствующее возможностям схемы на пикрил. Что посоветуешь, анонче?
Принимать, у меня на пикче PoE PD.
Подскажи, пожалуйста, что улучшить.
У меня источник питания - стабилизированные 5.0В(IN_5V), они же пойдут через делитель 1/2 на AVCC микроконтроллера.
Оттуда же, планирую взять питание для стабилизатора 3.3, с которого питается микроконтроллер.
Насколько правильно использовать такую конструкцию? Сделал как в микрофоне Adafruit'а (AVCC, AGND через феррит), но не знаю, насколько это годно.
Так я успешная веб-макака 4к$, фрилансю на берегу Тайваня и зашёл сюда попроигрывать с вас.
У тебя шаблон вордпресса поехал, иди переверстывай
бамп
Из Википедии:
Машинное слово — машинно-зависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки).
С существованием прояснилось, а с использованием - не особо. Если это отладка типа Nucleo или какой-то open source multi-tool, а не стиральная машина или паяльник, то от MVP-экономиста и его огрызка будет страдать юзер девайса. Хотя, если ты не лох юзер, а индиец из ST, то можно и 767 выпустить в трёхногом корпусе, справедливо откусив у него всю периферию. Всё равно за нормальным чипом чуть позже придут и ещё шекели принесут.
>можно и 767 выпустить
А мне нравится фирма Боинг и ее старичек старушка Королева Небес 747. Подгонишь пару-тройку пассажирских Боингов 747-400?
Молодой человек, это не для вас Боинг. Для вас автобус по маршруту 030
Добавлю, что если нет привязки к архитектуре или ранее не объявлено обратное, скорее всего имеется ввиду 16бит
>Добавлю, что если нет привязки к архитектуре или ранее не объявлено обратное, скорее всего имеется ввиду 16бит
Только на интелах и на винде, короче на всём, что имело корни в те времена. АРМы, МИПС, Альфы и прочее - слово 32 бита.
Я анон полный долбоеб, я почему то ответил в контексте - полуслово.
Потому что проект, который будет компилиться, выбирается слева в Project Explorer.
Нет, не очень, недавно вот первый проект в нем сделал.
>>396914
>>396998
рукожопый хуй репортинг ин. у меня тут куча глюков внезапно возникла с эклипсом, переустановка не помогала. Он даже перестал компилировать свежесгенеренный кубом проект и срал дикими ашибками. Оказалось, у меня тут ембитц был установлен. снес его, переустановил эклипс и всё снова работает.
Че их там осваивать? Куб же сам под мейк генерит проекты. Алсо, эклипс можно использовать чисто как текстовый редактор
Возможно это переменные среды. На сайте плагина GNU MCU Eclipse есть статейка, как сделать все без них.
а мне пох что осваивать, проблема в том что я в этом обезьяна. не хватает знаний пока.
Ну изначально там(в скачанной либе) юзался мемсет на весь массив, после которого сразу hardfault уходило. Потом уже тупо циклом я попытался пройтись, где на каком-то элементе такая же херня происходит. Хз, что делать, помогите
в этой строке
(unsigned long)(0x40023830) |= 0x8;
нахера нужны вторые скобки? и без них компилируется. Нахера нужна вторая звездочка?
ебаная макака. сожрала звездочки. я х туда поставил
Ты приводишь к типу указателя на лонг, потом производишь логическое или с данными по адресу
>короче надо просто принять это
х((unsigned long х)0x40023830) |= 0x8;
Воттаквот скорее будет привильней записать
так тоже компилируется
В смысле не припаянный вообще ни к чему? По ряду причин такое обычно не целесообразно.
Программируется либо через JTAG или SWD, либо через бутлоадер. Для первого варианта потребуется ST-Link или какой-нибудь другой -Link. Для второго варианта в зависимости от микроконтроллера, более старые и те что попроще можно через переходник USB-UART, а в тех что поновее есть DFU бутлоадер, с которым достаточно воткнуть микроконтроллер напрямую в USB.
добра, няша
Референс мануал не открывал
Тут нет ошибки. У регистра хххх_MODER адрес(смещение) 0х00.
Тут показывают что порты А и В особенные из-за JTAG-а и у них отличающиеся начальные значения в регистрах MODER.
Конкретно адреса начала блоков регистров под конкретный банк регистров ищи выше в размеле memory map.
Проебаная точка с запятой или присвоение вместо сравнения
((unsigned long)0x40021814)=0xffff;
вот этот кусок. в таком виде он в порт единицы не пишет. а в таком
while(1){ /for(j=256; j==32768; j=j2)/{
((unsigned long)0x40021814)=0xffff;
пишет. чо хуйня, двощ?
Да сходу не вникая в бред - это твой косяк в "j=j2".
Условие изменения задай нормальные, хотя бы j++ и посмотри что будет.
нене, хуйня. с "нормальными" типа j=0; j>8; j++ тоже не работает. а в приведенном выше говнокоде макака сожрала знак умножения между j и 2. я там хочу последовательно ноги перебирать.
с while тоже не работает, кста
Может перестанешь упарываться?
>типа j=0; j>8; j++
Что у тебя на первом шаге? j=0. "0>8" ? Нет, цикл окончен, пошел нахуй.
ой блять. тупанул. пойду проверять. спасибо мил человек!
пикрелейтед не работает, на всех ногах единицы тупо. предельное значение переменных менял до миллионов - тупо 1 на всех ногах (все диоды горят)
с двумя плюсами тож не работает
Блятьпиздос. Где ты был, когда весь класс циклы учил? Хуи сосал?
На, вот, просвещайся, https://prog-cpp.ru/c-cycles/
вот хуле ты такой грубый? тут пустые циклы гоняются ради задержек между подачей 0 и 1 на ноги порта. в чем косяк?
оно и со стрелками во всех направлениях и бес стрелок с == не работает. хотя у меня есть подозрение что частота слишком высокая. потому что при заливке прошивки индикаторы горят ярче чем при работе программы. думал что компилятор оптимизирует пустые циклы и пробовал их нагружать - нихуя. если закомментить выделенный кусок говногода - индикаторы горят ярче.
>>398878
Вообще ебануться. Цикл в цикле, где у верхнего цикла переполнение переменной при сравнении будет...
Похуй на переполнение, сам прочти что за хуйню написал:
Для каждого i от нуля ебашить (содержие цикла), до .. сука, счетчик переполнилняется и никогда не достигнет нужного значения.
Содержимое цикла - бесконечное увеличение а, которое как и i будет каждые 4м проходов переполняться.
Верни старый вариант >>398868, стрелки "<" и допиши volatile перед объявлением i j.
переполнение - фигня, с малым конечным значением переменных тоже не работало. volatile уже давно пробовал - тоже не помогло.
>но именно с <=. не стрелка и не == а именно <=.
Хорош пиздеть. Разницу увидишь? А если глазки протереть и получше?
#include "stdio.h"
int main (void) {
int i;
for (i = 0; i<5; i++)
printf ("%d ",i);
printf ("\n");
for (i = 0; i<=5; i++)
printf ("%d ",i);
printf ("\n"); }
gcc48 test.c -o test
./test
0 1 2 3 4
0 1 2 3 4 5
Что за говнокод? У тебя IDE при попытке написать
GPIOG->ODR |= 0x000055AA; вываливается в ошибку? Что за ебаная магия с адресами?
да и вроде всякие хедеры подключать надо
у меня кнопки могут выполнять разные действия по разному нажатию, хз как организовать это граммотно
Первая на Altium похожа, он платный и только под вину, но, вроде как навороченный.
Вторая - KiCad, бесплатный, открытый и кроссплатформенный. Говорят, что в последние годы прогресс у него идёт семимильными шагами и на него очень много народу переходит, особенно в среде открытого железа.
Думаю в будущем на него перейти, а сейчас использую DipTrace, у него есть бесплатная версия на 1000 пинов и 4 слоя для СНГ. А ещё в DipTrace есть некоторые фичи, сочетания которых больше нет нигде, и которые сильно облегчают реверс-инжиниринг железа.
> А ещё в DipTrace есть некоторые фичи, сочетания которых больше нет нигде, и которые сильно облегчают реверс-инжиниринг железа.
Например?
Ну, может, насчёт "нигде" и неправда, но в опровобанных мной не было либо возможности подложить картинку и подогнать её в нужный размер без ебли, либо нетлист не модифицируется при проведении дорожек, либо нельзя однной командой убрать все дорожки, оставив соединения в нетлисте, чтобы компоненты были соединены только ретлайнами.
А что у него с сайтом? Писал комментарий и чот всем наплевать. Там на втором уроке сразу какая-то дичь с регистром.
http://narodstream.ru/stm-urok-2-begushhie-ogni/
Он записывает число 0x55000000 включая пины 12,13,14,15, а на картинке отмечены пины 4, 5, 6, 7. Я полчаса тупил почему у меня число 0х5500 получилось.
О себе: бородат, могу в айти, с МК на "Вы". Спасибо.
https://www.youtube.com/watch?v=finP05FFTv8
и
https://www.youtube.com/watch?v=qiSjLxeyNv4
При чем тут вообще cmsis? Стартап ты взял из cmsis или как? Стартап, с таблицей векторов прерываний в любом случае должен быть. Странный у тебя вопрос. Программа вообще начинает выполняться практически с такого же прерывания, как и все остальные. Т.е. в функцию main оно попадает из ресет хандлера, адрес которого должен лежать в таблице в начале флешки вместе с другими векторами прерываний.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/BABIFJFG.html
бро, все еще хуже. Я препод и мне надо это студентам показать готовое, не спрашивай почему.
спасибо, анон!
>с МК на "Вы"
Я смотрел начало этих лекций, он годно стелит, но для совсем новичка слишком подзаморочено, для начала я советую мелкие вводные курсы (тот же дихальт)
+ практику, а теорию подбирать когда будешь упираться в что то.
- Цель
- Нахождение путей реализации
- Изучение пути
- Реализация
Я даже не знаю как иначе, без практики, вся теория из бошки выйдет моментом.
А делать практику, что тебе не нужна - уныло.
Короче, просто бери и делай, то, что тебе хочется.
https://www.youtube.com/playlist?list=PLhtMaaf_npBzsEQ94eGn5RnuE-VdGVObR
Обтек тебе за щеку, проверяй
Что за ерунда? Китайцы скопировали STM32F103C8T6 со всей периферией?
Уже нашел по коду, весьма похоже на это. Теперь вопрос только в том что с этим делать, они ведь похоже не содрали топологию, а сделали какой-то аналог. Наверное в мусорку.
>Ещё GD32 может быть.
Не похоже. В GD32F10x User Manual написано, что
>The BSD JTAG IDCODE is 0x790007A3.
>Насколько я знаю, GD очень даже годный
Все равно нет смысла их использовать.
Хочу писать на ассемблере под PIC и 8051 КАК ДИДЫ!! А все конторки и фирмы предлагают только писать на С/С++ под модные зумерские STM и AVR. Что делать?
Анон, у меня бида-бида.
На nucleo-f446re в stlink был зашит jlink, я захотел его откатить обратно на stlink.
Запустил сеггеровский stm32reflash, выбрал restore stlink, и в процессе прошивки комп ребутнулся.
Теперь в диспетчере устройств виден stlink, но не st utility, ни stm32reflash к нему подключиться не могут, чтоб накатить целую прошивку. Суля по работающему usb, бутлоадер жив же?
Как ему восстановить прошивку? Подпаиваться к swdck/swdio и шить дамп?
Есть какие-нибудь другие способы?
Это жертвы маркетинга с органическим поражением головного мозга.
До 6502 и 68hcxx c пиздатым BDM им как до луны раком
I8051 уже как пару десятилетий не производится.
Я имел ввиду архитектуру 8051 (MCS-51), микроконтроллеры на основе которой до сих пор тысячами выпускают всякие Silicon Lab, Atmel, NXP, Texas Instuments и т.д.
Система команд. В RISC процессорах она искаропки заточена под Си, а на CISC удобно писать на ассемблере.
Это другой анон за меня ответил.
Собираюсь. Последний раз ассемблерил 8051 и AVR на лабах в вузе, и долго не мог бросить, пока препод не заставил перейти на Си. Сейчас на работе мне хватает Си, я довольно быстро справляюсь с заданиями. Но вот коллеги-диды пишут на асме и говорят, что (познать кунг-фу) познать устройство микроконтроллеров и использовать их на все 100 можно только на асме, вот и мне захотелось этому научиться.
Да я просто прикалываюсь, пародируя манеру общения в /hw. Если уже не можем писАть как диды, то хоть посрёмся, как диды.
>>401911
>познать устройство микроконтроллеров
А оно тебе так надо?
>использовать их на все 100 можно только на асме
Да нет, на сишечке то же самое всё. Она, по сути, и есть ассемблер, только машинонезависимый и без необходимости изобретать свою инфраструктуру для различных низкоуровневых идиом, типа функций или циклов. Если ты имеешь в виду, что на асме можно писать программы так, чтобы они с точностью до такта что-то делали, то да, это вполне применение для асма, но такое редко требуется.
Держи нас в курсе
>А оно тебе так надо?
Это необходимо, если хочешь стать настоящим специалистом(я хочу). А зачем? Чтобы получать чуть больше бабок, чем в каком-нибудь нии на окладе. Если погуглить требования на хедхантере на эту профессию - там пишут "знание архитектур MISP, AVR, STM, 8051". Что под этим подразумевается? Очевидно же, знание устройства микроконтроллера и особенности ассемблера. К тому же мне нужно будет и в плис вкатываться и там это пригодится.
А то если хочешь подключить Wi-Fi к своему поделию, то приходится брать ESP.
Угу, ещё есть официальная NUCLEO.
Но хотелось бы чего-нибудь такого же бюджетного от китайцев, как esp32.
>бюджетного от китайцев, как esp32
Ты цену голого чипа видел? Как оно может быть ценой как есп?
>3.3 евро
>250р чип + печатка, обвес, экран, работа за рис, небо и Аллах.
Да даже у китайцы себестоимость будет 500р+. Нихуя не потягается с копеечной есп-шкой.
А ведь действительно, почему-то казалось, что у них есть WiFi.
Получается, что у ST совсем нет никаких аналогов ESP? Чтобы и с Bluetooth, и с WiFi было.
Нету. Есть либо одно, либо второе. Вайфай вообще одним только модулем представлен https://www.st.com/en/wireless-transceivers-mcus-and-modules/spwf01sc.html
Тебе блядь родина дала СИ, что бы ты называл переменные, макросы, записывал это короткими и человекочитаемыми выражениями.
Не хочу нормально писать, хочу дизасмом писать.
Если твою простейшую функцию из 5 строк, не возможно понять без комментариев - говно этот способ.
Какого-то хера не могу подключиться к камню: жи-линк пишет Couldn't connect to device.
Как вытащить с жи-линка более развёрнутый лог, чтобы понять что именно ему не нравится?
Или куда копать, чтобы нарыть причину отказа в коннекте?
Схему перепроверил. Камень припаян хорошо.
Roller Coaster Tycoon
И да, исходники на асме гораздо понятнее того высера выше. Там макро во всю используются.
>а есть вообще большие проекты целиком на асме?
Какая-то операционка, насколько помню, на АСМе писана.
ПС. Даже джве: KolibriOS und BareMetal x64(!), весом 16 кБ
Может и заточена, но писать на ассемблере система команд кортексов не мешает. Только не нужно на ассемблере ничего такого писать, только потому что так хочется.
>на которой уже имеется программатор
Это без разницы. Хотя отдельный удобнее, проще с разными микроконтроллерами (разных производителей) использовать один и тот же.
>переходник USB-UART
Ну такое себе требование. Ничего не мешает подключить отдельно, если потребуется.
Так что blue pill вполне достаточно, но можно и самостоятельно припаять микроконтроллер к макетке.
>буду пробовать работать с различной периферией, подключать дисплеи и тд.
Либо выбирай плату по наличию этих дисплеев и всего такого, а не программаторов-отладчиков и USB-UART.
Понятно, а с какого тогда контроллера лучше начинать? (blue pill посмотрел, там STM32F103C8T6, он подходит?)
Просто хотелось взять контроллер, с которого проще всего было бы перейти на другой STM, уже под конкретные задачи в будущем
>работать с различной периферией, подключать дисплеи и тд.
Я себе взял STM32F429I-DISCO. Гора периферии: гиро, память, USB, EEPROM и хуевенький дисплей с тачскрином. Правда я пока дальше ШИМа и чтения сырых данных с гироскопа, нихуя с ней не делал. Раз 500 уже порывался жестко засесть и все никак вот.
>с какого тогда контроллера лучше начинать?
Если возникает такой вопрос, то с того, у которого более простая периферия.
>STM32F103C8T6, он подходит?
Вполне подходит, в нем есть проблемы с I2C и вообще errata длинная, но не всем же нужен I2C, тем более для того чтобы только вкатиться.
Отбой. Поправил исходники BMP, лол. Интересно, почему они не сделали вывод этой инфы.
что такое PIDR?
Это Port Input Data Register, RTFM.
не тот скрин
>Какую среду разработки лучше использовать?
Пиши в любом редакторе кода, компилируй Meson
Всё остальное это костыли красиво замаскированные
1920x1080, 0:01
Переходи к другим компонентам, потом вернёшься. Или найди другую мурзилку с описанием таймеров
Ты не пытайся сразу вникнуть в весь функционал. Делай по немного.
1) настроил таймер. щелкает? Заебись
2) настроил прерывание по переполнению. Прерывается? Заебись
3) сделал самодельную шимку. Переключается? Заебись
4) настроил аппаратную шимку. Ну ты понял короче.
Сразу все функции понять тяжело.
Не он прав. У ST (не только STM32) таймеры в край ебанутые, они сами по себе тянуть на даташит как к отдельной микре.
Использую Keil uVision5, чип STM32F042F6P6, через STM32 ST-LINK Utility чип читается нормально. Пробовал 3 разных платы на этом чипе, один хуй не работает (платы хуярил сам через easyEDA, до этого на stm32f103 хуярил платы, они работали)
Копать в сторону софта или разводки платы?
ну и кстати, практически такой же код, с таким же компилятором, с такими же настройками компилятора, выполняется и работает на stm32f103cbt6
>код не исполняется до той строчки куда я поставил курсор.
А что должно исполниться между main() и HAL_Init()?
та нет, проект собирал через stm32cubeMX, он же сам все собирает.
Создал тестовый проект, токо с включенными пинами для внешнего тактирования (хотя по clock configuration тактирование я сделал через внутренний кварц) и с пинами для стлинка, ну и для светодиода, в итоге все равно нихуя не пашет.
Может ли быть такое шо чипы левые? Или разводка платы кривая? заказывал чипы с алика, попробовал уже 3 штуки, нихуя не пашет.
>Или разводка платы кривая?
Хуй его знает. Попробуй залить код с ХАЛовских примеров для этого чипа.
<--Например
не, все равно та же хуйня, походу я где-то проебался с разводкой платы. Или же чипы поддельная хуета
>я где-то проебался с разводкой платы
Но прошивка заливается? Посмотрел схему Nucleo с 042К камнем, там и ошибиться негде. Я раз ебся c STM8S003, там есть вывод с конденсатором и по даташиту кондер должен быть что-то вроде от 1 до 4мкф. Я въебенил первый попавшийся на 1мкф и предсказуемо соснул. Заработала ента хуета только когда прилудил 2.2мкф. Но у твоего камня такой хуйни нет.
>чипы поддельная хуета
Нахуя их то покупать на Али? Они и у нас стоят копейки. И шанс нарваться на подъебку меньше на порядок
>Но прошивка заливается? Посмотрел схему Nucleo с 042К камнем, там и ошибиться негде
Так вот реально, хуй его знает. Прошивка заливается, через ST-Link utility чип опрашивается, все ок, но нихуя при этом не работает.
>>404592
>Нахуя их то покупать на Али? Они и у нас стоят копейки. И шанс нарваться на подъебку меньше на порядок
Ну хуй знает, я всегда брал чипы на Али, все было ок, главное шоб у продавана были норм отзывы. А тут такая хуйня.
Короче хуй его знает че произошло, но в итоге все платы начали работать и мигают светодиодом. Но отладка один хуй не работает, хоть код и исполняется (светодиод мигает) но в отладке t1 стоит на нуле, run to cursor line тоже не работает, ебаные приколы какие-то.
та вроде нет, из чипов под рукой есть токо stm32f103cbt6, и stm32f407vet6, у них все ок с отладкой, и переменные читаются, и память.
Хули надо?
Ебусь с этой блядской дрысней весь день, то в hardfault выпадала из-за либы на дисплей, то между задачами не переключалась.
Или хуйню несешь или проверяй настройки lwip. Сам напарывался и лечилось уменьшением размера кеша или еще чего связанного с занимаемой памятью во вкладке lwip.
Ебать, анон, спасибо. Действительно дело было в lwip, оффнул ее нахуй и задачи нормально выполняются, придется с памятью разбираться.
STM32F107, распаял на плату (свою), пытаюсь запустить, но не выходит.
Подключаю к JLINK по SWD, подаю питание на плату. Вне зависимости от напрежения на NRST, потребление регулярно скачет от 0 до 0.02А, а JLINK немного думает и ничего не находит. Если плата без питания, жлинк сразу видит что ничего нет. По осциллографу вижу, что JLINK что-то отправляет (периодические короткие импульсы на TMS и TCK).
Boot0 и TCK подтянуты к земле через 10К, TDO и TMS подтянуты к 3.3V так же через 10K.
Референс, при аналогичном подключении, видится.
Подскажите в чем может быть проблема и куда копать?
Это твоя схема? Больше инфы, включая фото пациента, герберы, как и от чего питаешь. У тебя точно JLink? Что он говорит в строке VCC Target, которое питает его буферы?
Моя. Сейчас гуглил, написано что нужно добавить тантал на 10мкФ - добавил, не помогло.
Герберы итд неудобно же будет с картинки читать. Или как ты его выложить предлагаешь?
VCC Target это в J-Link Utility, или где?
Питаю от стабилизатора 3.3, к нему же подключается VRef Жлинка. У меня древний J-Linkn из IAR-кита, пользуюсь тем что нашёл, но в общем то на таком же МК в EVAL-плате работает.
Цепь стабилизации 3.3, если имеет значение.
На приложеных скринах, по сути всё, что сейчас распаяно на плату.
Визуально ничего стремного не нашел как и явных отклонений. Не сразу нашел где переходное питания на широкую петляющую дорогу. Могу только попросить проверить напряжение на каждом конденсаторе (на самом) а потом относительно одной точки (входной разъем питания) и на каждом выводе конденсатора. Может где разрыв земли или питания?
Сам кристалл новый или снял откуда? Может стартует программа, которая отключает возможность отладки? Попробуй еще вывод RESET подключить.
В папке куда устанавливался софт от segger есть файл jlink.exe , который в консольном окошке пишет (часть вывода убрана):
Firmware: J-Link Ultra Rev.1 compiled Dec 3 2013 14:27:53
VTarget = 4.821V <- что тут у тебя пишется?
Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000
Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BB11477
Info: Found Cortex-M0 r0p0, Little endian.
Жопой читаю. К питанию (+3.3), а не к земле.
Промерял напряжения по твоему совету, везде симметрично. Земли звонятся, ни единого разрыва.
Контроллер новый.
Подключил Reset, подтянул TDI к 3.3 - результат один (аттачед).
>>406129
Ты, конечно, можешь иронизировать, но это и есть, сорт оф, макет. Или прототип, если так угодно. Я пытался сделать более "универсальный" макет, где у каждой ноги есть своё VIA (чтобы удобно было паяться), но понял, что получается хуита, которая, к тому же, не заработает (и это будет не поправить в рамках макета). Так как мне всё равно пришлось бы заказывать изготовление, я решил не ебать мозг, и сделать "один раз, но хорошо" Утрирую, конечно. Понимал что будут косяки и придётся переделывать, но пока ничего непоправимого не вижу.
А так да, макетирование охуенно.
На последок покажи детально кабель которым подключаешься.
Питание как организовано? С внешнего БП подаешь 5В?
Странно все. По питанию говоришь косяков нет, по схеме косяков не видно. Если сумел подпаяться к 77 выводу - значит уже можешь добавить 1 проводок и подключиться по JTAG-у вместо SWD. Если и это не катит - попробуй на PB2(BOOT1) подать 0, на BOOT0 - 1 и через утилитку Flash Loader Demonstrator попробовать достучаться через UART до загрузчика через выводы A9 и A10 через. Если и это не поможет - тогда не знаю, наверное замена кристалла на точно рабочий/из проверенных источников.
Питание от ЛБП, провод медный многожильный, относительно толстый.
Знакомый так же посоветовал попробовать подтянуть Boot0 к питанию.
Обрати внимание, пожалуйста, на то как установлен чип >>406122
Правильно или я не угадал, где у микросхемы ключ?
Ещё грешу на флюс. С ним у меня уже возникали проблемы.
>Правильно или я не угадал, где у микросхемы ключ?
Это была вторая мысль, но заглянув в даташит и соотнеся маркировку и положение ключа - верно поставлен.
страница 84 https://www.st.com/resource/en/datasheet/stm32f107vc.pdf
хочу тоже вкотиться в stm32
блю пиллсы мне пришли а программатор
потерялся по дороге я дешевый брал
ст линк китайский. деньги отдали конечно
я вот думаю а не замахнуться ли мне сразу
на программатор v2 как мыльница который?
им вроде и стм 8 можно шить
или нахуй? пока простой свисток пойдет?
или сразу v3 но там цена...
Разницу между мыльницей v2 и свистком v2 ты не заметишь.
V3mini есть за 1.5к, но зачем? Ты ведь не собираешься двухядерные h7 отлаживать?
Если синих таблеток у тебя две и есть usb-uart, можешь одну из них прошить в st-link или blackmagic probe.
бро я пробовал так через ардуину
ее reset замкнул с массой
не захотела моя пилюля так щиться
хотя некстион дисплей щьется
то есть сам юсб-ттл рабочий
rx и tx менять местами пробовал конечно
Джамперы boot0 и boot1 выставлял как положено?
Ну и можт 5вольт ардуины не понравились трехвольтовой пилюле.
Джамперы остались стоять как я и пробовал прошивать (фото). Rx и Tx были ардуиновские, сегодня по новой попробую, поставлю резисторы 390 Ом (подсмотрел номинал на ESP8266 schematic). Питание брал с пина 3.3 На ардуинке, сегодня запитаю от отдельной платки китайской которая умеет 5 и 3.3 вольт.
Не получается((. Полдня сегодня бился с прошанием Blue Pill (перешивка ее в ST Link программатор). Пробовал и в Linux, там тоже печально. На Blue Pill постоянно мигает светодиод PC13. Гаснет только при нажатой кнопке Reset. Положения джамперов boot0, boot1 на него никак не влияют. Ответа от платы нет при прошивке. В среде Ардуино тоже нет ответа. Куда копать не знаю. Сама Ардуинка, которая используется как USB-TTL шьется штатно, проверил еще раз. Буду заказывать ST link и USB-ТTL до кучи.
>Очевидно же, знание устройства микроконтроллера и особенности ассемблера.
Это скорее про особенности пайплайнов, стэков и особенностей архитектуры. Ассемблер для этого конечно неплохо знать, но не обязательно на нем кодить.
Да и под ПЛИСы сейчас код тоже на высокоуровневых языках пишется - тот же VHDL и даже C и C++
Сап, аноны, хочу заебенить себе W-mouse, но на STM а не пердуине (ну а хуле и нет, да и дешевле так). Из вариантов мозгов рассматривал STM32F730R8 - типа ебать он мощный дохуя, но вот с другой стороны, а нужна ли мне такая йоба?
Ну или взять попроще какой-нибудь STM32F103C8T6.
Но в электронике я мало что понимаю, я так понимаю если я возьму один только чип - то мне придется делать к нему отдельно обвязку (разве что знаю что нужно будет ставить регулятор напряжения чтобы понижать с 5 до 3.3 вольт). А всякие кристаллы-осцилляторы, какие-то дополнительные конденсаторы и резисторы мне нужно будет ставить на плату? А то так некоторые готовые платы посмотришь, и там дохуя всего стоит, вот как здесь >>339689
И еще, из программатора у меня есть только C232HM, мне нужно будет какой-то другой покупать, или можно будет и им прошить?
Не смотри туда, сюда смотри
https://a.aliexpress.ru/_eKeTyR
Но где ты возьмёшь прошивку под стм?
Я не хочу брать с готовой обвязкой, потому что я хочу запиливать плату специально под мышь. Для того чтобы просто поиграться у меня и так уже есть готовая ESP32. Но мне нужно знать какая обвязка мне нужна будет на плате.
>Но где ты возьмёшь прошивку под стм?
Если ты про W-mouse, то просто перепилю регистры с ардуиновских на стмовские, может ещё чего поправлю и перекомпилирую. Или там ещё какие-то прошивки есть на СТМ, которые загружать нужно? Вот как сам СТМ изначально прошивать по одному только 232 я не знаю.
А с тобой никто не разговаривает, ты всех достал уже
>У стм принципиально иная архитектура, так не прокатит
Что не прокатит? Алгоритмы которые написаны на С от другой архитектуры не поменяются, а поменять всякие инициализации и считывания пинов - это вопрос изучения мана.
Загугли. Мышь на сенсоре PMW3360 и пердуине, но я хочу сделать на STM.
https://overclockers.ru/lab/show/34703/Myshi_W-Mouse
>> STM32CubeMX + Keil + STMStudio
Сейчас stm32cubeIDE заменяет cubeMX и кейл? Что актуально счас?
Для чего нужен режим GPIO_Analog в кубе?
Я думал, что это АЦП, но он идёт отдельным режимом, и есть не на всех пинах. А этот режим есть на всех пинах.
Что это, и как с этим работать?
А если нет на пине АЦП?
Для PB0 и PB1, например, доступен АЦП, и доступен выбор "GPIO_Analog". У PB2 доступен только "GPIO_Analog". Какую функцию у него, например, реализует "GPIO_Analog", учитывая что альтернативные функции для него не доступны?
просто висящий в воздухе пин. Если я правильно помню, это дефолтное состояние для не-jtag-овых пинов
А на кой тогда он доступен для всех пинов? В том числе в кубе.
Просто ради совместимости кода?
Алсо, я проверил, на жтаг пианх он тоже доступен.
Думаю, чтобы можно было тупо отключить неиспользуемую ногу от всего и не париться.
Если висящую в воздухе ногу сделать входом - она ловит пердёж и помехи, входной буфер быстро переключается и жрет ток, выходом - может замкнуть, если подключена к выходу/питанию, входом с подтяжкой - в предыдущем случае будет небольшой дополнительный ток.
Кстати, кто работал с пикрелейтед дисплеями (1602, 5110) - подскажите, какую библиотеку лучше всего использовать для текста настраиваемого размера с кириллицей?
bump
Настроил дисплей через FSMC, могу пиксели рисовать, а ебаться с отрисовкой не хочу. Хочу библиотеку GUI чтобы красиво было. Поставил Segger EmWin — говно не работает, какой только драйвер не выбери. Не знаю где ошибка, всё инициализируется нормально.
Может есть другие либы хорошие, где не надо руками пиксели трахать?
Смотрю сейчас всякие uGUI, littlegv, понять не могу. С какими либами вы работаете? Йоба TouchGFX не предлагайте, в моём проекте только Stm32F205 есть, заказчик менять компоненты не собирается, плата уже готовая и не факт, что просто замена дисплея поможет.
здесь тебе не фронтэнд, чтобы на каждый чих была готовая либа. Адаптируй, пиши сам
Теперь понятно почему весь тред байтоёбов, плюющихся на куб.
>Segger EmWin — говно не работает, какой только драйвер не выбери
Свой пиши или с параллельным интерфейсом ставь
Накатил LittlevGL и все работает. Писать ничего не нужно практически, считай как qt можно интерфейсы писать. Жаль только билдера нету.
Пытаюсь настроить встроенный АЦП в интересующем режиме, но почему-то результат выходит не рабочий.
Камушек STM32F107.
Следуя гайдам из интернетов, выбрал параметры в кьюбе, и там где у людей всё работает, у меня - залупа.
Прикрепленные скрины - настройки ADC и DMA в кьюбе.
Запускаю АЦП командой, HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buf, ADC_BUF_LEN) больше ничего не дописываю.
В обработчик DMA прихожу всего 2 раза, и всего 1 раз прихожу в коллбэк HAL_ADC_ConvCpltCallback().
Первый байт указанного буфера, единожды устанавливается в какую-то рандомную величину, остальной буфер - нули.
Пробовал настроить без континьюс мода, по таймеру (TIM3_Out, так в итоге и собираюсь использовать), но там вообще, какая-то хуита - буфер всегда пустой, прерывания на DMA никогда не приходят.
При всём описанном - в режиме "ручного опроса" АЦП работает на последнем скрине видно, что DR не пустой, занчение в DR меняется. Алсо само значение DR какое-то рандомное, пока не подключу его к земле или питанию вручную - тогда показывает 0 или 0xFFFFF соответственно.
Чекни настройки NVIC (векторов прерываний), может ты прерывание по АЦП не включил.
Еще посмотри как это всё работает на других контроллерах, из других серий. Все примеры по АЦП можешь найти в репозиториях куба. Наиболее богатая примерами линейка — f400, топай от дискавери.
>Для асма можно заюзать?
Теоретически
Там слишком много трансляторов чтобы на данный момент они могли их добавить, как я понимаю. Хотя если в gcc встроен твой асм то взлетит скорее всего.
Да няш, запустил. 2 недели по эту пятницу с ней игрался, радовался, а потом, похоже, случайно сжег. В целом не смертельно, есть второй комплект на всё что мог сжечь, но сейчас карантин, так что пока не починю/проверю. Буду пока писать на отладке.
>>408022
Ну в мануалах не пишут что нужно врубать прерывание по АЦП. В STM-воском мануале к HAL-у написана рекомендация, поставить в прерывание DMA обработчик для АЦП, я пробовал - не помогает.
По поводу других серий - в F4 отличаются АЦП немного, в F1 для моего юзкейса примера нет.
Странно, что я делаю всё как в гайдах для F103, по описанию - АЦП у нас одинаковые, но всё равно, получаю какую-то херню.
Очень странная фигня.
Да хуй его знает, что это было. Валю на флюс.
Искал кого-нибудь знакомого с УЗ-ванной, но все меня послали нахуй, предложив использовать дегризер. Дегризера у меня не было, но был очиститель карбюратора. После него всё заработало.
По необходимости в скором времени придется перекатиться с STM32 на STM8 и вот возник вопрос. Если кто-то работал с этим, может подскажите хороший компилятор и следовательно IDE? Уже попробовал IAR Embedded workbench и слегка поел говна. Компилятор ужасный. Си преобразует в ASM ужасно. А при включенных оптимизациях часть кода вообще не работает/работает не так как надо. В общем, помойка говна.
Что-нибудь посоветуете, няши? С меня кусь~
родной компилятор ужасный, а из сторонних только sdcc, сыровато допиленный под stm8. Это бич всей линейки, ничего не поделать
>родной компилятор ужасный
Я с ентими вашими компиляторами на ВЫ, просто помалу типа погроммирую и кампилирую. Вроде работает все. Поясни в чем ужасность родного с космиком в качестве компилятора?
Ну вот я тоже сразу приглядывался к SDCC Попробую а результат отпишу
>>408769
Грубо говоря, у тебя компилятор преобразует твой исходный код в исполняемый файл. Который ты можешь посмотреть через дебаггер. Так вот. По сравнению с ассемблер ом, код на си более абстрактен и может быть преобразован разными способами. С учётом оптимизацией, опять же. Компилятор - это программа. И некоторые компиляторы преобразуют исходники в исполняемый лучше, а некоторые хуже. Иаровский компилятор делает это убого. Когда обращение к регистру может быть выполнено 1 инструкцией на ассемблере, он это обращение представляет как 4 команды с call-ом внутри. То есть, штампует больше кода чем нужно. От этого код на си работает медленнее и занимает больше памяти
Не знаю, не пробовал. Просто слышал что SDCC лучше
>древновата
Так и 8-битки тоже нихуя не новшество. Сдается мне, что их скоро и выпускать перестанут.
Смотри мои настройки для измерения АЦП по ДМА. Весит на этой штуке 8 датчиков.
Все что мне нужно, чтобы запустить бесконечный цикл измерения по всем каналам сразу это HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_sensors, 8);
Больше никаких настроек не нужно. Работает искоропки как часы. Прерывания по АЦП и ДМА каналу включены.
Далее. Накатив eclipse, я столкнулся с проблемой, которую так и не смог побороть спустя часы гуглежки. Проект по необходимому шаблону просто не создается. Вот так. Хваленый текстовый редактор просто закрывается, не желая делать то что от него требуется.
Но на этом я не остановился. Скачав сам по себе компилятор и написав make-файл я попытался скомпилировать код. Как можете понять, ничего не вышло.
Поддержки божественных макросов вроде #pragma vector для прерываний, __interrupt, #pragma location наряду с __no_init для простого доступа к EEPROM-у и многого-многого другого. Этот компилятор в принципе не предназначен для STM8. Мне даже не удалось найти нормальный готовый хидер-файл для проекта. В сети есть лишь недописанный кусок хидера с ошибками от какого-то васька. В общем-то, охуенные впечатления остались. Боже благослави ШВОБОДНОЕ по
>Боже благослави ШВОБОДНОЕ по
Меня больше прикалывает когда в тред населенный нубами на 146% врывается тип ПОЗНАВШИЙ ЖИЗНЬ и начинает затирать про линух на его машине, сборку окружения из сорцев, написание make-файлов... Хочется просто харкнуть в еблище.
>Этот компилятор в принципе не предназначен для STM8.
А зачем ты его взял, если можно было погуглить и почитать, что он умеет и решить, пойдёт ли он для твоих задач или нет?
>отладочной платы.
Отладочные платы - это путь ардуино-детей.
Нормальные люди сами разводят себе платы под нужные цели.
>Нормальные люди сами разводят себе платы под нужные цели.
Вот же ебанат. Я развожу когда код и аппаратную часть отлажу на ОТЛАДОЧНОЙ ПЛАТЕ. Если ты готов лутить/ждать от китайцы месяцами плату после каждого косяка, а они у тебя будут с вероятностью 101%, то флаг тебе в руки.
За сколько наносекунд разведешь тян на сиськи и спаяешь на коленке платку расширения под PCI-e слот с парой трансиверов 40G Ethernet, легкая FPGA на полмиллиона LE, пару ЦАП-АЦП на пару гигасемплов, аналоговую часть под них, массив NAND и DDR3 памяти и незабыв про SSRAM мегабита на 72 и например рядом несколько работающих по себе i.mx8 у которых так же своя DDR3, NAND и NOR память? Ой, совсем забыл еще Ethernet свич дописать.
По частям это есть, одним куском - нету. Не выебывайся, а ответь конкретно - за сколько наносекунд соберешь себе такую макетку в единичном экземпляре? Разведешь все это с первого раза включая DDR3 и SERDES на десяток гигабит по каждой паре? А то мне завтра курсовик сдавать надо, а еще нихуя нет.
Дай угадаю - твой уровень - мигалка светодиодом или мигалка на мультивибраторе? Похвально. А теперь пиздуй обратно в свой загон-пердуино тред.
Дохуя умный? Думаешь этот высер HAL-а дает одну команду?
Хуй там. Если основательно ебанешься - пиши на ассемблере команды записи в регистр BSSR (bit ser reset register) и глядишь в 4 команду уложиться - установить, nop, сбросить, переход в начало.
Используй выход таймера
А чем тебе куб не угодил? Или ты из ЭТИХ?
>мало
Ёбу дал? Правильно сделал что хал в помойку и перешел на CMSIS. В 6 раз поднял скорость!
Сказал же - используй таймер если надо быстро надрачивать или рассказывай нахуя тебе такая (нужную не назвал)скорость.
Почитай https://habr.com/ru/post/161617/ . Некоторые то же думают что ох сейчас раскочегарим.. и сосут хуй в итоге.
Попробовал, как писал Анон выше, разницу в ногодрыге между HAL_GPIO_Toggle и прямой записью в регистр. Тоже частота увеличилась в 6 раз
Ты заебал. МСО на пине РА8 если чо.
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
Покурил даташиты. У 103 серии
I/Os on APB2 with up to 18 MHz toggling speed.
У 429
Fast I/O handling allowing maximum I/O toggling up to 90 MHz
То есть теоретически и у тебя и у меня есть еще куда расти
Двачую, нужна была небольшая плата для прототипа на stm32f4, за три дня нарисовал, развел, вытравил и припаял.
>>409824
Именно в таких случаях отладки сильно выручают.
Если разработка не для курсача, потом несколько месяцев делать свою плату со всем этим добром.
Речь о том, что Дискавери в шапке очень проста, и во многих случаях проще и дешевле сразу сделать плату для прототипа с нужной обвязкой, чем специально покупать оверпрайснутые платы расширения или делать колхоз на макетке. Конечно, есть и исключения, когда обвязки мало/нет, совсем нет времени и есть всё готовое, или для обучения.
>>409809
Nios
>>410232
Возьмите лучше таймер
void I2C2_EV_IRQHandler(void)
{
/ USER CODE BEGIN I2C2_EV_IRQn 0 /
uint32_t sr1=I2C2->SR1;
uint32_t sr2=I2C2->SR2;
if (sr1 & I2C_SR1_SB)
{
I2C2->DR = ((0x68<<1)|rw);
}
if (sr1 & I2C_SR1_ADDR)
{
if (!rw)
{
I2C2->DR = i2cTx;
}
}
if (sr1 & I2C_SR1_TXE & (!rw))
{
I2C2->CR1 |= I2C_CR1_START;
rw=1;
}
if (sr1 & I2C_SR1_RXNE & rw)
{
rw=0;
buff[0]=I2C2->DR;
I2C2->CR1 |= I2C_CR1_STOP;
uartTransmit(buff, 1);
}
}
Смысол в том, что мне надо передать последовательность, описанную вторым скриншотом.
На пикреле отладка осциллографом. Вопросы такие:
1) Почему первый ACK такой всратый? Я имею в виду непонятную иголку, которой теоретически быть не должно.
2) Что за затык в 1 пустой такт после первого ACK?
3) Почему после второго ACK контроллер затыкается, тактирование останавливается и он тупо прижимает SCL к нулю пока я не ребутну контроллер? (Прижимает именно stm32, а не mpu6050).
void I2C2_EV_IRQHandler(void)
{
/ USER CODE BEGIN I2C2_EV_IRQn 0 /
uint32_t sr1=I2C2->SR1;
uint32_t sr2=I2C2->SR2;
if (sr1 & I2C_SR1_SB)
{
I2C2->DR = ((0x68<<1)|rw);
}
if (sr1 & I2C_SR1_ADDR)
{
if (!rw)
{
I2C2->DR = i2cTx;
}
}
if (sr1 & I2C_SR1_TXE & (!rw))
{
I2C2->CR1 |= I2C_CR1_START;
rw=1;
}
if (sr1 & I2C_SR1_RXNE & rw)
{
rw=0;
buff[0]=I2C2->DR;
I2C2->CR1 |= I2C_CR1_STOP;
uartTransmit(buff, 1);
}
}
Смысол в том, что мне надо передать последовательность, описанную вторым скриншотом.
На пикреле отладка осциллографом. Вопросы такие:
1) Почему первый ACK такой всратый? Я имею в виду непонятную иголку, которой теоретически быть не должно.
2) Что за затык в 1 пустой такт после первого ACK?
3) Почему после второго ACK контроллер затыкается, тактирование останавливается и он тупо прижимает SCL к нулю пока я не ребутну контроллер? (Прижимает именно stm32, а не mpu6050).
Есть подозрение, что МК ожидает байт для передачи и поэтому останавливает тактирование, пока я не дам ему байт. Но я не хочу давать байт, как ему объяснить что все, не надо больше передавать?
Не совсем понятно про rw - это глобальная переменная? Инициализируешь явно или надежда на cumпилятор и еге инициализацию переменной 0?
sr1 & I2C_SR1_TXE & (!rw) - мутно.
То что пишешь - верно, но это для случая когда с буферизацией пишешь. Тебе же надо выслать один байт и ловить его окончание передачи через флаг BTF! После установки флага BTF (когда байт уже реально передался) тогда давай команду на повторный старт.
Читаешь 1 байт? Тебе картинка 277 на странице 764:
EV6_3: ADDR = 1, program ACK = 0, clear ADDR by reading SR1 register followed by reading SR2 register, program
STOP =1 just after ADDR is cleared
sr1 & I2C_SR1_ADDR - этот участок надо переписать. Тебе при чтении надо сразу подготовиться к тому что ты НЕ будешь подтверждать прочитанный байт(EV6_3) со слейва, говоря что больше не будешь читать.
Осциллограмма - это хорошо, только маленький недочет - значение бита считывается по восходящему фронту, а не нисходящему как нарисовано.
>Я имею в виду непонятную иголку, которой теоретически быть не должно.
Тебе не похуй? Данные читаются по восходящему фронту, то что между фронтами - поебать. Сам включи логику - мастер высрал 8 бит адреса и освобождает шину, от чего SDA уходит в 1 и дальше уже слейв если уснал себя - прижмет к 0, если нет - то на свободной шине так и останется 1. Никакой магии и глюков тут нет, разве что слейс не особо быстрый. Не совсем. Можно напороться на состояния СТАРТ и СТОП
>Что за затык в 1 пустой такт после первого ACK?
Затыка нет, неправильно фронты считаешь.
>тактирование останавливается и он тупо прижимает SCL к нулю
Он сделал что надо и ждет от тебя данных, но у тебя флаг BTF не проверяется и в теории "виснет" на строке (sr1 & I2C_SR1_TXE & (!rw)) которая уже никогда не выполнится и у тебя бесконечный заход в прерывание, так как контроллер не в состоянии выдать сигнал (повторный)старт во время передачи байта.
Весь прикол в том, что старт или стоп команду нужно передавать ДО того, как передался или принялся последний байт, а не после. Тогда все корректно выполнится.
>Затыка нет, неправильно фронты считаешь.
Есть, приглядись внимательно. Там SDA = 0 на возрастающем фронте SCL, хотя должно быть 1. Впрочем похуй, на работу оно не влияет.
Еррату выше читал? Меня больше всего заебывал BUSY на пустом месте. Остальные баги описаны и обходные решения.
Напиши говнокод - может кто-то проверит или я на днях на bluepill прогоню например на термодатчике LM75.
TxE: Data register empty (transmitters)
- Set when DR is empty in transmission. TxE is not set during address phase
- Cleared by software writing to the DR register or by hardware after a start or a stop condition or when PE=0.
Пишут что очищается стартом или стопом, во время отсылки адреса неактивен (0). Как вариант все что связано с TXE - делай после проверки бита MSL в I2C_SR2 - когда мастер, тогда и спамишь
Да в пизду. Мне уже не охота в этих дебрях копаться. Пусть работает программно.
Кстати, написано После старт или стоп кондишна. А он занимает некоторое время. Вот за это время флаг может выскочить сотню раз
Напиши "логгер" - не пожлобись например на килобайт ОЗУ куда будешь писать SR1+SR2 на каждом входе в прерывание и поставь брякпоит например на 450 записей или сколько хочешь и смотри как флаги седут себя. Отладка - это же творческий процесс. Когда-то так дебажил и глюков с TXE на 32F103ZC не наблюдал. Только BUSY на каждом шагу.
Сейчас у меня нет компа, поэтому только словами могу описать
Для начала возьмём пример с одним таймером, у которого есть 4 канала. То есть будет 4 выхода. Пусть это будет general purpose таймер. Ну общие регистры, типа делителя счетчика, периода таймера, one pulse mode настраиваешь как обычно.
Теперь настраиваем каналы. В TIMx_DIER включаешь все биты CCxDE, чтобы разрешить запросы к дма контроллеру от СС-каналов. В TIMx_EGR врубаешь биты CCxG, чтобы включить эвенты о каналов (чтобы они генерировали запросы дма). Затем в регистрах CCMRx нас интересуют поля OCxM, нам нужен режим, когда выход при наступлении события переключается, записываешь туда 011: Toggle - OC1REF toggles when TIMx_CNT=TIMx_CCR1. Дальше в CCER включаешь все выходы каналов установкой бита CCxE.
Теперь DMA. Я просто скопипащу
In this example the timer DMA burst feature is used to update the contents of the CCRx registers (x = 1, 2, 3, 4) with the DMA transferring half words into the CCRx registers. This is done in the following steps:
1. Configure the corresponding DMA channel as follows: –DMA channel peripheral address is the DMAR register address –DMA channel memory address is the address of the buffer in the RAM containing the data to be transferred by DMA into CCRx registers. –Number of data to transfer = 4 (See note below). –Circular mode disabled.
2. Configure the DCR register by configuring the DBA and DBL bit fields as follows: DBL = 4 transfers, DBA = 0xD.
Теперь время импульсов. В каждый CCRx записываешь время фронта имульса соответствующего канала. В тиках таймера, разумеется. Далее настраиваешь буфер DMA. Тут вот какое дело: на каждый передний/задний фронт импульса из любого канала формируется DMA запрос, который прогружает все четыре CCRx регистра. Мы так настроили, потому что каналов таймера у нас 4, а канал дма всего 1. Поэтому настраивай времена соответственно так, чтобы во все каналы попадало правильное значение. Например, первые четыре значения буфера ДМА
tf1 tr2 tr3 tr4, вторые: 0 tr2 tr3 tr4, третья четверка: 0 tf2 tr3 tr4, четвертая: 0 0 tr3 tr4, и так далее, где tr, tf - время переднего и заднего фронта соответственно.
Теперь включаешь таймер. Поначалу все выходы у него по нулям, до тех пор, пока счётчик не добежит до значения в регистре CCR 1 канала, который мы загрузили заранее. Когда CNT == CCR, наступает событие первого канала. Он переключает свой выход из 0 в 1 ( мы настроили toggle) и генерирует запрос к дма. Дма прогружает все четыре регистра, но у первого таймера теперь загружено время заднего фронта импульса. Далее точно так же, счётчик досчитывает до значения CCR1, первый канал делает toggle своего выхода обратно из 1 в 0, запрашивает дма. Но теперь в его регистр загружается значение 0, а значит, CNT таймера уже никогда с ним не сравняется и первый канал больше не сработает, если стоит one pulse mode. Дальше всё повторяется, только для следующих каналов.
Как-то так
Сейчас у меня нет компа, поэтому только словами могу описать
Для начала возьмём пример с одним таймером, у которого есть 4 канала. То есть будет 4 выхода. Пусть это будет general purpose таймер. Ну общие регистры, типа делителя счетчика, периода таймера, one pulse mode настраиваешь как обычно.
Теперь настраиваем каналы. В TIMx_DIER включаешь все биты CCxDE, чтобы разрешить запросы к дма контроллеру от СС-каналов. В TIMx_EGR врубаешь биты CCxG, чтобы включить эвенты о каналов (чтобы они генерировали запросы дма). Затем в регистрах CCMRx нас интересуют поля OCxM, нам нужен режим, когда выход при наступлении события переключается, записываешь туда 011: Toggle - OC1REF toggles when TIMx_CNT=TIMx_CCR1. Дальше в CCER включаешь все выходы каналов установкой бита CCxE.
Теперь DMA. Я просто скопипащу
In this example the timer DMA burst feature is used to update the contents of the CCRx registers (x = 1, 2, 3, 4) with the DMA transferring half words into the CCRx registers. This is done in the following steps:
1. Configure the corresponding DMA channel as follows: –DMA channel peripheral address is the DMAR register address –DMA channel memory address is the address of the buffer in the RAM containing the data to be transferred by DMA into CCRx registers. –Number of data to transfer = 4 (See note below). –Circular mode disabled.
2. Configure the DCR register by configuring the DBA and DBL bit fields as follows: DBL = 4 transfers, DBA = 0xD.
Теперь время импульсов. В каждый CCRx записываешь время фронта имульса соответствующего канала. В тиках таймера, разумеется. Далее настраиваешь буфер DMA. Тут вот какое дело: на каждый передний/задний фронт импульса из любого канала формируется DMA запрос, который прогружает все четыре CCRx регистра. Мы так настроили, потому что каналов таймера у нас 4, а канал дма всего 1. Поэтому настраивай времена соответственно так, чтобы во все каналы попадало правильное значение. Например, первые четыре значения буфера ДМА
tf1 tr2 tr3 tr4, вторые: 0 tr2 tr3 tr4, третья четверка: 0 tf2 tr3 tr4, четвертая: 0 0 tr3 tr4, и так далее, где tr, tf - время переднего и заднего фронта соответственно.
Теперь включаешь таймер. Поначалу все выходы у него по нулям, до тех пор, пока счётчик не добежит до значения в регистре CCR 1 канала, который мы загрузили заранее. Когда CNT == CCR, наступает событие первого канала. Он переключает свой выход из 0 в 1 ( мы настроили toggle) и генерирует запрос к дма. Дма прогружает все четыре регистра, но у первого таймера теперь загружено время заднего фронта импульса. Далее точно так же, счётчик досчитывает до значения CCR1, первый канал делает toggle своего выхода обратно из 1 в 0, запрашивает дма. Но теперь в его регистр загружается значение 0, а значит, CNT таймера уже никогда с ним не сравняется и первый канал больше не сработает, если стоит one pulse mode. Дальше всё повторяется, только для следующих каналов.
Как-то так
Я не он, но -да, можно.
Ага, там только частота поменьше, чем в старших камнях, соответственно и разрешение таймера
>Если ты готов лутить/ждать от китайцы месяцами плату после каждого косяка, а они у тебя будут с вероятностью 101%, то флаг тебе в руки.
Лол, всё необходимое для пленочного фоторезиста можно найти за копейки.
>Установочная цель устроится байтоёбом за жрат. Что бы хоть как то вкотиться в ойти ололо.
Не советую, микроконтроллеры, плис, электроника и прочее говно очень плохая идея, работы почти нет, платят копейки. Как хобби это интересно, но как способ заработка и социальный лифт - нет (хватит только на хуйцы с гречкой).
Лучше сразу вкатывайся в айти, работы полно, платят много, а также есть возможность последующей удалёнки, фриланса или трактора, на выбор.
обычно позволяет делать более тонкие дорожки (0.2 вместо 0.4), но это все дико зависит от принтера и кривизны рук
> вместо 0.4
Я и ЛУТом нихуёво 0.2 делаю. Если прямо вдумчиво и небольшая плата, то и 0.15 получаются
А с# это 4С
Главное progmem не взбалтывать. А не то kernel panic.
О, Наташенька
Сразу скажу. К программированию, IT, электронике и прочему я не имею никакого отношения. Начинал возится с ардуинкой в качестве хобби. И ни на что большее не претендую. Сам максимально гуманитарий, гордый оператор офисного стула и дипломированный перекладыватель бумажек.
Так вот. Пару лет назад от скуки и безысходности купил себе стартовый набор ардуинки с кучей датчиков и стал в нее тыкать. И постепенно втянулся. Начал делать разную хуйню из головы для удовлетворения своих больных фантазий. В какой то момент меня перестало устраивать распаивание поеботы на всяких нано и я решил сделать свою плату с блекджеком и шлюхами. Нагуглил EasyEDA и нарисовал нужную мне поеботу. И когда получил ее она даже заработала хотя наебался я знатно. Постепенно амбиции привели меня к STM32. Взял разных Дискавери плат и начал говнокодить на MBED поверх PlatfomIO. То что я пишу я не покажу никому потому что даже я сам понимаю насколько это убого. Плюс по прежнему рисую свои платы и заказываю у китайцев. Вроде все норм. На уровне самоделок долбоеба даже успешно. Оно по крайней мере почти всегда работает. Такая вот история.
А теперь реквест помощи. Я устал от ощущения что делаю говно. Как исправится? Задачи у меня простейшие и не требуют высокой надежности оборудования или безотказности когда. Но все таки хочется что бы за них не было стыдно хотя бы самому. По этому.
Первое. Как научится нормально разводить платы? Ролики на ютубе меня чему то научили, но эти обрывочные знания крайне убоги. Я знаю что этому учат. Может есть какой то учебник или курс для даунов лол. За два года я самостоятельно кое как научился понимать схемы и через абзац даташиты к электронным компонентам. Но в большинстве случаев это какой то непонятный для меня пиздец. То же касается разводки плат. То что я сейчас делаю наверняка работает лишь чудом. Потому что очень слабо понимаю что я вообще делаю. Опять же. Подскажите среду в которой стоит работать. Мне не нравится то что тот же EasyEDA привязан к конкретному производителю плат. Может есть что то настолько же доступное и простое но более универсальное.
Второе. Хочу уйти от MBED во что то более вменяемое. Пока что склоняюсь к CUBEIDE потому что она вроде как от самой STM и использовать соответственно HAL. Но опять же. Ту инфу что я могу нагуглить я практически не способен понять. Если проект под MBED у меня в базовой форме соедржит две строчки с main и while то куб генерит ебаное огромное (для меня) полотно не читаемого (опять же для меня) кода в котором я не способен разобраться. Лучшее мое достижение это меганием диода на плате нуклео по гайду от digikey. Может есть какое то постепенное вхождение в программирование под HAL для полных даунов?
И для понимания круга моих задач. Лучшее мое творение это автоматический бар лол. Я с ним ебусь уже около года постоянно совершенствуя. В текущей форме он может выбрать из трех напитков и нахуярить заданный обьем в стакан. В первоначальной форме напитки нужно было выбирать нажиманием одной из трех кнопок. Сейчас вкорячиваю вместо этого 2.8 дисплей с тачем. Когда закончу с этим хочу подключить все к интернету и написать простейшее приложение под смартфон что бы можно было делать это с него. Понятно что практического смысла в этом нет. Просто ебля ради ебли. Но анон, я хочу сделать это настолько хорошо, насколько это позволит мой гуманитарный мозг. Помоги советами мудрыми.
Сразу скажу. К программированию, IT, электронике и прочему я не имею никакого отношения. Начинал возится с ардуинкой в качестве хобби. И ни на что большее не претендую. Сам максимально гуманитарий, гордый оператор офисного стула и дипломированный перекладыватель бумажек.
Так вот. Пару лет назад от скуки и безысходности купил себе стартовый набор ардуинки с кучей датчиков и стал в нее тыкать. И постепенно втянулся. Начал делать разную хуйню из головы для удовлетворения своих больных фантазий. В какой то момент меня перестало устраивать распаивание поеботы на всяких нано и я решил сделать свою плату с блекджеком и шлюхами. Нагуглил EasyEDA и нарисовал нужную мне поеботу. И когда получил ее она даже заработала хотя наебался я знатно. Постепенно амбиции привели меня к STM32. Взял разных Дискавери плат и начал говнокодить на MBED поверх PlatfomIO. То что я пишу я не покажу никому потому что даже я сам понимаю насколько это убого. Плюс по прежнему рисую свои платы и заказываю у китайцев. Вроде все норм. На уровне самоделок долбоеба даже успешно. Оно по крайней мере почти всегда работает. Такая вот история.
А теперь реквест помощи. Я устал от ощущения что делаю говно. Как исправится? Задачи у меня простейшие и не требуют высокой надежности оборудования или безотказности когда. Но все таки хочется что бы за них не было стыдно хотя бы самому. По этому.
Первое. Как научится нормально разводить платы? Ролики на ютубе меня чему то научили, но эти обрывочные знания крайне убоги. Я знаю что этому учат. Может есть какой то учебник или курс для даунов лол. За два года я самостоятельно кое как научился понимать схемы и через абзац даташиты к электронным компонентам. Но в большинстве случаев это какой то непонятный для меня пиздец. То же касается разводки плат. То что я сейчас делаю наверняка работает лишь чудом. Потому что очень слабо понимаю что я вообще делаю. Опять же. Подскажите среду в которой стоит работать. Мне не нравится то что тот же EasyEDA привязан к конкретному производителю плат. Может есть что то настолько же доступное и простое но более универсальное.
Второе. Хочу уйти от MBED во что то более вменяемое. Пока что склоняюсь к CUBEIDE потому что она вроде как от самой STM и использовать соответственно HAL. Но опять же. Ту инфу что я могу нагуглить я практически не способен понять. Если проект под MBED у меня в базовой форме соедржит две строчки с main и while то куб генерит ебаное огромное (для меня) полотно не читаемого (опять же для меня) кода в котором я не способен разобраться. Лучшее мое достижение это меганием диода на плате нуклео по гайду от digikey. Может есть какое то постепенное вхождение в программирование под HAL для полных даунов?
И для понимания круга моих задач. Лучшее мое творение это автоматический бар лол. Я с ним ебусь уже около года постоянно совершенствуя. В текущей форме он может выбрать из трех напитков и нахуярить заданный обьем в стакан. В первоначальной форме напитки нужно было выбирать нажиманием одной из трех кнопок. Сейчас вкорячиваю вместо этого 2.8 дисплей с тачем. Когда закончу с этим хочу подключить все к интернету и написать простейшее приложение под смартфон что бы можно было делать это с него. Понятно что практического смысла в этом нет. Просто ебля ради ебли. Но анон, я хочу сделать это настолько хорошо, насколько это позволит мой гуманитарный мозг. Помоги советами мудрыми.
>Как научится нормально разводить платы?
Почитай начальный и высшый курс черной магии.
Проектирование высокоскоростных цифровых устройств в авторстве Грэхэм Мартин, Джонсон Говард.
Сейчас оно подустарело, частоты выше, но физика процессов не поменялась. Читать очень осторожно, а то реально в шизоидный бред скатишься при разводке и будешь шарахаться от лишнего изгиба дорожки до светодиода.
Спасибо пойду гуглить. А то я заебался делать хуйню. На моей первой плате вообще не было медного слоя и всю землю я разводил дорожками лол. Наверняка я до сих пор делаю невероятную дичь просто не зная об этом.
>Проектирование высокоскоростных цифровых устройств в авторстве Грэхэм Мартин, Джонсон Говард.
>Лучшее мое творение это автоматический бар лол
Заебись совет, конечно. Бар, работающий на мегагерцовой частоте.
>>416193
>Хочу уйти от MBED во что то более вменяемое.
По-твоему HAL более вменяемый что ли? HAL - это очень плохо.
Если хочешь доклопаться до основ, начни с блокнотика, консоли и cmsis.
>HAL - это очень плохо
Да у нас тут HALоненависник нарисовался. Прямо как СНиПодаун в домаче.
Не, ты не останавливайся, советуй сразу ассемблер или чисто на оп-кодах ебашить. Надо сразу чувака отвадить от этого занятия.
Отвадят скорее подобные тебе, у которых хал не кусок говна. Ведь человек чувствует, что это хуйня какая-то, а ему пишут мол, не заебись, это для начинающих, то ли низкий уровень, там все еще страшнее. Хотя на самом деле все наоборот. В хале наворотили дохуя сложности там, где ее изначально не было. То есть человек думает, что он тупой и чего-то не понимает, а это у стм хуевые программисты это не секрет. Что тут может отвадить, не понятно.
1. Сначала надо на поверхностном уровне разобраться со схемотехникой,
http://easyelectronics.ru/category/nachinayushhim, самые азы http://easyelectronics.ru/osnovy-na-palcax-chast-1.html. Более полно -
Хоровиц Хилл Искусство схемотехники, Угрюмов цифровая схемотехника.
По разводке есть хорошие статьи на elart.narod.ru, например, перевод статьи из AD http://elart.narod.ru/articles/article11/article11.htm.
По САПРам загляни в софтотред, главное в спринте не рисуй.
2. >>416327 двачую, для чего-то простого и первоначальной генерации в кубе он годится, но там хуевая документация, кое-чего нет и он очень медленный.
>Отвадят
Отвадили изначально меня "знатоки" типа тебя. Куда ни полезешь за примерами, - один на регистрах шпарит, второй на StdPeriph_Lib, третий со вставками ассма, четверты хуй пойми чем занимается и тупо переименовывает названия переменных HALа под свои инициалы и выдает халовские либы за свои. Когда СТ таки допилило HAL до нормального уровня и вычистила эти несовместимые хуйни, я наконец снова занялся самообучением этим контроллерам и, о чудо, всё, блядь стало получаться. И уже тогда я полез в дебри смотреть как в HAL всё устроенно.
Так что идите нахуй, подобные советчики. Может вы и начинали программировать расписывая в тетрадке программки для калькулятора Б3-34 и потом за него и выполняя их, но нонче начинать со столь низкого уровня, смерти подобно
Как раз таки те, кто начинал с низов(с логических элементов, триггеров и ассемблера), чаще всего и остаются в этом занятии серьезно.
А ардуинщик навсегда останется ардуинщиком, никогда не начинайте с ардуино(Кубик и HAL это аналог ардуино для стм32 по сути).
>третий со вставками ассма
Профессионалы всегда используют вставки ассма в местах, где нужно максимальное быстродействие.
Ассм и архитектуру проца и команд знают не все, поэтому топовые конторые всегда держут у себя специалиста по ассемблерным вставкам.
> Когда СТ таки допилило HAL до нормального уровня и вычистила эти несовместимые хуйни, я наконец снова занялся самообучением этим контроллерам и, о чудо, всё, блядь стало получаться.
То есть дело не в том, что ты потратил больше времени и у тебя в какой-то момент стало получаться, а в чем-то другом. Ну-ну. Если бы ты сразу начал с cmsis и даташита, у тебя бы начало получаться еще быстрее.
Дело не в том, что HAL это не высокоуровневый код. Mbed - высокоуровневый и они сделали хорошо, потому что в ARM программисты намного лучше, чем в ST. А HAL - это низкоуровневая библиотека с очень странными на момент 2020 года подходами к программированию. Свою задачу (абстрагирование от конкретного МК) она худо-бедно выполняет и пользоваться ей можно. Но не более.
А для общего развития намного полезнее почитать хедеры CMSIS для своего МК. Там в одном файле будет все просто и понятно, а если что-то не понятно, то йоба-макросы HAL будут еще менее понятными.
> топовые конторые всегда держут у себя специалиста по ассемблерным вставкам.
Что ещё спизданешь охуительного?
Топовые конторы стараются как раз уйти от ассемблерных вставок везде, где только возможно, чтобы получить легко поддерживаемый, переносимый и читаемый код. Тебя скорее отпиздит менеджер, если увидит, что ты решил писать на асме там, где можно написать на Си. Оптимизировать на уровне инструкций должен компилятор, который к тому же имеет разные флаги оптимизации, а не программист. Я бы посмотрел на тебя, если бы твои ассемблерные вставки нужно было бы пернести с одного ядра на другое, ещё и оптимизировать по размеру кода, а не по скорости, лол. Для топовой конторы это гарантированный влёт на бабки, поэтому она скорее выпиздит такого "специалиста" по ассемблерным вставкам, чем будет продолжать с ним иметь дело.
>странными на момент 2020 года подходами к программированию
Какими, например? Какие вместо них следовало бы использовать, по твоему мнению?
>>340287
Ну это ещё не самый плохой результат, кстати. Я купил нуклео, китайские платки с f104, несколько stm8, два программатора st-link, программатор pickit3, кучу пиков, и ещё кучу всего, что забыл перечислить, в суме больше десятки потратил и они уже больше года лежат на полке. Я не то что диодом не поморгал, а даже иде не устанавливал, потому что нет времени и занят всякой парашей(в т.ч. и работой, но с другими камнями), а игрушки лежат до лучших времен, когда будет время ими заниматься...
Макросы вместо функций, как будто на дворе 1989 и компиляторы не умеют инлайнить, неумение в битовые поля (они не так популярны, как прямая ебля с >> и << потому что это platform specific, но что может быть более специфично для платформы, чем код для STM? Типа когда-нибудь они перейдут на процессор с другим порядком байт?), соответственно вместо непосредственных присваиваний вида register.channel=5 будет что-то типа register = (5 >> 10) & 0xFFFF, сама по себе структура кодогенерации в виде комментариев типа INSERT YOUR CODE HERE, при этом если ты проебешь такой комментарий, все сломается.
То есть вместо поебени
int main(void)
{
/ USER CODE BEGIN 1 /
/ USER CODE END 1 /
/ MCU Configuration--------------------------------------------------------/
/ Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();
/ USER CODE BEGIN Init /
/ USER CODE END Init /
должно быть
//generated file, don't touch
#include "user_code.c"
int main(void) {
before_configuration();
HAL_Init();
after_configuration();
}
а в user_code.c содержимое типа:
void before_configuration() {
}
void after_configuration() {
}
Система типов должна защищать от выстрелов в ногу даже в том формате, который предлагает язык си.
Почему GPIO speed это uint32_t? При этом в комментах пишут "This parameter can be a value of @ref GPIO_speed_define". Алло, ребят, для этих целей придуман enum.
Почему у GPIO аут, ин, альтернейт и аналог пины - это один и тот же тип данных? С грозной угрозой пальчиком типа "если у вас аут - вот это ставьте вот так, а если ин - вот так, смотрите не перепутайте". Килобайты в хедере пожалели? Да нет, просто в этой высокоуровневой библиотеке нихуя не высокоуровневое укуренное отображение регистров.
Пин - это пин, если пин это какой-нибудь USART, он не может уже работать как ADC. В кубе это отлично видно - на высоком уровне у тебя есть пин, у него есть состояние, которое взаимно исключает другие состояния. Ты не можешь установить одновременно. А в HAL'е - можешь. Потому что MX_USART2_UART_Init это одно, а MX_GPIO_Init это совсем другое. Хотя логически и то и то работает с пинами. То есть никаким высоким уровнем тут не пахнет. Все та же ебля с даташитом, чтобы ни в коем случае не установить регистры (которых якобы нет) в противоречивое состояние.
Макросы вместо функций, как будто на дворе 1989 и компиляторы не умеют инлайнить, неумение в битовые поля (они не так популярны, как прямая ебля с >> и << потому что это platform specific, но что может быть более специфично для платформы, чем код для STM? Типа когда-нибудь они перейдут на процессор с другим порядком байт?), соответственно вместо непосредственных присваиваний вида register.channel=5 будет что-то типа register = (5 >> 10) & 0xFFFF, сама по себе структура кодогенерации в виде комментариев типа INSERT YOUR CODE HERE, при этом если ты проебешь такой комментарий, все сломается.
То есть вместо поебени
int main(void)
{
/ USER CODE BEGIN 1 /
/ USER CODE END 1 /
/ MCU Configuration--------------------------------------------------------/
/ Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();
/ USER CODE BEGIN Init /
/ USER CODE END Init /
должно быть
//generated file, don't touch
#include "user_code.c"
int main(void) {
before_configuration();
HAL_Init();
after_configuration();
}
а в user_code.c содержимое типа:
void before_configuration() {
}
void after_configuration() {
}
Система типов должна защищать от выстрелов в ногу даже в том формате, который предлагает язык си.
Почему GPIO speed это uint32_t? При этом в комментах пишут "This parameter can be a value of @ref GPIO_speed_define". Алло, ребят, для этих целей придуман enum.
Почему у GPIO аут, ин, альтернейт и аналог пины - это один и тот же тип данных? С грозной угрозой пальчиком типа "если у вас аут - вот это ставьте вот так, а если ин - вот так, смотрите не перепутайте". Килобайты в хедере пожалели? Да нет, просто в этой высокоуровневой библиотеке нихуя не высокоуровневое укуренное отображение регистров.
Пин - это пин, если пин это какой-нибудь USART, он не может уже работать как ADC. В кубе это отлично видно - на высоком уровне у тебя есть пин, у него есть состояние, которое взаимно исключает другие состояния. Ты не можешь установить одновременно. А в HAL'е - можешь. Потому что MX_USART2_UART_Init это одно, а MX_GPIO_Init это совсем другое. Хотя логически и то и то работает с пинами. То есть никаким высоким уровнем тут не пахнет. Все та же ебля с даташитом, чтобы ни в коем случае не установить регистры (которых якобы нет) в противоречивое состояние.
Это он про генератор кубовский. Там при перегенерации такое было, когда я в крайний раз на него смотрел.
Куб всего лишь не мог определить где пользовательский код, а где генерированный и соответствено не мог корректно перегенерировать файл. Очевидно же. При чем тут HAL - без понятия, по моему не при чем, если ты об этом.
>Что ещё спизданешь охуительного?
Много чего.
>Топовые конторы стараются как раз уйти от ассемблерных вставок везде, где только возможно, чтобы получить легко поддерживаемый, переносимый и читаемый код.
Читаемый код на ассемблере ничем не отличается от читаемого кода на Си, достаточно соблюдать "code style": комментить, нормально называть переменные, делать отступы, не говнокодить.
>Тебя скорее отпиздит менеджер, если увидит, что ты решил писать на асме там, где можно написать на Си.
Каждое применение ассемблера должно быть обосновано и задокументировано. В ряде случаев, когда нужно обеспечить максимальное быстродействие в критически важных участках программы и даже с десяток лишних клоков контроллера могут запороть работу, ассемблер необходим.
>Оптимизировать на уровне инструкций должен компилятор, который к тому же имеет разные флаги оптимизации, а не программист.
Даже лучший в плане оптимизации компилятор IAR за тысячи бабок будет оптимизировать на порядок хуже, чем человек.
>Я бы посмотрел на тебя, если бы твои ассемблерные вставки нужно было бы пернести с одного ядра на другое,
При переносе кода с одного ядра на другое всё равно придётся дорабатывать напильником, хоть со вставками, хоть без: как минимум архитектура и набор команд разные, работа с периферией тоже. Да и ни кто не говорит, чтобы в 2к2к писать на асме всю программу, речь идёт о вставках, коих может быть чуть менее одного процента от всей проги.
> ещё и оптимизировать по размеру кода, а не по скорости, лол.
Ассемблер и по размеру кода и по скорости лучший, если уж на то пошло.
>Для топовой конторы это гарантированный влёт на бабки,
Тут не понял, поясни. Как фирма может влететь, если её сотрудник будет делать ассемблерные вставки? Доход фирмы зависит от продукта, который она производит, и ей по-барабану на чем ты пишешь, на си, асме или на плюсах, главное чтобы готовое устройство работало нормально и пошло в продакшен.
>поэтому она скорее выпиздит такого "специалиста" по ассемблерным вставкам, чем будет продолжать с ним иметь дело.
Как раз таки наоборот. Михалычи, у которых десятелетний опыт работы на асме напрямую с регистрами контроллера и знающие все даташиты наизусть на вес золота и им платят нормально, а современным зумеркам, которые заливают на гитхаб крафтовые проекты на ардуино и кубике, которые они делали по урокам с ютуба, проводят шершавым на собеседовании и берут разве что за еду(при условии, что они тоже будут писать напрямую через регистры и со временем смогут в асм).
Буквально это рассказал один анон, мол пришел на собес, и когда узнали, что он пишет через кубик и HAL буквально обоссали и обосрали всей фирмой так, что он там больше не появлялся. Да и достаточно почитать вакансии на хх, во всех вакансиях с зарплатой от 30к знание ассемблера и архитектуры будет обязательным.
>Что ещё спизданешь охуительного?
Много чего.
>Топовые конторы стараются как раз уйти от ассемблерных вставок везде, где только возможно, чтобы получить легко поддерживаемый, переносимый и читаемый код.
Читаемый код на ассемблере ничем не отличается от читаемого кода на Си, достаточно соблюдать "code style": комментить, нормально называть переменные, делать отступы, не говнокодить.
>Тебя скорее отпиздит менеджер, если увидит, что ты решил писать на асме там, где можно написать на Си.
Каждое применение ассемблера должно быть обосновано и задокументировано. В ряде случаев, когда нужно обеспечить максимальное быстродействие в критически важных участках программы и даже с десяток лишних клоков контроллера могут запороть работу, ассемблер необходим.
>Оптимизировать на уровне инструкций должен компилятор, который к тому же имеет разные флаги оптимизации, а не программист.
Даже лучший в плане оптимизации компилятор IAR за тысячи бабок будет оптимизировать на порядок хуже, чем человек.
>Я бы посмотрел на тебя, если бы твои ассемблерные вставки нужно было бы пернести с одного ядра на другое,
При переносе кода с одного ядра на другое всё равно придётся дорабатывать напильником, хоть со вставками, хоть без: как минимум архитектура и набор команд разные, работа с периферией тоже. Да и ни кто не говорит, чтобы в 2к2к писать на асме всю программу, речь идёт о вставках, коих может быть чуть менее одного процента от всей проги.
> ещё и оптимизировать по размеру кода, а не по скорости, лол.
Ассемблер и по размеру кода и по скорости лучший, если уж на то пошло.
>Для топовой конторы это гарантированный влёт на бабки,
Тут не понял, поясни. Как фирма может влететь, если её сотрудник будет делать ассемблерные вставки? Доход фирмы зависит от продукта, который она производит, и ей по-барабану на чем ты пишешь, на си, асме или на плюсах, главное чтобы готовое устройство работало нормально и пошло в продакшен.
>поэтому она скорее выпиздит такого "специалиста" по ассемблерным вставкам, чем будет продолжать с ним иметь дело.
Как раз таки наоборот. Михалычи, у которых десятелетний опыт работы на асме напрямую с регистрами контроллера и знающие все даташиты наизусть на вес золота и им платят нормально, а современным зумеркам, которые заливают на гитхаб крафтовые проекты на ардуино и кубике, которые они делали по урокам с ютуба, проводят шершавым на собеседовании и берут разве что за еду(при условии, что они тоже будут писать напрямую через регистры и со временем смогут в асм).
Буквально это рассказал один анон, мол пришел на собес, и когда узнали, что он пишет через кубик и HAL буквально обоссали и обосрали всей фирмой так, что он там больше не появлялся. Да и достаточно почитать вакансии на хх, во всех вакансиях с зарплатой от 30к знание ассемблера и архитектуры будет обязательным.
>Читаемый код на ассемблере ничем не отличается от читаемого кода на Си, достаточно соблюдать "code style": комментить, нормально называть переменные, делать отступы, не говнокодить.
Основное и практически единственное отличие асма от си, это способность непосредственной работы с регистрами. Которая, во-первых, убивает напрочь любую читаемость, поэтому фактически нужно дублировать каждую строчку комментарием с сиподобным кодом, а, во-вторых, у человека получается хуже, просто потому что RISC сделана для компиляторов, а не для людей. Распихивание переменных по регистрам - это задача типа шахмат, в 80-е, может, человек и был лучше, сейчас нет, компьютер тупо брутфорсом побеждает.
В сухом остатке остается только неумение писать эффективный С код. Профессионал сейчас отличается не тем, что на асме пишет, а тем, что, глядя на сишный код, знает, во что его превратит компилятор.
>Буквально это рассказал один анон, мол пришел на собес, и когда узнали, что он пишет через кубик и HAL буквально обоссали и обосрали всей фирмой так, что он там больше не появлялся.
Ну так твоим михалычам важно, чтобы их не выпиздили, вот они и конкурируют, как могут, полоская уши своим работодателям по поводу их незаменимых скиллов. Такая хуйня во все времена была и будет. Или ты думаешь какие-нибудь кавалеристы времен революции не ныли по поводу танков? Нет, та же хуйня была. Люди с устаревшими знаниями не торопятся на кладбище, они сначала будут долго ныть по поводу важности своих знаний, а потом будут демпинговать так, чтобы им дали хоть какую-то работу. Нахуя покупать станок с ЧПУ, если михалыч за бутылку водки сделает все с нужным квалитетом? Вот и тормозит такой михалыч прогресс, обладая при этом невротъебенным ЧСВ. Работать идти к таким лучше не надо, а если нет выбора, то относиться к их ЧСВшным словам тоже стоит с долей иронии.
>Распихивание переменных по регистрам - это задача типа шахмат, в 80-е, может, человек и был лучше, сейчас нет, компьютер тупо брутфорсом побеждает.
Из твоих утверждений с этим наиболее сложно согласиться. Откуда компилятор узнает частоту использования переменных? Не, для такого в общем виде не существует решения вообще. Компилятор даже не учтет возможный диапазон входных данных, не то что статистические характеристики.
На всякий случай добавлю, что я не тот анон, что писал тебе до этого, я просто мимо проходил. Ассемблер действительно нужен крайне редко. Но вот на DSP зачастую он незаменим, с этим глупо спорить.
>Распихивание переменных по регистрам - это задача типа шахмат, в 80-е, может, человек и был лучше, сейчас нет, компьютер тупо брутфорсом побеждает. В сухом остатке остается только неумение писать эффективный С код.
Так никто не говорит, что всю прогу нужно на асме писать, как в 80-е. Только в критически важных по быстродействию местах или там, где это необходимо, как здесь >>416932.
>Профессионал сейчас отличается не тем, что на асме пишет, а тем, что, глядя на сишный код, знает, во что его превратит компилятор.
Компилятор его превратит машинный код, листинг, то бишь тот же ассемблер. Много профессионал из него сможет понять, если не могёт в асм?
>михалычам важно, чтобы их не выпиздили, вот они и конкурируют, как могут, полоская уши своим работодателям по поводу их незаменимых скиллов.
Хорошо значит они голову работодателям заполоскали, если в почти всех вакансиях на эмбеддеров знание асма обязательно.
>За сколько наносекунд разведешь тян на сиськи и спаяешь на коленке платку расширения под PCI-e слот с парой трансиверов 40G Ethernet, легкая FPGA на полмиллиона LE, пару ЦАП-АЦП на пару гигасемплов, аналоговую часть под них, массив NAND и DDR3 памяти и незабыв про SSRAM мегабита на 72 и например рядом несколько работающих по себе i.mx8 у которых так же своя DDR3, NAND и NOR память? Ой, совсем забыл еще Ethernet свич дописать.
Ну за пару наносекунд не разведу, но за недельку-другую смогу развести, чай не rocket science.
>>По частям это есть, одним куском - нету.
Как-раз таки именно поэтому удобнее и правильнее будет собрать все штуки на одну аккуратную плату и возиться с ней, чем когда у тебя весь рабочий стол и комната будут завалены проводами с макетками.
>Дай угадаю - твой уровень - мигалка светодиодом или мигалка на мультивибраторе? Похвально. А теперь пиздуй обратно в свой загон-пердуино тред.
Нет, не угадал. Я уже проходил этот этап на РАБоте, был выбор, как отлаживать устройство - нагородить кучу макеток или собрать сразу одним блоком, поэтому и высказал свое мнение по этому поводу.
Кроме ad hominem есть ещё что-то сказать по делу?
1280x720, 6:50
>>Буквально это рассказал один анон, мол пришел на собес, и когда узнали, что он пишет через кубик и HAL буквально обоссали и обосрали всей фирмой так, что он там больше не появлялся.
>Ну так твоим михалычам важно, чтобы их не выпиздили, вот они и конкурируют, как могут, полоская уши своим работодателям по поводу их незаменимых скиллов.
По-правде говоря, разные ардуино-подобные библиотеки вроде HAL, SPL мало того, что страдают от медленной работы из-за перегруженности условий и косяков, так ещё и написаны индусами через жопу.
Да, для домашних пет-проектов и "роботов" ты можешь делать так, как захочешь, писать хоть в кубике, хоть в ардуино иде, но если специалист будет делать так в интерпрайзе, то его выпнут пинком под сраку.
Что-то странное пишешь. Для начала давно SPL выкинули, если речь про STM32, теперь вместо него LL, не сильно отличающийся от SPL.
Про HAL не буду спорить, не трогал. Но SPL, LL для STM и аналогичные для других микроконтроллеров не будут ничего замедлять, памяти конечно займут больше. Оно всего лишь для начальной настройки периферии. Там все отличие от прямой записи в регистры в том что вначале все пишется в структуру, а потом поля из структуры раскладываются по регистрам. То есть абстрагирования от регистров практически никакого нет.
Ребят, вы вообще не то обсуждаете. Недавно Артамонов где-тов высирался про то, что у него работал чел, который для того чтобы подождать секунду, брал библиотеку мигания светодиодом и вызывал на пустом пине функцию мигания с длительностью 1. А вы обсуждете, как комментарии в ассемблерном коде писать. Это вообще не отражает текующую ситуацию в индустрии. Сейчас у нас интернет вещей во все поля, где надо на контроллере js запускать и пересылать все данные по незащищенному каналу. Байтоебство я вообще не знаю в каких сферах осталось до сих пор.
>>417095
Вот вы серьезно сидите и думаете, что библиотеки под STM писали левые индусы, которых только с вордпресса сняли? Что они наговноделили не думая?
Что там сидят типы, которые дома светодиод подергали и на форуме посрались?
Конечно индусы пишущие код для СТМ - не инженеры гарварда с 15 летнем опытом. Но они прекрасно понимают что и зачем делают.
99% времени выполняется 1% кода (или как то так).
Если у вас программе не хватает скорости обработки логических цепочек - земля пухом. У вас либо пиздос с архитектурой (скорее всего), либо вы пытаетесь впихнуть какую то сверхбыструю обработку сигналов, которая вообще не задача МК, либо вы совсем уже говнокодер.
Большую часть логики и конечных автоматом можно сделать статичными (без перепроверки в цикле и обновления состояния). Урезав время затраченное на нее до совсем смешных значений.
А с ними бесполезно общаться.
>Ааааааааааа, бля, HAL говноооооооо!!
>Индуса писала, не используйте в своих миргалках диолдов!!
>Только регистры спасут отца микроконтроллерного погроммирования!!
И так далее и в таком же духе. То что HAL на порядок упрощает вкатывание в контроллер в расчет не берут.
Я наоборот написал что SPL, а скорее LL, не ограничивает быстродействие. Если до сих пор не понятно, то можно в качестве примера взять stm32f0xx_ll_usart. Так вот, после того как USART сконфигурирован, остается только брать и забирать данные через регистры DR (RDR, TDR), конечно если не задействован ПДП. А для этого там есть функции LL_USART_ReceiveData8 и LL_USART_TransmitData8, в которых нет абсолютно ничего кроме чтения/записи регистра. Хоть сразу в регистр пиши/читай, хоть через эти функции, на выходе будет одинаковый результат, конечно если инлайн не будет отключен флагами компилятора.
То что писали индусы - так почему по твоему они выкинули SPL и сделали на замену LL?
>>417315
HAL не избавит от чтения документации. А значит если на регистрах не можешь сделать из-за того что мануал прочитать лень, то и с помощью HAL вероятно сделаешь ерунду.
> почему по твоему они выкинули SPL и сделали на замену LL
Поверь точно не из-за скорости. Скорее всего архитектурно коряво что то сделали, они всетаки первопроходцы в этой хуйне.
Я честно не тем, не тем не пользуюсь, потому что скачу с одного ядра на другое и один хуй запоминать эти библиотеки смысла нет.
Вместо этого свои драйвера (если их так назвать можно) таскаю.
Вообще честно говоря хуй знает нахуя вообще эти либы на всякую простенькую периферию, т.к. быстрее и читабельнее ее обернуть в свою функцию.
Что лучше?
LL_GPIO_SetStateInvertedGpio(LL_GPIO_INVERTED_INVERT_PINS_NOT_INVERTED)
или
DeviceGPIO(OUTPUT_A, ENABLE);
LL_USART_TransmitData8(LL_USART_USARTNO_UARTA, data)
или
SerialSend(UART_1, data);
>Поверь точно не из-за скорости.
Так и я о том же. Однако не совсем так. В SPL оно было без инлайна, хотя разница все равно мизерная и ничего не мешало конкретно в этом месте работать напрямую с регистрами.
>Я честно не тем, не тем не пользуюсь
А я STM32 не практически пользуюсь.
>Что лучше?
Без разницы, все равно оно будет вызываться в паре мест максимум.
>DeviceGPIO(OUTPUT_A, ENABLE);
Вот это как-то сомнительно. GPIO в микроконтроллерах организовано отдельными портами, соответственно либо придется передавать в эту хрень и порт и пин, либо там где-то внутри будет кучка условий.
>LL_USART_USARTNO_UARTA
С этим не угадал. Там передается просто USARTx.
>Вот вы серьезно сидите и думаете, что библиотеки под STM писали левые индусы, которых только с вордпресса сняли? Что они наговноделили не думая?
Какие-нибудь сорокалетние себастьяновичи из Франции или Италии, которые 20 лет писали прошивки, а потом их бросили писать код чуть посложнее. Так как навыков управления сложностью нет, получилось вот это вот - и медленно, и запутанно, и один хер нужно читать даташит с регистрами.
>было без инлайна
Я помоему в этом треде срался - современные компиляторы умеют в кроссобъектную компиляцию.
Если достаточно четко описано - он вполне может заинлайнить, не смотря на то что в разных файлах реализация и использование.
>либо там где-то внутри будет кучка условий.
Будет. Да и че? Зато охуительно удобно и наглядно.
В 99% мигания диодами, включения реле и даже сканирования клавиатур хватит с лихвой. И там не куча условий, а просто свичкейз, который твой локальный энумератор (OUTPUT_A\B\C\D) превращает уже в байтоебский RMW.
Сколько такую функцию писать? Минут 15 от силы.
По скорости? Ну накладные на вызов функции и смещение по свичкейзу смешные. Ну конечно будет в РАЗЫ медленее, но блин заинлайненый RMW это вообще самое быстрое что может быть, быстрее разме BitSet какой.
>Я помоему в этом треде срался - современные компиляторы умеют в кроссобъектную компиляцию.
До некоторой степени умеют. Ты сам проверял как оно работает? Ты убедился, что твой любимый компилятор сам по себе такое оптимизирует? Наверняка нет. У тебя какие-то опасные иллюзии на счет того что делает компилятор.
А вот в LL, в отличие от SPL, решили сделать иначе, не рассчитывая на такое.
>Будет. Да и че? Зато охуительно удобно и наглядно.
Можно было еще наглядней сделать и без условий.
>Ты сам проверял как оно работает? Ты убедился, что твой любимый компилятор сам по себе такое оптимизирует?
Да и да. Я единственное хз умеют ли это всякие ARMные компиляторы, но я не вижу причин почему.
А вот с программированием я нихуя не понял. Браться что ли за CMSIS? Оно точно нужно для мигания светодиодами и управления парой релюшек? Я все таки не даньги зарабатывать этим хочу. И задача по сути в быстром и доступном написании не очень говнокода.
Если таки нужно начинать учить CMSIS то как это делать? Все что связано с регистрами для меня ебаная магия. Я даже не знаю с какой стороны к этому подойти. Есть по нему какие то гайды для даунов лол?
>И задача по сути в быстром и доступном написании не очень говнокода.
"Мастеринг чего-то там с СТМ32", автор с каким-то смешным именем,типа Кармен Нуэлло. Только на нормальном русском языке нету
Спасибо. Пошел гуглить. На русском конечно лучше, но и английский сойдет.
Засомневался в этом и проверил. Действительно gcc такое делает при наличии флага -flto. Версия gcc 7.3.1 (arm-none-eabi). Все равно на такое рассчитывать глупо. Можно элементарно дописать к функции static inline и перенести ее в заголовочный файл и тогда точно все будет оптимизировано, вне зависимости от наличия флага -flto и компилятора. Мало ли что, может кто-то не будет использовать -flto для ускорения компиляции.
>элементарно дописать к функции static inline
Ээээ браток, инлайн не пашет между объектными файлами, ты что охуел?
Как это по твоему должно работать?
>на такое рассчитывать глупо
Как насчет 10% при 70% (стало 60) в 128кб?
Могу пруфнуть, но лень.
ИМХО не начинай изучать программирование МК с STM32, т.к. там очень много ARM-специфичной хуйни и вообще усложненной хуйни свойственной современным ядрам.
Начни с AVR с практической точки зрения, новичку похуй
>>417568
>и перенести ее в заголовочный файл
Проебал, извиняй.
Ну блядь такое... В заголовочниках писать реализацию, хуй знает, в крупном проекте и так с кашей охуеваешь боротся, а тут еще и инлайновые функции.
А если это асессор\мутатор? Прикинь сколько там пиздеца будет в заголовке? А если он требует доступа к локальным данным модуля?
Интернет любительских поделий ты хотел сказать? Понадеюсь что опечатка.
Я рад за побритых куков сделавших очередной контроллер смыва унитаза за 15к, но что бы оно хоть как то было конкурентноспособным, тебе придется его ужимать и ужимать по максимуму.
Что захуярить вебсервер с шифрованием в младший STM8 покажется очень интересной идеей.
>изучать программирование МК с STM32
В такой шедевр надо вкатываться даже через силу. Я когда попытался под него писать не осилил, а потом выделил много времени только под STM32, заготовил много чая и кофе и начал наварачивать это дерьмо ставя на паузу каждые 30 сек, ходил по комнате туда сюда, просто чтоб расслабиться, потом продолжал читать reference manual и попутно писал в keil со слезами на глазах и поблёвывая. И в итоге вкатился, не жалею, теперь во всю могу оценить всю мощь этого микроконтроллера.
Потому что в общем случае будешь с банками памяти и соответственно устаревшими приемами программирования знакомится (ага дин. выделения хуй).
Короче это устаревшие ядра, ведущие родословную с середины 80х и очень сильно отличающиеся от современных.
Конкретно, за 51 не скажу, не приходилось, пик - уебищный софт, уебищные библиотеки, уебищный компилятор, но божественные даташиты.
AVR - имеет годнейший софт (студию 7 которая на базе вижуал студии), огромнейшее сообщество, сносные даташиты, не плохие библиотеки.
Я бы посоветовал еще СТМ8, но он имеет те же проблемы что и 32 - он очень навороченный.
>>417640
Без разницы во что на начальном уровне вкатываться, все знания из AVR легко переносятся на STM32.
Просто референсы STM - уебищные и запутанные, ядро запутанное, это ад новичка, который не понимает что к чему и где. Про таймеры вообще даже хуй знает что сказать...
Идея интересная, но этот сегмент рынка сейчас маленький и представлен в основном крупными компаниями, у которых есть ресурсы и время на планирование. В остальных местах царит хуяк хуяк и в продакшон, им надо быстро и дешево в разработке. То, что получается в результате хуйня - никто не спорит.
Интересная идея тут - идея более выгодная, чем тоже самое в F4 каком, который ее на изиче потянет.
>хуяк хуяк и в продакшон, им надо быстро и дешево в разработке.
Это каксается только хипстерских стартапов, которые вымирают к слову сотнями по... ИХ УСТРОЙСТВА ИМЕЮТ СЛИШКОМ БОЛЬШУЮ СЕБЕСТОИМОСТЬ.
Бадум-тсс.
Встраиваемая электроника это всегда абсолюнто всегда байтоебство. Можно более менее разойтись в мелкосерийке и всякой узкоспециализированной хуйне, но в любых действительно массовых устройствах ты соснешь.
Это самое... Есть одна 746G-Discovery, и есть Куб на ноуте и на компе. Так вот, на ноуте есть возможность добавить StemWin, а на компе такого пункта нетути. Чего делать то?
Ларчик просто открывался, начиная с версии 5.5, настойчиво продвигают TouchGFX и EmWin убрали к хуям. Только ручками теперь
>это всегда абсолюнто всегда байтоебство
Сечас же навроде жирнючий камень типа F1C600 с несколькими ядрами, возможностью запуска линупса и прочими ништяками стоит пару баксов. Нахуя байтоёбить как не в себя?
Потому что он не пару баксов стоит и обвязка к нему не пару баксов стоит.
Жрет он не то что бы что бы можно было поставить в батарейное устройство.
Никто не байтоебит как не в себя. Байтоебят на столько, на сколько нужно. Но иметь заблуждение, что в проф среде пишут под линуксом на микропитоне - глупость большая.
Тут недавно анон в каком то треде пытался выяснить, как ему STM8 прошивать другим контроллером, без бутлодера. Т.к. было жалко на более жирную версию денег, т.к. околомиллионые партии у устройства.
>Потому что он не пару баксов стоит
$1.42
https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/
>Китайский проц под который нихуя нету
Считаешь что байтоебство и пердолинг с сборкой кастомных линуксов это разное?
А теперь представь еще что у тебя вот эта хуйня и тебе нужен настоящий рилтайм.
Есть и всякая херь типо GD32, которую в домашнюю поделку я себе с радостью запихну, а в коммерческий проект в пизду пошлю, как бы там не уверяли, что оно полностью совместимо.
>>417695
И еще, тебя не смущают большие буквы конфиденшинал на даташите? И отсутствие другого в свободном доступе.
Это процы производившиеся хуй знает для кого, остатки которых слили налево. (может быть, я не исключаю дешевых китайских арм по 2 бакса, но сильно смоневаюсь).
Вот и сделаешь ты под них хуйню, а они хуяк и пропадут из продаж. GGWP.
Гугли больше. Она есть. Она довольно уебищная. Но она есть и ее пиздец трудно найти.
>вменяемую документацию на HAL
Нету ее. Есть в папке с кубом на твой контроллер ->Drivers ->STM32xxx_naHAL ->STM32Fxx_User_Manual.chm
И есть еще в пдф-е Description of STM32F4 HAL and LL drivers UM1725 или UM1905 для F7-серии. Идешь на ST.com ищешь свой контроллер -> ищешь пакет Куба на него -> переходишь и на вкладке "Resources" находишь пдф-ку с описанием.
Документации где вдумчиво раскуривается использование HAL помоему не существует
>А это разве не просто доксигеновская отрыжка?
.chm - да, пдф-ка чуть получше, есть хоть какие-то HOWTO
Берешь куб, генеришь код, читаешь его
QEMU ARM при старте без system_reset стартует в некоем неопределённом состоянии и сразу залетает в blocking_handler?
Пока нет реальной железки гоняю софтину в эмуляторе - приходится каждый раз сбрасывать её ресетом прежде чем она начинает в нём работать.
Вектор прерываний с лупой проверил - всё верно заполнено. Регистры тоже в норме, никаких аппаратных сбойных флагов не выставлено.
выручайте а то с ума сойду.
Да, забил на все эти HAl-хуял. Использую расово-верный открытый libopencm3. Всё верно делаю?
>Нахуя он вообще тебе нужен? Тебе 4 флага в падлу записать в регистры?
Думаю, унутре он именно это и делает
Ну в плане тебе один хуй учить эти флаги, а потом учить еще библиотеку. Непонятно нахуя это?
Тебе один хер надо знать как работает эта периферия, что бы нормально ей управлять.
>Ну в плане тебе один хуй учить эти флаги, а потом учить еще библиотеку.
Дядя, ты дурак? Зачем "учить" библиотеку? Зачем учить флаги, которые она от меня прячет?
Лол если ты думаешь что тебя хал и лл уберегает от знания периферии и флагов, лишь показывает, что задачу серьезней бзднуть-моргнуть ты не решал.
Ввиду этого разговор не вижу смысла продолжать.
А если я собираюсь подключить LCD, кучу датчиков, ЖСМ-модуль, Ethernet, nrf2401, по CAN общаться еще с горстью датчиков, то как мне этим зоопарком управлять в бесконечном цикле? Я же охуею продумать все варианты прерываний и обработки событий. Как взрослые дяди с ентим справляются?
"Паяльники" открыли для себя дырявые абстракции?
Теперь откройте как это связано с нежеланием "учить регистры"
>Лол если ты думаешь что тебя хал и лл уберегает от знания периферии и флагов, лишь показывает, что задачу серьезней бзднуть-моргнуть ты не решал.
ПИШЕШЬ САЙТ
@
ДЕРГАЕШЬ РЕГИСТРЫ x86_64
@
ИНАЧЕ ГОВНО ЖЕ ПОЛУЧИТСЯ
>Как взрослые дяди с ентим справляются?
Копать надо со стороны "а зачем ты это всё подключаешь?"
С сайтами еще хуже чем с регистрами может оказаться, там может потребоваться учитывать отличия разных браузеров, под каждый писать свои части кода...
А тот анон не совсем правильно тебе написал. Нежелание хоть немного смотреть на регистры означает нежелание открывать документацию в принципе. Ну, успехов в разработке устройств без изучения документации на используемые микросхемы.
>а зачем
Ну, допустим, хочу заебенить контроллер в котельную. Нет, не для управления котлом, так как он у меня твердотопливный, а для управления обвязкой. Вкл/выкл насосов котлового контура, контура отопления, контура ГВС, контура ТП, периодическое включение летом для защиты от клина, общение с UPS на предмет состояния аккумуляторов, выключение его если температура в контуре ниже +20 для экономии, общение с метеодатчиками по радиоканалу для подобия погодозависимости. Чтобы два раза не вставать, контроль влажности в подвале и на чердаке, вкл/выкл вентиляторов, контроль датчиков на рекуператоре, общение с "головами" на системе водоподготовки, подсчет израсходованной воды из скважины, контроль влажности и уровня воды в приямке кессона... Да просто ебаная уйма контролируемых параметров. Небольшие зайчатки интеллекта, типа набрать воды в душ ночью, чтобы с утра начала греться на солнышке, послать смс о проблемах с электропитанием/насосами/небом и Аллахом, периодически выгружать в домашний сервак bigdat-у с датчиков дабы я мог посматривать.
Короче, я так понял, что надо смотреть в сторону RTOS?
>RTOS
Не требуется, можно обойтись простым конечным автоматом.
Однако тебе наверняка целесообразнее взять малинку и писать на питоне, например. У тебя нет задач, когда требуется определенная скорость реакции, которую обеспечивают микроконтроллеры, для такого сойдет одноплатник.
Найс маневрируешь.
Давай еще мейнфреймы сравнив с ембедедом. В принципе я нихуя нового не скажу, уже все написал в предыдущем посте.
>целесообразнее взять малинку и писать на питоне
Но у меня завалялась 746Г-дискавери, неохота еще и малину с дисплеем покупать
Да, берешь RTOS, у RTOS есть потоки, которые в отличие от взрослых ОС работают в кооперативной многозадачности, то есть отработал и сам отдал управление в ОС, вызвав delay/sleep.
В итоге RTOS по таймеру вызывает нужные потоки, они отрабатывают и засыпают. Если процесс долгий, то засыпать можно прямо в процессе работы, давая отработать всему остальному, поэтому это удобнее конечного автомата, где тебе нужно самому париться о том, как сохранить состояние текущего процесса и разбить свои вложенные циклы на переходы в конечном автомате. Здесь у тебя будут отдельные независимые процессы, при чем, учитывая специфику, можно отрабатывать их раз в несколько секунд, а остальное время спать.
А ещё разные части системы должны как-то друг с другом взаимодействовать.
RTOS предоставляет для этого всякие очереди и не только.
>Нежелание связано с ленью и тупостью, не более того.
Не в этом дело. Возможно ли разрабатывать электронные устройства не читая документацию на используемые детали? Если врзможно, то на каком уровне?
Не похоже, что у него что-то с чем-то взаимодействовать должно. Максимум GSM-модуль посмотрит на поднятый другим модулем флаг ошибки, отправит СМС и сбросит его.
Т.е. не модуль, а процесс RTOS, работающий с GSM
Лень и отсутствие времени
Делаю что то похожее на работе.
Не делай на самопальном фреймоврке\системе.
RTOS скорее необходима нежели желательна.
Очень желательны плюсы, а не си. Т.к. будет куча зависимых состояний и тебе что бы не поехать придется уходить в абстракции.
Главное - НЕ ДЕЛАЙ НА КОНЕЧНОМ АВТОМАТЕ, если хочешь это говнище поддерживать не подгорая пердаком каждый раз. Сейчас не 95 год и блядь как раз на хуйню рулящую всем и вечно подключенную к розетке можно уебать пару ядер и лишних баксов.
Я видал подобные параши на автоматах, в итоге все приходилось переписывать заново, если старый разраб съебывал или не занимался ими достаточно долго.
ИМХО - купи ЕСП32, там тебе сразу будет RTOS и куча производительности. На всякий реалтайм вьеби дешевый МК, АВР или чего подобное. Ну или там же на есп, если ног хватит.
Возьми малинку, поставь homeassistant, подключи все датчики-реле через несколько esp8266, залей на них esphomelib (это своего рода микротиковский capsman для всевозможных датчиков), добавь туда минимальный аппаратный failsafe ну и напердоль логику на node red.
И не надо тут ряя зачем мне эти костыли и абстракции, хочу байтики дрочить. Для единичных изделий так многократно удобнее и не сильно то и дороже.
Сколь жирно... я почти повелся и уже было расписал гневный пост, но вовремя одумался.
С таким "хендмейдом" проще готовое купить.
Там же ничего твоего? Нахуй вообще пердолится тогда?.
>>418845 Готового решения по всем хотелкам из того поста нет. Дергать насосы-клапаны можно поставить Danfoss ECL, для вентиляции Corrigo Е, для красивенького интерфейса можно поставить Control4. И на этом все.
>Там же ничего твоего?
Тебе шашечки или ехать?
>Готового решения по всем хотелкам из того поста нет.
Есть близкие и легче докостылить их. И вообще в таком случае действительно правильнее брать ПЛК и не ебать мозги. Они для этого и созданы.
>Тебе шашечки или ехать?
Я предполагаю что любителю таки нужны шашечки.
>правильнее брать ПЛК и не ебать мозги
Отличная идея. Даешь погодозависимую автоматику на клонах моторолы FX2N.
>любителю таки нужны шашечки
Шашечки тут ограничатся гордостью за то что вот я сам на сишечке все написаль. А то что все это будет крайне примитивно из-за нехватки времени, где хер разберешься в коде спустя полгода, без нормального интерфейса, средств отладки, мониторинга и как следствие вскоре будет просто отключено и заброшено.
Тем то и удобна эта мерзкая облачная фигня homeassistant, там всегда можно открыть редактор и за полчаса что-то поменять в логике, найти косяк полистав логи, добавить новый девайс.
>Возьми малинку
Это ладно еще, я сам выше предлагал. Хотя это специфическая такая штука, сомнительной надежности.
>homeassistant
Ну про это я не знаю, не трогал и надеюсь не докачусь до такого.
>через несколько esp8266
А вот это уже финиш и дальше еще чуднее.
По моему так вообще не меньше половины этой автоматики можно заменить несколькими релюшками без всяких микроконтроллеров, а другая и не нужна вовсе.
>правильнее брать ПЛК и не ебать мозги
Вы ценник на енти ПЛК видели? Даже сраный гОвен от 20к+. К нему еще модули АНАЛогового ввода-вывода, датчики 4-20мА с ебической стоимостью, HMI дисплей. Ну его нахуй, такие советы. Таким макаром я и сам, без автоматики, буду клацать насосами и включать вертиляторы
>По моему так вообще не меньше половины этой автоматики можно заменить несколькими релюшками без всяких микроконтроллеров, а другая и не нужна вовсе.
Ты не прав. Там есть логика, которая при кажущийся простоте может быть очень заебна в комплексе с другой хуйней.
Я поэтому настоятельно рекомендовал в абстракции уходить и иметь запас по мощности.
Иначе на половине функционала у тебя получится свичкейз на 10 тысяч строк. Я такой видал лол.
>>418879
Ну поэтому бери ESP32 с RTOS, ну или делайн на малинах и хипстерских фреймворках.
Заклинаю тебя не пытаться это все на голою делать.
>Ну про это я не знаю, не трогал и надеюсь не докачусь до такого.
Зря.
https://www.youtube.com/watch?v=9Yu57vjz7AY
https://www.youtube.com/watch?v=o-vNCObJ4dM
Не можно. Самому писать поддерживаемый код с годным UI и кучей функционала это долго, очень долго.
Сначала отключать таймер, переконфигурировать, потом включать, это нормально?
>Пытаюсь сейчас управлять шаговиком через H-мост на STM8 используя комплиментарные PWM.
Я правильно понял, у тебя полношаговый или полушаговый режим без стабилизации тока в обмотках?
Полно- и полушаг я могу делать чисто через GPIO.
Я пытаюсь делать микрошаг, регулируя ток на обмотках через ШИМ. Проблема в том, что 4 канала использовать нельзя. Так что я использую 1, 2 каналы первого таймера в комплиментарном режиме.
И для смены направления тока в обмотке мне надо переконфигурировать каналы.
В какой тред ему нужно было? Прикрепленный? Или создавать отдельно по STM8?
Вообще-то в этом треде уже немало обсуждали STM8.
Мне непонятно почему не взять готовый драйвер. Для шаговых двигателей не просто ШИМ-ить нужно, а еще стабилизировать ток. Т.е. в мосту должны быть резисторы с небольшим сопротивлением для измерения тока, а к ним напрямую входы АЦП наверное еще не получится подключить, потребуется еще усилитель. И это при том что готовое устройство совсем дешевое.
>Или создавать отдельно по STM8?
Зачем создавать то, что давно имеется на доске? >>298779 (OP)
>И это при том что готовое устройство совсем дешевое.
Вот тут двачую. При том, что сама ST ебашит линейку драйверов STSPIN от маломощный, до йоб со встроенными мосфетами, микрошагами и своми проприетатными алгоритмами снижения шума и прочих вибраций.
Всё, разобрался. Схема говна была
Листаю герберы на STM32f429i-Discovery и STM32F746G-Discovery. У первой оперативка подключена дорогами чрезвычайно разной длины, у второй меандры во все поля.
До 200Мгц нет смысла уравнивать длины штоле?
Осторожно бздану - похуй. Запускал SDRAM на соплях на SAM9260 на 100 МГц и даже без явного слоя земли снизу. Как работает? Да хуй его знает. Толи из-за того что работает по одному фронту, а не обоим, а может еррата на камень где Атмел признался что очень мощные буферы сделал и просит ставить последовательные резисторы. Юбут и линукс работал непрерывно минимум неделю. Сбоев не было.
>До 200Мгц нет смысла уравнивать длины штоле?
За одну двестимиллионную секунды у тебя свет проходит 299792458/200000000=1.5 метра. А какой длины там дороги, сантиметр есть хоть?
Посидел два дня — стало ясно что это говно не простой фреймфорк, где можно хуяк хуяк и в продакшон. Там все настолько сложно и запрятано в перди, что после просмотра трех вебинаров и уроков, каждый длиной в полтора часа, я до сих пор понял только следующее:
- Additional Software пресловутого TouchGFX, который можно добавить к любому проекту с использованием Stm32f4xx нихуя из коробки не работает. Это вам не встроить FreeRTOS.
- правильный путь создания проекта - это выбрать свою борду в TouchGFX Designer'е и плясать уже от него. При том нормально генерится только проект для CubeIDE, с кейлом фокус с прошивкой контроллера уже не прокатит. Ну и конечно же нужен CubeProgrammer просто чтобы прошить готовый проект.
- в результате генерации получается проект с ебовейшей структурой, который приходится пилить напильником, намешанная ебанина из плюсов и сишки.
Такого насилия над мозгом я не встречал уже давно. Это просто пиздец.
Черт знает как мне дальше быть. До вечера надо решить на чем будем делать проект, и, черт возьми, для меня это просто загадка из двух стульев — на одном TouchGFX дроченый, на другом малина точеная.
Да, бля, как же это хуево. Вменяемо поставить TouchGFX можно только на очень узкий перечень дорогих плат. Свой проект на какой-то f407 уже не потянуть. При том в кубе все есть, поставил, зарезолвил этот TouchGFX и все равно хуй тебе а не искаропки. И туториалов нет вообще, даже разработчики не дают вменяемых ответов.
Боюсь теперь в малину катиться, вдруг там также будет. Ну хоть туториалов больше, наверняка.
Бля, прочитав твой пост думал удариться в изучение ентого ТorchGFX. Хуле, думаю, пердолиться с древним СтэмВин, а оно вона как. Поставил дизигнер торчевский, прихуел со сгенерироанной структуры папок и вложений, хуй понял чего там к чему и закинул к хуям.
Делай на HMI панели. Nextion какой. Он блевота, уебищное говно, кривая хуйня, высер ускоглазого уебища.
Стоит 1200р 3.5' базовая модель (не знаю насколько приемлемо вам)
Но у него есть IDE - насрал мышкой и в продакшен.
Я ещё попердолился с TouchGFX десигнером. И вот что обнаружил.
- Название проекта менять не получится. Проебывается ioc файл из связей.
- Настройки генерации в кубе, в том самом сгенерированном файле, менять нельзя. Иначе пиздарики, проект с белым фоном не запускается. Так что придётся весь свой код в мейне держать, как диды.
- В принципе, можно менять и крутить периферию как хочешь на своей плате. Правда пока что для меня даже простая кнопка это недостижимый уровень мастерства. Ну, думаю, завтра запилю таки экранную кнопку со светодиодом.
ты скрины хоть бы покидал того ужаса что он генерит.
С названием проекта - ну бля вообще это скорее норма.
Малинка должна нормально работать с HDMI монитором, как и другие подобные одноплатники. А софт там обычный линуксовый, должен работать везде более-менее одинаково. На счет тача не знаю, наверное надо брать с USB и выбирать те которые точно работают под линуксом. По моему все это можно отладить на нормальном компе, а потом просто перекомпилировать под малинку.
>Сакральный смысл в том, что ты можешь менять частоту в процессе работы, и снижать потребление устройства.
Ну в AVR это ещё очень давно появилось, в виде sleep mode, с понижением частоты, отключением переферии и,соотсветственно, снижением энергопотребления.
В avr нельзя отключать периферию в том смысле в котором она отключается в stm и прочих новомодных контроллерах.
Там она просто считай в резете находится, в stm - обесточена.
Обрати внимание, мелкомягкие выложили недавно свой azure rtos на github, куда входит guix
https://docs.microsoft.com/en-us/azure/rtos/guix/overview-guix
https://github.com/azure-rtos/guix
Пока из недостатков вижу отстутсвие кодогенерации на нём в кубе.
Вроде есть взаимодействие с C и C++, так что дёргание HAL или LL проблем вызывать не должно.
Я вижу 3 возможных способа:
1. Тесты запускаются на микроконтроллере.
Надостаток: на тесты может не хватить памяти
2. Тесты компилируются в arm, который эмулируется на ПК
Недостаток: не протестировать работу с железом
3 Тесты компилируются в x86 и запускаются на ПК
Недостаток: такие же, как (2). а ещё код может работать с x86. но не с arm (например, если наворотить какой-то UB), статические arm-only либы придётся отгораживать слоем абстракции.
запускаем при старте как self-test
Анон поясни за тесты, что такое и как писать, можно с каким либо простейшим примером для мк?
>Ну, допустим, хочу заебенить контроллер в котельную. Нет, не для управления котлом, так как он у меня твердотопливный
Лол, а я тоже, только именно для котла, он у меня автомат, а контроллеры срынка - говно полное
я - это>>418477
>Короче, я так понял, что надо смотреть в сторону RTOS?
Это да, но сначала посмотри в сторону того, как пишутся многопоточные программы с кооперативной многозадачностью.
Т.е., эта проблема она не свойственна только контроллерам.
Напиши контакты, может вместе писать будем?
>Зачем все это запихивать в один мк?
За тем что твоё предложение поставить малинку означает что получится неконтроллируемое неферифицируемое глюкавое говно
>которые в отличие от взрослых ОС работают в кооперативной многозадачности
FreeRTOS для эхотага рекомендует юзать вытесняющую многозадачность таки
>Для такого нужен ПЛК или небольшой промышленный компьютер(в принципе малинка пойдет) и процессоры там на порядок мощнее, чем в микроконтроллере. На STM32 ты не сможешь это сделать.
Открой любой ПЛК и увидишь внутри обычный stm32
Да понятно, что говнокод, поэтому и недостаток такого вида тестирования в том, что он такой говнокод не заметит.
Или проще самому запилить с развязкой и более жирной защитой?
ну чтобы пофиксить самому, надо понять причину. Не можешь понять причину - купи готовое решение.
Спасибо за наводку!
Соберу на adum4160, dc-dc 0505, stm32f103 и txs0104, или куплю развязку USB на Али.
https://easyeda.com/Ivenhor/stm32f303re-tft
Собственно сам проект. Насколько я понял любой тут может в него потыкать.
Понятно что все сделано криво. Но я стараюсь стать лучше.
Принципиальные проблемы две. Линия 5V Не работает. Там твориться какая то хуйня. То 7 то 10 вольт вместо задуманных 5. Где то я обосрался, но не могу понять где. Тыкните носом долбоеба.
Вторая проблема с экраном. Он нихуя не работает. Экран стандартная китайщина на ili9341 Задумывалось что он будет тупо впаиваться с плату. Но нихуя не работает. Подсветка горит изображение не выводиться. Есть плата нуклео, на которой тот же экран прекрасно работает. Те же самые ножки контроллера использую, один и тот же код. Но нет. Хуй знает в чем проблема.
В остальном плата вроде рабочая. Программируется и весь код кроме экрана работает как задумано насколько это возможно при моем уровне знаний. Но если я где то еще серьезно обосрался будет здорово если мне на это укажут.
>Линия 5V Не работает. Там твориться какая то хуйня. То 7 то 10 вольт вместо задуманных 5.
Покажи где и как меряешь, чем и как питаешь, как дебажишь и какие напряжения питания во время отладки?
У тебя точно стабы на нужное напряжение, а не ADJ версии? На первый взгляд явных косяков нет по части питания.
Анон, хочу вкатится в стм32. Что по софту под линем? Хватит ли мне <мой любимый текстовый редактор> + компилятор? Или без всяких STMStudio, STM32CubeMX и прочего крутого стафа никак?
>Хватит ли мне <мой любимый текстовый редактор> + компилятор?
Некоторым хватает. Там же обыкновенный gcc есть, а можно и armclang взять.
>Или без всяких STMStudio, STM32CubeMX и прочего крутого стафа никак?
Ну, это кому как. Многим никак.
В общем, как я понял, надо пробовать. Ну тогда начну с текстового редактора + gcc, а там буду смотреть чего мне не хватает.
Минимум мозгоёбства с сетапом в linux - platformio + vscode с плагином/clion с плагином для состоятельных господ. Само скачает и поставит тулчейн, само сгенерит минимал проект под твой камень и платформу ststm32/cmsis/mbed, одной командой собирает и заливает.
Cubemx можно как справочник использовать - настройку какого-нибудь хитрого тактирования посмотреть, или еще что.
>Что по софту под линем?
Откудова вы лезете? Хакиры дохуя штоле? Покупаешь Mastering STM32 и читаешь, как тулчейны в твоем линупсе устанавливать.
Попробую тогда vscode с плагином. clion я хоть и могу использовать (хорошо быть студентом), но мне просто не нравится в ней работать
>Покупаешь Mastering STM32
>MINIMUM PRICE $26.99
Дороговато. Ну и я пришел узнать опыт людей, что они могут посоветовать, а не за гайдом по установке софта.
>как тулчейны в твоем линупсе устанавливать.
Оно там устанавливается одной командой. И для этого не нужно читать и тем более покупать дурацкие книжечки.
>>424645
А еще меньше мозгоебства это одной командой установить пакет gcc-arm-none-eabi (убунту, дебьян) и все. Нечего всякую чушню советовать.
>дурацкие книжечки
А вот тут не надо серить себе в штаны. Книжечка будующему кулхацкеру пригодится не раз.
Какой интерфейс клавиатуры? Ps2 или usb?
>А вот тут не надо серить себе в штаны.
Скачал я эту книжечку, а там поиском не находится ни одного упоминания системы сборки make, не говоря уже о других системах. Так что нет, твой совет совершенно не в тему.
>Книжечка будующему кулхацкеру пригодится не раз.
Ага, конечно же. Сразу после установки Kali Linux.
>А еще меньше мозгоебства это одной командой установить пакет gcc-arm-none-eabi (убунту, дебьян) и все. Нечего всякую чушню советовать.
Ты к нам из 90х? Привет, дедуля! Мейкфайлы сам каждый раз пишешь, или с дискетки копируешь?
И стартап на асме небось, на пятидюймовых?
>Мейкфайлы
Вот про это не надо тут. На них многое завязано. Даже если возьмешь CLion, все равно мейкфалы будут. А симейк там даже помозгоебнее в некоторых отношениях.
И если на то пошло, то для СТМ32 уже все написано https://github.com/ObKo/stm32-cmake Самому что-то писать потребуется только если нужно что-то нестандартное. И это намного гибче, чем код, генерируемый каким-то плагином.
>ни одного упоминания системы сборки make
Может быть потому, что книжечка в основном про микроконтроллеры STM32, а не пособие красноглазиков?
В таком случае там ничего про это не написано:
>Покупаешь Mastering STM32 и читаешь, как тулчейны в твоем линупсе устанавливать.
То есть ничем таким эта книга тому анону не поможет.
>То есть ничем
Тулчейны-то, блядь, установит!!! Может еще доебешься, что там не описано как пропатчить KDE под FreeBSD? Твоя МАКЕ это уже специализированный инструмент. По нему свои книжки есть или маны, я хуй его знаю чем вы себе голову засираете.
>доебешься
Еще бы не доебаться, если ты рекламируешь какую-то ерунду, да еще и покупать советуешь.
>Тулчейны-то, блядь, установит!!!
Ага, точно. Установит несколько пакетов одной командой, стоило ради этого покупать целую книгу. А потом в разных дистрибутивах могут быть разные пакетные менеджеры и даже пакет с gcc может называться по разному, поэтому еще не факт что установит, если выполнит указанные там команды.
Остальную часть твоего высказывания даже не буду комментировать, все совершенно не в тему заданного вопроса.
Я хоть не дезинформирую, в отличие от некоторых. И не агитирую тратить деньги на какие попало книжонки.
Для линуксов достаточно установить пакеты gcc-arm-none-eabi и cmake, далее взять https://github.com/ObKo/stm32-cmake и на этом все. Или можно взять не cmake, а другую, без разницы. Причем это не только для линуксов, так имеет смысл делать вне зависимости от ОС.
> чото понаставить, если у тебя убунта дебиан, а если нет то бибу
> чото откудато склонировать
Ты забыл прописать пачку настроек в CMakeFile.txt
> и на этом всё
Вместо того чтобы просто
> pip install platformio
> pio project init --board disco_f303vc --project-option "framework=cmsis"
> pio run -t upload
Такая же хрень бро с pl-2303
>Всегда мигает светодиод pc13
Значит бут режим не переключается. Перемычки то правильно переставил? Если правильно, то следует проверить сопротивление резисторов на BOOTx-выводах, через которые джамперы перемыкают.
Если не заведется, проверь саму pl, замкнув tx на rx, и написав пару букв в терминале. Ну и pl tx -> usart1 rx и наоборот, естественно.
>Анон, хочу вкатится в стм32. Что по софту под линем? Хватит ли мне <мой любимый текстовый редактор> + компилятор?
Да. Использую строго опенсорс (потому что заебали 20гиговые редакторы от брендов).
clang + geany + libopencm3 + freertos
>20гиговые редакторы от брендов
Когда красноглазый пиздит? Когда открывает рот. Вот те папка Кейла с пакетами на всю линейку STM, начиная F0 и заканчивая MP&WB (установил, сам не знаю нахуя)
Пикчу забыл
PL работает в терминале буквы на замкнутой rx tx набираются
мне ещё не нравится закрытость сама по себе. не уверенно себя чувствую когда не могу поправить всё что хочу сам.
Меряю там где у меня выходят линии питания. Тестером лол. Тыкаю один щуп в землю другой в запитанный пин. Не знаю как это еще можно сделать. Я специально вывел все линии что бы можно было потыкать. Питаю я 12 вольтами. Соответственно у меня выходят 12, 5, 3.3.
Стабилизатор https://lcsc.com/product-detail/Low-Dropout-Regulators-LDO_Advanced-Monolithic-Systems-AMS1117-5-0_C6187.html
Вот этот вот.
Жаль что нет явных косяков. Тогда все было бы намного проще.
Во-во, неонка же без светодиодов работает
Конденсаторы 22 мкФ на +5 В керамические?
Поменяй их на танталовые/электролитические, или подключи последовательно с керамическим 22 мкФ ~0.5-1 Ом резистор. Часть линейников нестабильно работает с керамикой, им нужен конденсатор с большим esr, в даташитах у таких пишут про tantalum output capacitor или про минимальный esr.
Ещё проверь входной кондёр, из-за его отсутствия тоже такое бывает.
Замерил проводники до чипа на плате и резисторы
100 ком R3 R4 всё целое. Почему мигает PC13 в boot0=1
Спасибо. Уточню эти моменты. Конденсаторы выбирал только по емкости и о таких тонкостях не знал.
Там должно быть значительно меньше 100 ком. Там же подтягивающие резисторы того же попядка, а эти должны быть на попядок меньше. На китайских платах это довольно распространенная проблема.
Просто перепаяй эти резисторы. Твои индусы возможно так и сделали, а может им повезло с китайцем.
Если резисторов нет, то можно заменить просто перемычкой.
Зачем вообще тебе бутлоадер? Оно нормально шьется и отлаживается через SWD.
Stlink нет. Есть только PL-2303HX.
Доберусь до паяльника попррбую подать +3.3 и землю напрямую на boot 0 boot1 чипа.
>Зачем нужен этот 10k?
В душе не ебу, что у тебя изображено на картинке и нахуя там резистор на 10к. Ты можешь по человечески нарисовать, что и куда у тебя подключено к контроллеру?
Собираю всё как накартинке без резистора 10к. Но ебанный демонстратор невидит плату. Постоянно мигает pc13 с любыми вариантами перемычек.
Так перемкнул резисторы, которые по 100 кОм?
>Но ебанный демонстратор невидит плату.
>Постоянно мигает pc13 с любыми вариантами перемычек.
Как он в таком случае может видеть? Светодиодом мигает зашитая по дефолту программа.
Ты в курсе что такое бутлоадер? Похоже нет. В микроконтроллере есть масочное ПЗУ, из которого он начинает выполнять программу при включении питания. Эта программа проверяет лог. уровни на выводах BOOTx и в зависимости от результат либо переходит к выполнению кода с флешки, либо начинает ждать команды по UART для перепрошивки. Естественно кога программа из масочного ПЗУ ждет команды по UART, программа из флешки выполняться не может, ну никак не может, соответственно светодиод мигать не будет.
Конечно, до перезагрузки ничего не будет.
Выдрал R3 R4 зашунтировал. Теперь при подачи на boot0 плюса плата после ресета перестает моргать pc13 и наверное уходит в загрузчик но связи через usart получить опять не могу.
Ебаное китайское поделие залил от нехуй делать плату спиртом промыл и это говно прошилось и заработало.
И второй вопрос в развитие первого. Есть мысль грузить прошивку удаленно скажем по сети, но не затирать первую, а прошивать ее во вторую половину flash, потом проверять CRC и потом как-то "переключать" на использование новой. При следующем цикле затирать уже первую половину и т.д. Типа эмуляция dual boot, при этом выбор прошивки для старта должен происходить автоматически - всегда самая свежая.
Пока начал копать и пробовать, освоил только перемещение таблицы векторов.
>боевая прошивка + свой бутлоадер
>интересует, как обычно такое делают - в виде двух разных проектов или как-то объединяют в один.
Возможны оба варианта. Если один проект, то бутлоадер это просто одна или несколько функций, которые принимают байтики и пишут на флешку. В зависимости от особенностей работы флешки, функции бутлоадера должны быть размещены в ПЗУ или определенных областях флешки.
Если два разных проекта и в твоем микроконтроллере можно переносить таблицу векторов прерываний (начиная с Cortex-M3), то делается аналогично штатному бутлоадеру. Свой собственный бутлоадер размещают в начале ПЗУ, а после бутлоадера основную программу. За размещение программы в определенных областях памяти отвечают настройки линкера. Как перейти к выполнению основной программы из бутлоадера? Для этого есть NVIC и там можно просто перенести таблицу прерываний.
>В идеале потом получить единый hex (или bin).
Если было два отдельных проекта, то если пользуешься gcc, можно использовать objcopy.
>И второй вопрос в развитие первого.
Нет, так в общем случае невозможно. Если не указать компилятору дополнительные опции, то он сгенерит код, в котором используются абсолютные адреса, поэтому так просто нельзя записать программу в произвольное место и перейти к ее выполнению. Однако можно заставить компилятор делать адресно-независимый код, для gcc это опция -fPIC, если я правильно помню.
Спасибо за ответ. Cortex-M4, таблицу векторов прерываний переносить можно.
> можно заставить компилятор делать адресно-независимый код, для gcc это опция -fPIC, если я правильно помню
Спасибо, попробую исследовать этот вопрос.
Не думаю что это так просто, ведь любой указатель это абсолютный адрес. Даже если компилятор сработает правильно во всем, то все равно без последствий это не обойдется.
Думаю что следует действовать иначе, хотя бы компилировать одновременно две версии для разных адресов.
Можно выделить в ОЗУ буфер на размер прошивки, и пока производится контроль целостности, хранить весь образ там. Но что если прошивка со временем раздуется до размеров, не позволяющих целиком вместить ее в ОЗУ?
Вычитал, что люди делают такие вещи с дополнительными флагами -fPIC -mno-pic-data-is-text-relative -msingle-pic-base -mpic-register=r10, и то у половины че-то там не работает. При компиляции размер тестовой прошивки с мигалкой и отладочной печатью в ITM вырос, там типа какая-то глобальная таблица смещений дополнительно появляется, из которой программа будет узнавать адреса всех указателей. Т.е. компилятор добавляет код для разруливания этой изменившейся адресации.
Я правильно тебя понял, что ты хочешь иметь одновременно две версии программы и иметь возможность переключаться между ними? Нужна ли тебе при этом возможность грузить новые версии не программатором, а через UART или еще как-нибудь?
По Ethernet. Возможно придется делать резервный канал через RS-422.
Я хочу по мере приема пакетов с новой прошивкой не сразу затирать старую версию (вдруг помехи, обрыв, потери, питание пропало), а записать ее в другой сектор флэша, а потом, убедившись, что все CRC в порядке, дописывать в конец сектора идентификатор с указанием, что эта прошивка актуальная. А дальше при перезапуске бутлоадер определял бы актуальную версию и загружал бы ее. А если бы загрузка новой прошла со сбоями, останется старая рабочая версия.
Компилируй две версии прошивки под разные адреса, а во флешку пиши только нужную в данный момент.
Т.е. каждый раз передавать две прошивки, а железка пусть сама разбирается, какая ей нужна?
Если программы линковать с разными адресами, кнопка естественно выбирает прошивку, как надо. Вот только прошивки из-за этого разные получаются.
Так создавай таблицу векторов прерываний в ОЗУ динамически, делов то. Но вообще проблема у тебя выдуманная, в чем сложность компилировать две версии с разными адресами и загружать только нужную?
>>425895
Не на всех stm32 нужно переносить таблицу векторов в ОЗУ.
ОПу надо сделать следующее:
1) научиться переходить по адресу на другую программу, как здесь https://www.iar.com/support/tech-notes/general/creating-a-bootloader-for-cortex-m/
2) перенести таблицу векторов прерываний либо в ОЗУ, если не можем через VTOR настроить или перенести в конфигурации линкера и настроить через VTOR
3) Ограничить в линкере диапазон адресов флеша, где может быть размещена прошивка
>Не на всех stm32 нужно переносить таблицу векторов в ОЗУ.
Уже было, на что он ответил что у него Cortex-M4.
>2) перенести таблицу векторов прерываний либо в ОЗУ
Ошибаешься, ему надо динамически ее пересчитывать, т.к. он хочет сами обработчики размещать с произвольным смещением. Можно и не переносить, а сделать для каждой программы по таблице для каждого смещения по адресу.
Но вообще он херней страдает, все это можно сделать намного проще и эффективнее. И мне кажется что он не ОП треда.
>>425918
Таблицы я не пересчитываю. Просто переношу адрес вектора в регистре VTOR. Похоже я не догоняю.
Правильно я понял, что все адреса обработчиков также нужно вычислить с учетом известного смещения прошивки в памяти? Но тогда мне нужно еще скопировать код обработчиков по новым адресам. Если с пользовательскими обработчиками я так делать умею, то с кодом Reset_Handler я не знаю, как это сделать. Это надо править файл стартапа и возможно скрипт линковщика. Этой магией я пока не владею.
И еще вопрос - допустим обработчики я перенес и программа начнет стартовать из ОЗУ. Как быть со всеми остальными указателями? Их же тоже надо пересчитывать или нет?
Помимо VTOR, нужно ещё в файле конфигурации линкера их перенести.
>молниеносный ногодрыг
Для этого асм не нужен.
Насколько я знаю, через предделитель можно вывести тактовый сигнал МК (PLL) на любую из ног.
>Хочу вкатится в разработку на stm32.
Так это же самая сермяжная мужицкая параша, а не передний край технического прогресса. Как раз для хлебушков.
Хули там в твоих кококонтроллерах? Прописал регистры, как макака, и все, хуже даже, чем в жс. И общаться ты там будешь, скорее всего, с нешарящими и тупыми постсовковыми долбоебами-радиолюбителями, если на хедхантере собрался искать (просто нешарящими - это программа-минимум и уже удача; обычно они не просто не шарят, у них еще и куча каких-то извращенных поверий и маняфантазий по теме, и все это на фоне просто запредельных ЧСВ и токсичности). Оно те надо?
Тру - это машобчик, ООП, графика, игры, софтвер инжиниринг.
Ну дык нечего торчать в Барнауле
Условно я хочу запускать задачу по внешнему прерыванию.
Я сейчас делаю так: освобождаю мьютекс внутри прерывания, задача берет мьютекс себе и в конце его не освобождает. Тем самым снова сама себя блокирует.
Спасибо за помощь
Я думал что мьютекс это и есть что-то вроде двоичного семафора.
Сейчас все заработало с двоичным семафором, но только после того как я создал его до конфигурации переферии и задач.
Подозреваю что в этом и была проблема моих зависаний
Ща местный красноглаз обоссыт твой универ и расскажет тебе где тулчейн зимует
С пивом покатит, у меня такая же.
Редактор похуже эклипса, зато отладка норм, куб оче удобная и наглядная штука.
Разве что у HAL документация через жопу написана, и в требовательных задачах может не хватить быстродействия, но никто не мешает инициализироваться кубом, а дальше в зависимости от ситуации дрочить регистры по мануалу или использовать тот же HAL/LL.
Олсо, атмеги менее всего заменяемая деталь, за год выдал не больше 5ти штук.
Пики хз для чего, но чего-то очень массового, т.е. дешёвого оборудование. Олсо, СТМ32 для совсем говно-фонариков и ир-стробов, которые делаюца тысячами в неделю.
Олсо, используют ардуины нано или майкро на антеннах, но хз какова их функция.
Он же просто кладовщик... Непонятно где, причем.
Это примерно как выслушивать мнение "домохозяйки" по этому вопросу.
>Олсо, СТМ32 для совсем говно-фонариков и ир-стробов
Ты просто открыл для меня новый мир!! Сейчас же заброшу возню с хуетой 746Дискавери и перейду на Ардуино_Мега. У ней Атмега 256!!! Я буду просто на острие оборонного прогресса
покормил бидораса
мошт ОНО (ардуино) лампочкой моргает на антенне (по ночам) чтоб самолёты не врезались-а ВЫ на кладовщика сразу взьелись
Как управлять скоростью вращения канального вентилятора для вытяжки через Ардуино?
Схему канального вентилятора в студию! А то может вообще он для этого не предназначен.
А у меня нет еще вентилятора, я только присматриваю. Вот нашел диммер, походу то что надо.
https://aliexpress.ru/item/32975095882.html
А на что там обращать внимание в вентиляторе, что бы он от диммера работал?
По ошибке заказал с алика CKS32F103C8T6 вместо оригинальной STM32. Попытки прошить ее с помощью программатора St-link/v2/01-0 что с OpenOCD, что без нее, оборачиваются неудачей. Пробовал менять в конфигурационных файлах некий адрес, а также менять конфигурационные файлы полностью на те, что нашел на гитхабе (ссылку потерял), ничего не помогло.
unable to connect to the target это программатор вообще не видит камень, у тебя тупо swd линии где-то оборваны
>По OpenOCD же.
Но при чем тут локалхост, если подключается по USB через ST-Link или по юарту через переходник? Это какая-то опенсурсная магия?
"Клиент" подключается к "серверу" OpenOCD, общаясь с ним по определенному протоколу, то есть, говоря, что именно надо зашить в микроконтроллер. А OpenOCD, в свою очередь, взаимодействует с драйвером программатора st-link v2. Теоретически можно проводить эту прошивку удаленно, да.
Веб-макаки дорвались до системного программирования не смогли обойтись без своих жаба-скриптов штоле?
Причем тут это?)
ты не знаешь, как общаются IDE и GDB/OpenOCD, да? Они связываются по TCP протоколу, и так было задолго до повсеместного распространения жаба-скриптов
у тебя либо прошивка отключает SWD, тогда выбери connection under reset
либо камень не имеет SWD или вообще пустышка
Я просто замечаю редкие проскакивания нитаких как все, которые стесняются купить на торренте кейл и не ебать себе голову, а любящие бряцать линупсами/эклипсами и прочей лабудой, постоянно не осиливающие их закрасноглазить. Короче, мне хватает мозгоебли с самим контроллером, чтобы не лезть в эти ебучие дебри.
В кейле все еще хуже.
cudeide это эклипс с плагинами от производителя, отладка работает из коробки, красноглазить особо негде
Кейл застрял в нулевых по внешнему виду и функционалу, такие как все сейчас используют clion
IDCODE для начала прочти, а то непонятно вообще что это за микроконтроллер. CS32 у меня читался и писался обычным JLink-ом без проблем, насколько я помню, только IDCODE не соответствовал. Но лучше, если есть возможность, купи в терраэлектронике или чипдипе нормальный микроконтроллер и перепаяй.
>>430454
>Кря!!!
Если это для тебя красноглазие, то поправить что-нибудь по мелочи в какой-нибудь опенсурсной программе и скомпилировать ее для тебя будет нереально. Там ведь мейкфайлы! Какой ужас! Конечно ты можешь написать что программируешь только микроконтроллеры, а для компов не пишешь ни строчки, но это уже ограниченность какая-то.
>и системы контроля версий тоже ненужное красноглазие?
Нет. Это нужный инструмент в отличии от этой детской ебли с опенсурсом в попытке доказать одноклассникам кокой ты кулхакир.
надо быть как все, а на самом деле - байтики в калькуляторе посчитал, прошивочку в блокнотике написал.
Так все наиболее популярные системы контроля версий опенсурсные. Причем графический интерфейс у них не предоставляет некоторых возможностей, которые иногда требуются и тогда приходится вводить команды руками, как ты выражаешься "красноглазить".
Один анон выше упоминал CLion, так он вовсе не опенсурсный, но CMake с ним использовать придется. Тоже красноглазие по твоему?
Почему именно линуксы с эклипсами тебя так напрягают? Ничего же не мешает писать код в любой IDE, а компилировать armclang-ом, если так не нравится gcc.
Если поменять бут мод джамперами, то вроде включается. Блин, в универе как-то без задней мысли кодились эти шимы на таймерах и ультразвуковые датчики
Ставь линукс и st-util
Проблема заключалась в том, что я не подрубил serial wire debug в cubemx. Надо было затереть память с другого джампера
но ведь это удобно
закона Ома для начала хватит, а когда будет не хватать, тогда и доучишь то, что надо
У меня прерывания срабатывают за полметра до концевика. Концевик расположен на расстоянии двух метров от stm32. Знаю закон Ома и правила Кирхгофа, а прерывания на пине случайным образом возникают. Что нужно почитать по этому вопросу?
Красноглазить часто приходится в отличие от тех же восьмибитных пиков где все инструменты под Винду заточенны.
Полнейший бред, аналогичный >>430454 Может это один анон?
Это не так, даже если брать для STM32 все опенсурсное. gcc одинаково работает и под виндой и под линуксом. make тоже работает под виндой. SEGGER или OpenOCD тоже кроссплатформенные. Остальные инструменты тем более будут одинаково работать под любой ОС. Нет там никакой "заточенности" под ляликс, даже если брать все опенсурсное.
Про FPGA тоже все не так. Квартус и вивада сейчас есть под обе операционные системы.
>в отличие от тех же восьмибитных пиков где все инструменты под Винду
Можно использовать SDCC, при желании.
> Что нужно почитать по этому вопросу?
Очевидно, reference manual, главы про gpio и прерывания
Для начала покажи, как ты настраиваешь прерывания на ноге
Ковыряю stm32f103 и его таймеры в режиме захвата импульсов. Понимаю, что можно назначить на один пин мк два канала (direct и indirect) и по прерываниям на каналах читать регистры, куда каналы сохраняют счетчик по фронтам/спадам и высчитывать разницу. Но это блять занимает два канала на один сигнал, сука! А у меня таймеров (и пинов) и так не хватает, и вообще внутренний еврей подавился жабой, поэтому внимание, ебанутый вопрос:
можно ли реализовать измерение длительности импульса на одном канале таймера? Ковыряю HC-SR04, хочу схитрожопить.
Фантазия такая:
1 настраиваю таймер (пусть будет TIM3): предделители, предел счета все дела, настраиваю канал (пусть будет CH1) на захват по фронту. Включаю прерывание и обработку прерываний. Включаю таймер.
2 на пин приходит сигнал лог 1, т.е. фронт, генерится прерывание
3 в обработчике прерываний смотрю какой бит прерываний появился. Если это прерывание по появлению сигнала, а не по переполнению счетчика, то обнуляю регистр CNT, перенастраиваю пин на обработку по спаду сигнала и запускаю счетчик
4 когда сигнал уходит, генерится прерывание. В обработчике считываю регистр CNT (это и будет длина импульса) и обратно перенастраиваю пин на обработку по фронту.
Будет такой подход работать или я где-то наебался?
Ты как-то сложно всё описал. Я просто запускал/останавливал таймеры по прерыванию с ноги. Но может и я не прав
Попробуй на отладочной плате, для одного должно прокатить. Вроде бы кто то уже делал такое, поищи по форумам, посмотри в RM и timer cuckbook.
Только настраивай захват в регистр CCRn, input capture, он зафиксирует значение cnt ровно в момент прихода импульса. И счетчик лучше запустить сразу по trig и не останавливать, иначе сразу добавится неизвестная задержка вызова прерывания. По прерыванию считываешь CCR и по твоим условиям меняешь полярность захвата, у результата делаешь обработку переполнения, там еще флаги соответствующие есть.
Если не покатит, можно использовать два канала.
Единственно, с двумя и несколькими сигналами лучше dma, как то мерял скважность сигналов двумя каналами и забирал результат по таймеру, при постоянной скважности были периодические небольшие выбросы.
Заработало, таки победил.
Сделал так:
https://pastebin.com/gPAr3dwd
В итоге меряет число тиков между фронтом и спадом, может кому пригодится, хотя точность на обработку прерывания теряется немного.
Есть три стула:
1) заморочиться с микросхемой часов реального времени с интерфейсом I2C и брать показания с неё - не знаю, сколько может занять считывание показаний по шине.
2) запустить ещё один таймер, но даже 64-битный таймер не сможет считать больше 5 минут. Не уверен, что правильно посчитал, но перепроверю позже.
3) уже есть таймер отмеряющий 100 мс - вести счёт на его основании, отмеряя счёт по 100мс, но с минутами... у, это ещё тот пиздец.
Как будет лучше?
Что пиздецового в третьем варианте? Начал отсчёт, обнулил переменную, надо закончить, прочитал переменную.
Без троллинга, просто обычно всегда так делаю.
Есть ещё rtc, может там как-то замутить можно?
Не с того бока заходишь. Какое разрешение то нужно?
Наносекунды, пикосекунды джиттера, микросекунды, миллисекунды, секунды?
Даже если брать обоссаный 16 битный таймер и тактировать его часовым кварцем на 32 килогерца - у тебя будет 2 секунды с разрешением 1/32768, те где-то 30 микросекунд.
Поставь прескалер /32 = получишь 64 секунды счета и разрешение 1/32768*32 = где-то 1 миллисекунда. Бери православный 580ВИ53 - там целых три 16-битных таймера.
>1) заморочиться с микросхемой часов реального времени с интерфейсом I2C и брать показания с неё - не знаю, сколько может занять считывание показаний по шине.
В некоторых RTC есть режим "будильника" и внешний выход под него. В новых версиях STM32 тоже есть режим будильника в модуле RTC. В чем проблема его использовать? Что за камень то используется или планируется?
Сделай таймер периодом в 100 мсек и в прерывании переполнения счетчика заведи инкремент uint32_t переменной. Тебе этого надолго хватит. 4 294 967 295 по 100мсек это 429496729.5 сек это около 4970 суток лол.
Еппром же затрется до дыр, если его перезаписывать чаще раза в час. Ставить большой конденсатор по питанию, отлавливать просадку по питанию внешним компаратором с гистерезисом и выделять отдельную ногу под прерывание? Есть ли способ проще?
Даташит референс мануал хоть раз открывал?
Во всех STM32 есть немного оперативной памяти, которая питается от вывода Vbat, который питает внутренний RTC. Вот и еби эту память перезаписями сколько хочешь.
Если совсем шиза одолевает - через тот же вывод PC13 можно аппаратно давать команду на стирание памяти в которую пишешь свою статистику что бы ее никто не стырил.. Не забудь при этом отключить отладку по JTAG и SWD. Вот смеху то будет..
На короткий промежуток времени да. Я просто по старой работе помню что в DVD ресиверах Samsung часы и энергозависимая память с пользовательскими настройками питалась ионистором. Можно было выключать из розетки на довольно долго, ни часы, ни настройки не сбивались. Давно это было. Бывало эта система сбоила, резистором разряжаешь ионистор и включаешь-работает. Но часы с нуля и все настройки по дефолту.
Сойбой ты, ска! Иди пиши на говне JS! И последнюю версию гейакта не забудь, фем-квир-куколд!
Ты чего порвался?
Реально ли с использованием __qadd16() ускорить суммирование элементов массива, длина которого не всегда кратна двум?
Суммирование сейчас:
int16_t *signal;
uint32_t sum = 0;
for(int i = 0; i < count; i++) sum += signal;
>__qadd16()
Я не настоящий сварщик, но ведь прийдется сначала преобразовать элементы массива в джва массива вида val[x] -> val[x][15:0] и val[x][31:16] ?
Ебать я опозорился. Оно само раскидывает.
В чем минусы, подводные?
Закинул на blue pill, в принципе идея понравилась, ф103 л053 увидел без проблем л433 не захотел SW-DP scan failed!
Начинаю перекатываться с avr-ок на stm32, все нравится кроме одного: гребаная STM32CubeIDE не умеет без пердолинга в С++. Самое смешное, когда я запускаю IDE и создаю проект с нуля, выбираю камень, указываю что хочу C++ проект блеать, настраиваю периферию в кубике, и....генерируется сишечка. Вот что у этих долбоебов-разработчиков IDE в голове? Хлебушек? Нахуя опция "хочу С++ проект" если один хуй генерится С? Чтоб блять у них всегда в пачке с надпитью "кофе" пурген был.
Посоветуйте IDE чтобы можно было нормально кодить на С++, мутить классы и тд. Да, можно и в STM32CubeIDE напердолить #ifdef __cplusplus extern "C" { и прочее, но что-то разочаровался я.
Тоже подумываю о перекате с простых 8 битных авр на стм32. Расскажи, какие подводные камни встретил? Почему выбрал именно эту среду разработки? Ебля с ООП на крестах обусловлена объемами кода?
>Посоветуйте IDE
В какой IDE писал для AVR, в той и для STM32 можно попробовать.
>Да, можно и в STM32CubeIDE напердолить
Что? Этож эклипс обыкновенный, с плагинами. Откуда в эклипсе могут быть проблемы с цпп? Да там практически любой компилятор любого языка программирования можно использовать, если мейкфайлы использовать.
бери да пиши на с++ поверх того кода, что тебе сгенерировали, тупо удаляешь main.c и добавляешь main.cpp с static int main
Не работает так. Решил я замутить библиотеку. Создал cpp и chh файлики, написал в нем слово "Class" а компилятор сказал что такого слова не знает. Гугл дал понять, что в КубоИде можно напердолить настройки компилятора чтобы и С и С++ понимал, но это и есть пердоленье.
Я хочу чтобы в пакете с надписью "хлеб" был хлеб сука, а не дрожжи мука и стакан воды. Если блять кодогенератор спрашивает "Хотите С++ проект?" то ответив "Да" я ожидаю получить С++ проект с поддержкой всех функций С++, а не обосрамс компилятора, который слово "Class" не знает. Понимаешь суть моей претензии?
Я так делал. И когда мне понадобилось добавить еще и RTC, то после тыканья в кубе и кодогенерации снова появились main.c Можно конечно завести два проекта: один весь такой С++, а второй чисто для натыкивания в кубе чтобы смотреть инициализацию периферии. Но нахера такое в 21 веке? Вот я и ищу варианты, чтобы проект С++ был действительно С++. Я и пердолиться готов, если в аннотации к ИДЕ будет написано "Готовься пердолиться, вот инструкция", а не как в говнокубе.
>Понимаешь суть моей претензии?
Не понимаю зачем вообще сразу хвататься за IDE. Пиши мейкфайлы, в нормальных проектах под твои восьмибитные ардуины так и делают. Смотри к примеру код известного тестера транзисторов или код grbl, все по человечески сделано, также и ты делай.
>Если надо будет за раз передавать больше 8 байт - то готовься к пердолингу
Уже давно умные люди придумали CAN FD, с возможностью передавать за раз до 64 байт, а тебя в твоей избушке и вчерашний шторм не разбудил.
Если бы было всё и сразу, то программисты были бы не нужны.
>твое дерьмо будет ГАРАНТИРОВАННО доставлено единым куском.
А в RS-485 разве не так? Хозяин по очереди опрашивает рабов на линии, и сообщение от нужного раба будет Г А Р А Н Т И Р О В А Н Н О доставлено единым куском до мастера. И никакого авторазрешения коллизий для этого не нужно.
RS485 это просто интерфейс. Грубо говоря микросхема и уровень напряжения сигналов. А какой протокол ты этими сигналами реализуешь - зависит от тебя. Например:
1 Modbus RTU/ASCII по RS485 просто отправляет пакеты. Программисту приходится самому решать, как в мастере реализовывать проверки, что записанные данные действительно записались (считать в следующем цикле и сравнить). Приходится решать как контролировать потерю связи, хотя в протоколе есть какие-то коды функций при возникновении ошибок, но редко кто из производителей реализовывает у себя полный модбас со всеми функциями. Приходится самому решать как реализовывать очередность запросов если мастеров несколько.
2 Profibus DP тоже работает на шине RS485, но там уже на уровне протокола реализованы все недостатки модбаса выше. Написать самому такой протокол на МК я хз надо каким быть уберкодером. Такие люди врядли будут задавать вопросы про протоколы связи.
Скажу очень коротко, дальше сам додумывай.
В CAN фреймы с адресом получателя и полем данных от 0 до 8 байт, которые передаются одним куском без каких-либо пауз внутри особо умные припомнят 1 бит тишины когда рабы должны ответить что поняли Господина что гарантирует доставочку одним куском, а не склейку из кучи рассыпающихся отдельных байтов.
В RS485 (UART) передача идет по 1 байту. Пролетающий мимохуй может дристануть левым байтом в линию и все поломается. В CAN же после определения приоритета (разрешения коллизий) всякая шпана затыкается и только Господин вещает в линию, а рабы молчат в тряпочку и слушают.
Совсем тупо - посмотри на Ethernet. Там фреймы по 60+4 байт. Минимум. Даже если тебе надо передать 1 байт полезных данных - у тебя всегда будет передаваться фрейм из 64 байт. Если надо больше данных передать - фрейм может быть расширен до 1518 байт, из которых вычтя служебное говно остается около 1450 байт под полезные данные которые будут доставлены одновременно и без разрывов. Если же 2 килобайта данных слать - то данные прилетят в 2 захода - 1450 байт и 550 байт.
Суть уловил? CAN как и Ethernet - единая неделимая пачка данных передается за раз в отличии от рассыпчатых байтов в RS485 (UART).
Чето сложно предлагаешь.
Я бы ебашил таки Modbus, ибо:
1 протокол отлично описан и стандартизирован
2 много промышленный датчиков его умеют
3 проблемы лишних сигналов/байтов/пердежа в линиях решаются CRC
4 сам интерфейс устойчив к наводкам за счет передачи по витой паре.
Но блять это уже какая-то промышленная автоматизация получается.
Это же эклипс, не лезь, оно тебя сожрет
>Решил вактиться из АСУ в Embedde
Так надо наоборот - разобраться, как всё работает в ембедед, а потом идти в асу.
В embedded всё печально с зп-хой и карьрным ростом.
Это еще и семейство протоколов. 485 ничего кроме интерфейса не подразумевает.
Короч. Предлагаю чего, могу в личке помочь с вкатом в МК за помощь с пониманием АСУ ТП.
Я в нем вообще ноль, абсолютный, но интересно всегда было.
В МК я далеко не профи, прям сильно, много дыр и нехватки знаний, но даже могу немного в коммерческую разработку(ага, унитазы автоматизирую).
Не ардуинщик
асутп изи после ембеддед, покупаешь овен на кодесисе (только с прошивкой через езернет типа такого https://owen.ru/product/plk100_150_154, ком-порт прошлый век),осваиваешь, у них все разжевано, на русском и куча примеров, потом уже покупаешь на авито б/у или китайский клон сиеменс/AB и осваиваешь его.
модули расширения эмулируешь компом, благо эмулей модбаса на комп хватает
Мне больше эдакая общая вводная и вводная о окружении нужна, чем непосредственно частности.
Вообщем не о том, как программировать ПЛК, а о том как работать на профессии.
сидеть у тендерщиков собирать шкафы или сидеть на заводе чинить гаечным ключом всё, что сломалось?
Есть останки железок (модули ввода 7000 серии от ICP DAS) и сервер телемеханики от ЦентрЭнергоАвтоматика. За сисечки-писечки можно достать STM32 и попробовать сделать устройство, отвечающее по протоколу DCON или Модбасу. Есть шлюз CANOPEN в DCON ( https://icp-das.ru/catalog/i-7231d ). Оно тебе надо? Ну посмотришь, потыкаешь как оно на минималках настраивается на конкретном оборудовании, а дальше?
Я только с гОвеном -то и могу помочь. Живу в ебенях, нормальные вендеры нас стороной обходят, поэтому клепаем автоматику для ЖКХ на овне и сегнетике, скоро мб попытаемся на сименс лого. Но без нормального сотрудничества с вендерами и продовацами кад-сисметам ничего не добиться. работа на пиратском софте удручает.
Внешне, кстати, ультраняшные.
Заказал ради тайп си после видоса, лежит.
https://www.youtube.com/watch?v=QCdnO43RBK4
Что с ней делать не знаю да и не умею, в STM32 только начинаю разбираться.
O kurwa! Да тут же тупезь!
Что вы делаете с 256/512кб прог флэша? Мне за более 10 лет махарай-строя атмеги с 8 кб лишь несколько раз не хватило, 16-32 кб меги выручили. Это же нереально высрать столько кода, кроме как всякие картинки, иконки, шрифты и аудиозаписи в памяти хранить.
Питон можно установить туда, как вариант. Будет даже маловато.
Там же на обратной стороне есть посадочное место для spi флешки ещё.
https://github.com/micropython/micropython/tree/master/ports/stm32/boards
Иди нахуй, анимэпидар сраный.
Да все уже поняли, что ты не умеешь в оптимизацию.
Дилдодрон с гигом звуков из хентая и гачи-ремиксов на sd-карте, управлением коптером, ИИМ + GPS, камерой, дилдо с подогревом, и анимированным лицом Черного Властелина на 6" lcd.
Влезу в разговор
У меня устройство с двумя МК, которые непрерывно общаются по modbus между собой на высокой скорости.
Прикреплен графический монохромный дисплей 128*64 с меню, которое содержит более 50 экранов
На каждом МК есть внешний rs-485 для внешнего modbus с несколько десятков регистров
На главном МК висит sd карта с fatfs в которую пишутся отдельные осциллограммы с каждого МК по 2000 точек (2 байта точка) по срабатыванию и отпусканию сигнализации, при этом почти одновременно может сработать до 4-5 событий, и все надо успеть сохранить и записать.
В ту же карту пишутся события в архив событий, одновременно может появится скажем до 10 событий
При этом на каждом МК со скоростью 50кгц крутится цифровой фильтр и расчеты действующий значений пульсаций тока и напряжения
Наверное можно умудриться уменьшить раз в 5 код и запихать все это в 8кб, но зачем заниматься без необходимости таким геморроем?
Обычный модульный проект уровня Ардуино. Не увидел чем тут хвастаться, весь код заимствован.
>>435931
Ких фильтр хоть и требует много процессорного времени, сам по себе вряд ли больше ста строк кода занимает. Остальное, согласен, требует много места.
Короче, вывод: много низкоуровневого кода нужно если контроллер выполняет много разных задач.
Анимешникговноед, я тебе напоминаю, что ты, ебучая линуксопрыщеблядь, что ты пришло в тред к господам электронщикам и сереш тут. Ещё раз, уходи в свои хипстерские скриптотреды отсюда.
Спасибо за пример.
Это какой-то промышленный регистратор данных?
Если этот проект под подпиской о неразглашении, то не отвечай, лол.
>Наверное можно умудриться уменьшить раз в 5 код и запихать все это в 8кб, но зачем заниматься без необходимости таким геморроем?
Так вроде речь изначально шла про домашние махарайки, а ты описываешь промышленное решение. Зачем? Вроде бы такой вумный дядька, а логика хромает.
Где написано сколько в stm32 AP и какое у них назначение?
Нужно ли jtag переключать в swd при инициализации, или он по умолчанию?
что за адскую хрень ты там творишь, что тебе не хватает функционала gdb для стлинка?
Свой программатор делаю, у меня хобби такое.
Конечно бомбит когда первоклашка в тред заходит.
Чем бы дитя не тешилось.
Stm32f373, взяли потому что нужен был сигма дельта АЦП. У меня по три канала такого АЦП задействовано у каждого МК для измерения одного параметра у каждого МК
Есть другой проект с f407 но там попроще с вычислениями, но надо будет реализовать usb host и наверно ethernet, плюс в идеале накатить freertos
Блять, точно, прочитал неправильно. Да, споймал меня.
А хуле ты хотел, час ночи, ты пидор. Я почти сплю.
И вообще, будь, пожалуйста, более мужественным в этом треде. Поменьше конченого ня-сленга и говнимешных тёлок, побольше маскулинности. Мы тут серьезные люди, а не педики какие-то.
Мимо, я против оффтопа и аватарок, хоть и тоже анимешник.
Передираю либу для SPI Flash, написанную для STM32, под другой МК.
Флешка: S25FL032P0XMFI011
https://www.cypress.com/file/196861/download
Пока удалось считать JEDEC ID.
Но чтобы что-то в неё писать \ читать - надо знать её параметры.
В либе заполняется структура, для имеющейся флешки поля почти неизвестны:
s25flxxx.BlockCount = ???
s25flxxx.PageSize = 256
s25flxxx.SectorSize = ???
s25flxxx.SectorCount = ???
s25flxxx.PageCount = ???
s25flxxx.BlockSize = ???
s25flxxx.CapacityInKiloByte = ???
Помогите, плез, найти значения полей.
Я нашёл только PageSize. Больше ничего в глаза не бросилось.
32 Мбит = 4 МБ = 4096 КБ
1 сектор = 64 КБ = 65536 Б
весь флеш/размер сектора = 4096/64 = 64 сектора всего
1 страница (page) = 256 Б
размер сектора / размер страницы = 65536 / 256 = 256 страниц на сектор
Судя по скриншоту размер блока строго в 16 раз больше сектора. Поэтому
1 блок = 1 сектор 16 = 64 КБ 16 = 1024 КБ
Кол-во блоков = кол-во секторов / 16 = 64/16 = 4
Попробуй, может правильно. Сам никогда не запускал флешки.
Рекомендую забить только числовые параметры, формулы не трогать пока.
шиз, кекаю с тебя на весь дом:з
тебе нужно было репортить СВОИ посты, а не мои, дурачок:з
а теперь все узнали, что у тебя сильна-сильна пригорело:з
а позорные постики, которые ты понапостил тут, остались навсегда:з
РРРЯЯЯ МАМ 32кб НИНУЖНА Я СКОЗАЛ
Порт FastLED отсюда https://github.com/evq/FastLED работает, но выжирает весь флеш нахуй (72МГц тактовой же, а он асм генерирует).
>У блюпилл 64кб
Не совсем так. Там 128 кб, только в документации этого нет и СТ соответственно не гарантирует работоспособность. Скорее всего STM32F103C8T6 это 103CB у которого провели не все тесты. Однако для разовой самоделки это скорее всего не важно.
>наставь нопов
Не лучше ли ПДП задействовать?
>Не совсем так. Там 128 кб
>только в документации этого нет и СТ соответственно не гарантирует работоспособность
Это значит, что там 64кб, дурачок :з
>ПДП
Визжишь про память, бака, а оперативы тебе не жалко под твой DMA? Да и нахуя, сучичька? :з На нопах делаеца за полчаса от силы, ему хватит :з
Я думаю, можно заюзать ПДП контроллер, НО "подкидывать" данные в буфер по чуть-чуть, по half-transfer (да или даже по full transfer и перезапсукать ПДП) (если нет подводных, конечно).
>Это значит, что там 64кб, дурачок :з
У тебя детектор не работает, я тебе в первый раз тут отвечаю. А потом, как это может что-то значить для мигалки светодиодами, да еще на китайской плате в которую китайцы могут припаять вообще что угодно? Китайцы тебе вкорячат в "блюпилл" свой клон с кривой маркировкой вместо STM32, о каких гарантиях вообще можно говорить?
Предполагаю что такие нездоровые фантазии у тебя от японских мультиков.
Пример именно такой вроде был у самих стм. Сомнительная хуйня, слишком много ебли, если новичку в реальный проект.
Хм. Ну да, ебля тут 100% будет.
Мб, тогда таймеры + isr (в них и задавать значение для следующего бита значения)?
Да, я понимаю, в прерываниях работать не комильфо, конечно, но все же...
Дрочую неистово не писюн. Сидел под факинтошем обратно хочу, все найс работало. arm-none-eabi-gcc работал на ура. st-flash (texane) тоже хорошо работал.
Какой иср, лолачька, какие таймеры? с: Там же наносекундные интервалы, десу. :з Ты решил зайти сюда потралибасить, анончик, но это мы кекаем с тебя, глупенький :р
А разве нельзя генерить интервалы по 400ns-800ns таймером, если камень тактировать 72МГц?
В чём разница между видами плат Nucleo и Discovery(кроме цвета, конечно)? Какую лучше взять, чтобы поиграться?
В нуклео как правило камень, пара светодиодов, кнопок и внешние интерфейсы типа usb и eth. А всё остальное подключаешь к гребёнке сам. На диско к этому набору ещё идут всякие акселерометры, дополнительная память, экранчики.
1280x720, 0:35
Два серво SG90 и stm32f030f4p6 двигают лазерную указку по траектории с рандомными точками. Котейка теперь довольна и не бесоебит по ночам.
Ого... Окей, анон. Не знал про кошек...
Большое спасибо за предупреждение. Буду в курсе.
Добра.
Хуя отговор очка, гречняша:з
Как до дела доходит - то собака у них сидит, то жопа не вытирается, то водка невкусная, то труханы прохудилися:з
Можно, по идее, это в обратную сторону закреплять: поносилась кошка за указкой как следует — получила любимую нямку. Наоборот, будет ебанутая от счастья за лазером носиться, условный рефлекс же, как у собаки Павлова.
Я в курсе, анон, но спасибо за предупреждение.
Лазер включаю минут на 10-15, не больше. Даже в проге МК таймер стоит отключаться через 15 мин.
А потом даю кошке реальную игрушку разодрать в хлам, клочки по закоулочкам, вот это все.
Какая отговорочка, вась?
Вась, пойми, у других людей действительно есть работа и другие дела в жизни. Да, есть люди которые не смотрят аниме 24/7 как ты, а работу работают и жизнь живут! Прикинь!)))
Да. Вот и я о чем.
Я не вижу, на самом деле, причин, по которым прям вот нужно исключительно херачить именно нопами и больше ничем другим.
Че-то мне кажется, что этот манямешник жирный тролль. Либо же потребление в аниме в таких количествах вызвало у него органические изменения мозга, лол
Маничка, ты драматизируешь ситуацию, няш:з Есть няши, которые и работку поработать, и поняшиться под пледиком под аниме, и музачку послушать, и погулять, и стмку поковырять успевают:з И еще минутка остается свободная:з А ты, бака, даже стмку не можешь запрограммировать:з
Так надо ставить перед собой более скромные цели, на уровне того чтобы посмотреть аниме и помигать светодиодиками. Тогда наверняка будешь успевать.
В жопе у своего настоящего отца - соседа по лестничной клетке поковыряй, пидорас анимешный.
Что вобще, блядь, происходит? Где ебаный мочух?
>поносилась кошка за указкой как следует — получила любимую нямку.
Так чего ты ждешь? Дорабатывай своего робота блять.
Мне кажется это не много не так работает.
Что это скорее как когда пытаешься почесаться и не чувствуешь эффекта.
Но дело твое.
В нормальном режиме - успеваю ещё и как.
Но у меня тут слегка авралы, шо по работе, шо по жизненным делам :'(
Зоэбало, но выберемся.
>>436861
>>436866
>>436907
Хуя гречняшки закококали:з
А все элементарненько обстоит, никаких секретиков: кто больше делает - тот больше успевает, няши:з
>>436852
Можно и не нопами, анончик:з Но нопами легче всего, хуяк-хуяк и готов вариантик:з Я так и делаю у себя, на 72МГц времени вагон:з
>>436829
Хех мда, это хорошо, что ты не додумался стримики с донатами пилить. Вот это у неки случилось бы попадалово :с
Хаб с внешним питанием используй, это подсветка экрана столько выжирает. Либо просто павербанк рядом в другой разъём воткни, либо через Y кабель.
Ясен хуй если нет полноценных действий с константами, то любые битовые операции займут 2-3 регистра и 5-6 команд вместо 1 регистра и 1 команды.
Теперь ясно нахуя вам столько регистров.
В stm8 всего 3 регистра и их хватает, ведь я могу просто указать маску чтобы сбросить биты.
А сейчас вставил элемент в двусвязный список за 4 команды, как в x86, и должен признать, что этот ассемблер не безнадежен.
>Прихуел
Почему тебя это удивляет? Это RISC а не CISC.
>ассемблер не безнадежен.
Зачем трогать ассемблер руками? Ну кроме как для общего развития и каких-то крайне редких случаев?
Ассемблер проще.
В си нужно шаманить, учить как ведут себя какие-то васянские типы для каждой новой архитектуры, изучать флаги компилятора и линкера, изучать ебучее api стандартных библиотек, ебаться с переопределениями типов каждый раз, искать А КАК ЖЕ ТАМ В ЕБЕНЯХ определен адрес стека, а как же мне здесь прерывание определить, а что это за константы ебучие хуй поймёшь, если в даташите совсем другое что-то.
И вот ты лезешь в инклуды, лезешь в исходники. А жизнь проходит.
Все это совершенно лишняя для мозга информация для меня. Мне только светодиод подключить и пару простых протоколов реализовать.
Все эти сишные фишки типа доступа к массиву и циклов легко заменяются вызовами, если нужно.
Только арифметику в одну строчку конечно не сделаешь.
И код не перенесешь. Но код и на си так просто не перенесешь. Все равно весь проект перелопатишь.
Ну да, вычисление факториала там.
Но во встраиваемых системах такого кода меньше чем аппаратно зависимого.
Все равно же садишься и делаешь обертки, обертки, обертки.
В самом мк очень слабая подтяжка, на 100кОм обычно, она плохо работает с сильными помехами. Нужно внешнюю подтяжку делать резистором на 10к или меньше.
Хз, я ассемблеро, но обычно советуют ставить volatile аппаратно зависимым переменным наподобие итератора цикла в задержках.
Давай подробности.
>У меня код с оптимизацией работает вообще неправильно.
А не ассерты ли какие-то вкидываются у тебя? В которых ты по случайности вычисления делаешь в дебажной версии?
Собери из модулей что тебе нужно.
Пизда
Если ты не хочешь ничего разводить там, никаких плат там, то в этом треде тебе только с перламутровыми а ты в картинках загугли помогут.
Сорри, чел, за такой противный ответ, но тут, в тредах /ra/, собираются люди, которые любят конструировать аппаратуру. Добра тебе.
А если по делу - купи все по отдельности, соедини все проводами и разъёмами dupont, чего как маленький...
Из модулей, если дохуя быстро надо - возьми подходящие dip/soic/sop/sot макетки, спаяй на них недостающие схемы и подключи к bluepill, часто так делаю.
Увы, нету :(
А источник знаний о названиях этих всех разъемов - процесс гуглежа, в т.ч. по картинкам.
Никто не кинул.
Наваял говна, и оно не лезет в blue pill, флеша надо килобайт 300. У ST резко дороже становятся контроллеры, но вот например ESP есть вполне годные (но у меня код под ARM заточен)
О, благодарочка!
>Надо чтобы распаяно уже было на макетках удобных в обиходе
Ардуинщик что ли? Ну тогда https://aliexpress.ru/item/1005001774599333.html
>Ардуинщик что ли?
Погроммист, мне надо проверить что мой софт работает, а не готовую конструкцию собрать
Еще есть Raspberry Pi Zero, в три раза дороже и не микроконтроллер, но тоже может сойдет для чего-нибудь.
>Погроммист
Я не из этих.
>мне надо проверить что мой софт работает, а не готовую конструкцию собрать
А что тебе мешает этот софт запускать на компе? Учитывая что ты не написал требований к периферии. Или ты на ассемблере там все написал?
1. В чем отличие от ArduinoIDE? Мне например рассказали, что CubeIDE это CubeMX и Eclipse. Ну и вместо эклипса можно использовать любую другую иде, а куб вообще не обязательно использовать. Так что такое куб? Что за генерация кода после настройки ног?
2. Можно ли прошить бутлоадер на ту же блек пилку и заливать код через кубиде? Я в опциях загрузки видел только SWD и JTAG
3. Подкиньте какое-нибудь объяснение, как работает RTC и как его использовать
4. Что такое DMA, зачем и нужно ли мне париться, если я собираюсь программировать только с HAL, не дроча регистры?
Блять! Нет, я в глаза ебусь, сорян
>1. В чем отличие от ArduinoIDE? Мне например рассказали, что CubeIDE это CubeMX и Eclipse.
Правильно рассказали. ArduinoIDE это на уровне блокнота, а в IDE кроме редактора кода имеется множество полезных и не очень мелочей, таких как анализатор кода, автодополнение, рефакторинг и множество другого.
>Ну и вместо эклипса можно использовать любую другую иде
Это тоже так, только стоит добавить что не обязательно использовать IDE, код можно писать в любом текстовом редакторе.
>Так что такое куб? Что за генерация кода после настройки ног?
Если ты сделал мигалку, то как ты мог не заметить, что куб нагенерил кучу кода? Это код для настройки периферии микроконтроллера.
>2. Можно ли прошить бутлоадер на ту же блек пилку и заливать код через кубиде? Я в опциях загрузки видел только SWD и JTAG
Там бутлоадер в масочной ПЗУ (не перезаписываемой) из завода, куда тебе еще один? Зачем вообще тебе это нужно, когда есть SWD? Разумеется никто не запрещает написать свой бутлоадер, который сможет что-то еще, например обновляться с SD карточки. Но тебе это зачем?
>3. Подкиньте какое-нибудь объяснение, как работает RTC и как его использовать
RTC это всего лишь еще один таймер, если ты про то что внутри микроконтроллера. Можно использовать для часов, но не нужно, т.к. точность будет так себе, потому что это не TCXO. А отсчитывать временные промежутки проще другими таймерами. RTC может быть полезно для энергосберегающих режимов, чтобы микроконтроллер периодически просыпался по сигналу от RTC.
>4. Что такое DMA, зачем и нужно ли мне париться
Это штука, которая перекладывает байты или слова/полуслова из одной области памяти в другую, без участия ядра процессора, которое в этот момент может делать что-то еще. Например оно может автоматом перекидывать данные из периферии в память. Оно нужно в основном когда из периферии нужно забирать данные (или наоборот класть) очень быстро, когда по прерываниям можно не успеть.
>не дроча регистры?
А вот это зря. Ладно еще, может быть в самом микроконтроллере ты сможешь не касаться регистров, ну а подключишь что-нибудь через I2C или SPI?
Мне кажется тебе стоит как следует изучить ардуину для начала, чтобы регистров не бояться. Советую разобраться с регистрами и прочим в AVR, тем более что там не так много всего и поэтому это не сложно.
>1. В чем отличие от ArduinoIDE? Мне например рассказали, что CubeIDE это CubeMX и Eclipse.
Правильно рассказали. ArduinoIDE это на уровне блокнота, а в IDE кроме редактора кода имеется множество полезных и не очень мелочей, таких как анализатор кода, автодополнение, рефакторинг и множество другого.
>Ну и вместо эклипса можно использовать любую другую иде
Это тоже так, только стоит добавить что не обязательно использовать IDE, код можно писать в любом текстовом редакторе.
>Так что такое куб? Что за генерация кода после настройки ног?
Если ты сделал мигалку, то как ты мог не заметить, что куб нагенерил кучу кода? Это код для настройки периферии микроконтроллера.
>2. Можно ли прошить бутлоадер на ту же блек пилку и заливать код через кубиде? Я в опциях загрузки видел только SWD и JTAG
Там бутлоадер в масочной ПЗУ (не перезаписываемой) из завода, куда тебе еще один? Зачем вообще тебе это нужно, когда есть SWD? Разумеется никто не запрещает написать свой бутлоадер, который сможет что-то еще, например обновляться с SD карточки. Но тебе это зачем?
>3. Подкиньте какое-нибудь объяснение, как работает RTC и как его использовать
RTC это всего лишь еще один таймер, если ты про то что внутри микроконтроллера. Можно использовать для часов, но не нужно, т.к. точность будет так себе, потому что это не TCXO. А отсчитывать временные промежутки проще другими таймерами. RTC может быть полезно для энергосберегающих режимов, чтобы микроконтроллер периодически просыпался по сигналу от RTC.
>4. Что такое DMA, зачем и нужно ли мне париться
Это штука, которая перекладывает байты или слова/полуслова из одной области памяти в другую, без участия ядра процессора, которое в этот момент может делать что-то еще. Например оно может автоматом перекидывать данные из периферии в память. Оно нужно в основном когда из периферии нужно забирать данные (или наоборот класть) очень быстро, когда по прерываниям можно не успеть.
>не дроча регистры?
А вот это зря. Ладно еще, может быть в самом микроконтроллере ты сможешь не касаться регистров, ну а подключишь что-нибудь через I2C или SPI?
Мне кажется тебе стоит как следует изучить ардуину для начала, чтобы регистров не бояться. Советую разобраться с регистрами и прочим в AVR, тем более что там не так много всего и поэтому это не сложно.
> Если ты сделал мигалку, то как ты мог не заметить, что куб нагенерил кучу кода?
Я кроме main.h не залазил в другие файлы
> куда тебе еще один?
Чтоб можно было заливать код через USB, без ST-Link
> ну а подключишь что-нибудь через I2C или SPI?
В ардуине обходился либами и тут надеюсь на то же. Я взял стмку для поделок, а не разбираться в устройстве микроконтроллеров
>>мне надо проверить что мой софт работает, а не готовую конструкцию собрать
>А что тебе мешает этот софт запускать на компе?
Ничего, и я его там запускал первоначально в qemu. Но задача стоит написать под контроллер.
> Учитывая что ты не написал требований к периферии.
Один выход SPI и одна кнопка.
и прошивка бесплатная.
Никто не пробовал делать?
Не тратил еще кучу времени, но волосики на голове шевелятся от того что в интернетах пишут.
Итак, rtc. Обрезал страпы, запаял кварц 32768, провел инициализацию rtc. Часы идут, но после первого холодного запуска останавливаются через десятки секунд. После ресета кнопкой идут хорошо. Так же останавливаются от помех по питанию. Это что за нахуй за пиздец? Пишут что не все кварцы подходят. Честно, перепробовал десяток и в конце концов взял из совместимого списка, похуй. Да, конденсаторы к кварцу ок, все дорожки от проца к кварцу не длиннее сантиметра, лишних нет.
Второй вопрос по 1wire. А что, никто не написал легкоинтегрируемую либу для stm32?
Максимум что я нарыл - порт с ардуины, где очень болезненно надо настраивать задержки для ногодрыга. Ладно, почитаем корифеев. Говорят usart+dma - тема. Ок, ищу либу, вроде что-то есть, тянет лютые ардуинозависимости. Бля.
Читаю еще, на 10 странице форумов все приходят к выводу что usart не подходит, на морозе тайминги не те, и длина линии сильно падает. Нужен таймер+Dma, но решения не выкладываются. На 20 странице форумов приходят к выводу что 1wire протокол не удобный а значит не нужен, давайте ntc юзать.
Я не очень в экосистеме stm32 свободно плаваю. Это норма?
На них опенсорсные подвесы сделаны, на плате Storm32 и других. Работают паршиво, однако. И здоровые они.
Скомпилировал, прошил - НЕ МИГАЕТ СУКА. Пробовал код из >>375829 той книги - та же хуйня.
Отладчиком увидел, что исполнение начинается с адреса 0x000000xx. Оказалось, в получившейся прошивке вторым словом какого-то хуя идёт не адрес reset handler'а, а 0x14.
ЧЯДНТ?
Разобрался. Проблема из-за того, что по какой-то причине в самом начале прошивки оказывается секция .note.gnu.build-id. То ли их компоновочный скрипт её не учитывает, то ли флажок какой-то gcc забыли передать.
Пока что лень разбираться, просто закостылил мэйкфайл, добавив флажок -R.note.gnu.build-id для objcopy
Просто используй куб и иар
ARR = 143, значит прерывания случаются с частотой 500 кГц. Переменные смотрю через live watch в IAR:
t1 = 28;
t2 = 100;
Вопрос: куда проёбываются 28 тактов перед первой строчкой в обработчике прерывания? Куда проёбываются 72 такта в куске кода с одним ифом и одним присвоением. Там даже ассемблерных строчек столько не набирается
>Вопрос: куда проёбываются 28 тактов перед первой строчкой в обработчике прерывания?
Вызов прерывания не мгновенно происходит. Контекст сохраняется, ещё что-о там.
У простых кварцев на 32768 Гц для RTC, будет точность около ±20ppm. То есть за сутки часы будут уходить максимум на ±1.7 секунды. У высокочастотных кварцев, от которых обычно тактируется микроконтроллер, точность почти такая же, чаще около ±50ppm. То есть RTC с простым кварцем не обеспечит большую точность, чем простой таймер.
При этом у отдельных RTC с TCXO, таких как DS3231, точность заявлена ±2ppm. Конечно можно прицепить простой TCXO без RTC к STM32, но это будет дороже чем DS3231 и потреблять будет немного больше.
Поэтому основное применение встроенного в микроконтроллер RTC это вывод микроконтроллера из спячки. Ну или если обычные таймеры все заняты.
Хуйня опять какая-то.
Допустим, точность меня устраивает (часы нужны для суточного таймера, и погрешность в 5 мин не страшна). Да и подводить можно по сети. Что нужно - так это сохранение хода от бекап-батарейки и не тащить лишний корпус в плату.
И вроде бы все ок, но идет эта залупа не стабильно. Может я с инициализацией проебался, не знаю.
Вопрос: нахуя же столько задекларировано классной периферии, если она не работает толком и нинужна?
Значит припаял что-то криво или не совсем то. Если не работает кварц, то поставь генератор, делов то. https://www.electronshik.ru/item/SITIME/SIT1533AI-H4-D14-32.768E Например.
>и не тащить лишний корпус в плату.
Вместо кварца с двумя конденсаторами ставишь одну микросхему с парой конденсаторов. Количество корпусов не поменяется.
>Вопрос: нахуя же столько задекларировано классной периферии, если она не работает толком и нинужна?
Не надо делать из-за какой-то ерунды трагедию. Выкини STM32, возьми еще что-нибудь, если эти не устраивают.
То есть варианта разобраться и заставить работать rtc как оно задумано нет? Ладненько.
https://pastebin.com/6cyRhi3N
Подключил ИК-датчик движения HC-SR501 к ножке B0, вроде бы всё настроил, но обработчик не вызывается, хотя через gpio_get сигнал считывается.
Где я объебался?
Один-в-один же с примерами, почему у них работало, а у меня — нет?
https://github.com/libopencm3/libopencm3-examples/blob/master/examples/stm32/f1/stm32-h103/exti_both/exti_both.c
https://github.com/StanislavLakhtin/stm32f103-libopencm3-exti/blob/master/src/main.c
[!] send_recv read reply failed: LIBUSB_ERROR_PIPE
[!] send_recv STLINK_DEBUG_RESETSYS
[!] send_recv read reply failed: LIBUSB_ERROR_PIPE
[!] send_recv STLINK_DEBUG_READCOREID
ERROR common.c: Failed to read core_id
[!] send_recv read reply failed: LIBUSB_ERROR_PIPE
[!] send_recv STLINK_JTAG_READDEBUG_32BIT
WARN common.c: Invalid flash type, please check device declaration
Failed to connect to target
Всё? Доигрался?
Удалось перепрошить только через openocd. Вдруг кому-то тоже понадобится:
>openocd -f openocd.cfg -c init -c "reset halt" -c "flash erase_address 0x8000000 32768" -c "flash write_image yoba.bin 0x8000000" -c shutdown -c exit
Так вот, все работает, crc32 рассчитывается, но возникла проблема, как оказалось онлайн калькуляторы не используют чисто полином ieee, там какие то мутанты, поэтому единственный вариант это смотреть значение crc прям во время работы программы.
Ещё раз по порядку, я запускаю программу, там есть переменная которая хранит рассчитанную crc, затем я должен добавить в эту программу define с текущим значением crc, который я только что увидел, это и есть как бы эталон, но вот проблема, как только я впишу туда значение эталона crc, после перезапуска программы crc естественно изменится, так как новая строчка кода появилась.
То есть: пусть значение crc32 без добавления строчки с эталоном это Х, У значение crc32 с добавленным значением эталона. Я врубаю прогу, получаю Х, это значение Х я вписываю в эталон и при запуске значение Х меняется на некий У. И в программе я сравниваю Х с У и получаю нихуя, потому что У я не могу знать заранее, как и Х, я их узнаю только после запуска.
Вопрос: есть ли способ как-то заранее учесть в программе это, может есть какие-то алгоритмы?
Выделил место в конце eeprom, чтобы не затереть его прошивкой:
#pragma locate FuncCRC 0x8001FFC
Затем просто объявил константу с этим именем, записал в нее значение эталона:
const uint32_t FuncCRC = 0x1432C98
Читаю также память с адреса 0x8000000 до конца записанных байт и у них считаю контрольную сумму, при этом запись в конец флеш не меняет общую контрольную сумму
>есть микроконтроллер российского гавнопроизводства, копия stm32
Что за контроллер такой? Любопытно
Он для военных целей предназначен, там высокая степень устойчивости к температурным, вибрационным и радиационным воздействиям
Металлокерамика везде дорогая плюс наценка барыг, 1986ВЕ92QI в пластике 400 руб стоит.
> 1986ВЕ92QI в пластике 400 руб стоит.
Дороже, конечно, чем стмка с алика, но всё равно круто, что хотя бы есть.
А где они продаются вообще?
Не видел их в розничной торговле, скорее всего их только оптом продают. Да и зачем они вообще нужны, мк сделан очень хуево
Он столько стоил может быть только до подорожания бакса в 2015. Последняя официальная цифра от производителя 700 с чем-то рублей, некоторые барыги продают, например, по 900.
https://ldm-systems.ru/catalog/milandr?cat=k1986be92qi&scat=mk
Надо получить RPM_A.
Если можно, то в двух вариантах: 1) кратко пошагово; 2) в одно действие.
Из платы
Есть stm32f103 и желание замутить машинку на пульте управления. Саму машинку сделать несложно: ШИМ для двигателей, датчики ультразвуковые для препятствий и поехало. Но столкнулся с проблемой пульта:
1 Блютус и телефон использовать не хочу т.к. 10 метров радиус действия, а я хочу побольше. И написать хоть какой-то вменяемый софт управления под андроид для меня пока оверкилл.
2 Можно взять два nRF24L01+ и еще один stm32f103, наколхозить самодельный пульт. Но где найти вменяемый корпус с кнопками, рычажками и хоть какой-то индикацией? Гугл показал, что некоторые умельцы используют старые джойстики от XBox/PS, кто-то пилит самодельную коробку, но этот вариант стоит рассматривать от безысходности.
3 Готовые пульты для радиомоделей фактически вещь в себе: пульт общается с родной платой, на которой уже есть выходы под управление моторами, сервами руля и тд. Но это готовый конструктор с ограничениями: я не могу поменять логику работы, добавить/убрать датчики, добавить/убрать передаваемую инфу и тд.
Есть ли в природе пульты/заготовки, вида "вот тебе корпус+кнопки+контроллер+модуль связи, програмировай"? Или пульт, который уже запрограммирован и есть описание его радиообмена? Типа "частота такая-то, канал такой-то, ключ сопряжения такой-то, на принимающей стороне нужен будет радиомодуль такой-то. Вся посылка вмещается в байт, нажал кнопку на пульте - улетела "1" в таком-то бите".
Или я только что описал вариант 2?
>И написать хоть какой-то вменяемый софт управления под андроид для меня пока оверкилл.
Можешь наговнякать на tcl/tk под androwish, с гуем в сотню строк выйдет.
или mit app inventor
4. 433МГц приёмник и передатчик OOK
SET_BIT(FLASH->PECR, FLASH_PECR_ERASE); / Set the ERASE bit /
SET_BIT(FLASH->PECR, FLASH_PECR_PROG);/ Set PROG bit /
CLEAR_BIT(FLASH->PECR, FLASH_PECR_PROG);
CLEAR_BIT(FLASH->PECR, FLASH_PECR_ERASE);
Ошибки пикрил. Что поменять надо, чтоб оно работало?
Может ли stm майнить?
Любой, какой твой компилятор поддерживает.
>Новые стандарты (с11) не нужны?
В 11м стандарте не так много добавили: https://ru.wikipedia.org/wiki/C11
Вкатился две недели по воле случая в stm32.
Использую SPL и IAR на stm32f407vg плата дискавери. Изучаю каждый интерфейс для обмена данными. Дошел до USART'а. Плату подключил с помощью USB TTL к компу и отправляю данные с stm32. Всё отправляется хорошо, но только на низкой скорости. То есть ставлю baud 1200 — всё работает. Ставлю 9600 — нихуя не работает.
Погуглил, понял, что надо как-то настроить частоту шины с помощью делителей, но нихуя не понял как...
Код не могу скинуть, он остался на работе. Но писал строго по примеру из библиотеки, никак не настраивал частоту, т.е. идёт стандартная 168 МГц, определенная в systemconf.
Как мне вообще поменять частоту? Как подобрать необходимые делители?
Запутался, пацаны...
Если у кого-то есть код, кидайте, буду очень благодарен!!!
Открываешь даташит. Находишь раздел про уарт. Находишь там формулу расчета скорости передачи. Вписываешь коэффициенты в регистры.
Для упрощения, там уже должны быть таблицы с готовыми коэффициентами для стандартных скоростей.
Спасибо, но, как оказалось, проблема была не в скорости. Перенастроил на USART2 вместо USART1 и всё заработало. Я так понял, что USART1 как-то конфликтует с USB портом на плате. Как именно хз, мне это сказал мой куратор — я стажируюсь в отделе разработки.
Так или иначе, всё заработало...
Вот потом мне дали следующее задание: намутить USART с DMA. Ну я подумал, ну всё легко, потому что уже настраивал SPI с DMA и всё работало.
Я оставил настройки USART'а без DMA и делал всё строго по примеру из библиотеки, переделывая под себя. И вот такая хуйня — приходит неверное количество бит. Более того, вместо моих данных приходит мусор. Разумеется, DMA настроил правильно, по референс мануалы. Около часа залипал в код и никак не нашел ошибку, гуглил и прочее прочее.
У кого-нибудь есть варианты, что не так?
Код могу завтра кинуть
История такая:
Заканчиваю местный вуз по специальности радиотехника. Я очень бедный и ради прикола закинул резюме на хедхантер. Причем, в резюме не было ни слова о программировании мк, потому что я этим никогда не занимался, но схемотехникой более менее владею и основы цифровой электроники тоже знаю. В основном, я надеялся на матлаб, потому что много там работал.
Неожиданно где-то через месяц написала HR строительной компании, говорят им нужен инженер программист в отдел разработки. Я говорю ок, только я ведь нихуя не умею. Она говорит, не страшно — мы научим. Ну я думаю, похуй, больше меня никуда не звали.
Сделал тестовое задание, прошел собеседование. Очень сильно удивился, что взяли.
Ну а в первый день дали плату и говорят: делай что хочешь у тебя весь интернет — изучай, будут вопросы — спрашивай, мы поможем. Ну и хуле я так по-тихонечку изучаю. Сначала было тяжело, но потом я начал постепенно постигать, научился проектировать и разводить печатные платы. Меня никто никуда не торопит, никто на меня не кричит, никто от меня ничего не требует — это плюс. Зарплата 15к во время стажировки — это минус. С другой стороны, я ведь просто учусь, а мне за это ещё платят. После стажировки обещают 40к, но мне кажется, я не справлюсь. Даже, если и так, это опыт.
Бля, охуенно
Странная херня, скинь глянуть когда нибудь.
Я в свое время dma тоже долго не мог переварить, но ничего, справился.
Если есть, кто тебе подсказывает на работе и даёт наставления это сразу плюс. Я таким же методом обучался после универа нихуя не имею знаний, повезло поработать с нормальным спецом, который говорил что делать и дальше изучать. 7ой год работаю уже.
Я в итоге разобрался. Как оказалось, код был правильный, дело было в настройках самого проекта. Я там добавил лишнюю папку в include. Я убрал её и всё заработало. Как и обмен между двумя платами, так и по rs 232
единственное, не разобрался с прерываниями юсарта и дма.
Дело вот в чем, чтобы сделать функцию, отправляющая пакет данных (100 байт условно), нужно в этой функции включить дма и разрешить запросы от юсарта на передачу. А потом нужно выключить дма и запросы, очистить флаги о передаче и вроде всё. Я настроил прерывания по окончанию передачи и для дма и для юсарта. Вроде всё должно работать, но если в теле main вызвать эту функцию два раза подряд, придёт только один пакет. Если поставить точку на этой функции, то компилятор будто ее не видит и просто проскакивает. Делать функцию __IO и Volatile тоже пробовал. Но!!! если поставить точку именно в прерывании, то оно срабатывает раза и отправляется два пакета, как и должно быть. То есть, будто всё происходит настолько быстро, что компилятор не успевает запустить прерывания, что невозможно в принципе. Разумеется, в прерываниях ставил while(get_dma_status), чтобы код не шел дальше пока флаги не сбросятся.
Кароче, странная хуйня
Вы видите копию треда, сохраненную 24 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.