STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим.

Как и обещал, начинаю тему про STM32. Данный пост вводный, я расскажу о настройке рабочей среды, немножко поморгаем светодиодами, всковырнём (чуть-чуть) FreeRTOS. Ну а в следующей статье я сравню STM32 и Atmega, посмотрим, зачем вообще нам нужны ARM.


Статья рассчитана на тех, кто давно ходит вокруг да около STM32, но не знает, с какого бока подступиться. Некоторые моменты могут показаться сложными на первый взгляд, но надо поработать мозгами, уж простите =) Стоит только понять некоторые основополагающие вещи, как наступит просветление, уверяю вас!


Внимание! Много текста и картинок!


1. Макетная плата


Для Пикабу я буду адаптировать статьи под обычную и дешёвую плату на STM32F103C8T6, например такую:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Их полно на Али, стоят около 120 рублей, можно заказывать пачками. Я заказал себе штук пять вариаций. По их приезду буду адаптировать больше своих статей сюда. У неё на борту 64-Кбайт Flash и 20-КБайт RAM. Вообще, чип довольно попсовый. Таймеров всего 4 штуки, периферия хиленькая. Но он стоит копейки, частота 72МГц, много оперативы, а значит можно неплохо развернуть FreeRTOS.


Также на Хабре и у себя в блоге я публикую статьи для оригинальной макетки STM32F3DISCOVERY, она основана на МК STM32F303VCT6 c 256-Кбайт Flash и 48-КБайт RAM в корпусе LQFP100. С ней гораздо интереснее работать.


Также вам понадобится программатор ST-Link, их также полно на Али, стоят от 150 руб с доставкой.


2. Среда разработки


Корпел несколько дней и родил аж две огромные статьи по настройке среды разработки под Linux Ubuntu 16.04 и MS Windows 10. Ниже я покажу, как настроить проект под нашу макетную плату и как подключить к ней светодиоды и кнопку.


Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Windows 10

Настройка Sublime Text 3, SW4 и STM32CubeMX для разработки STM32 под Linux


Я не буду полностью адаптировать эти статьи, т.к. большие сложности с публикацией форматированного кода на Пикабу. Выкладывать скрины и ссылки на Gist лишний раз не хочется. Я буду отсылать к этим статьям, так что держите вкладки с ними открытыми.


Также я буду приводить все примеры для SW4. Если вы хотите работать под Keil uVision - нет проблем. Я в другой статье напишу, как он устроен и какой у него крутой дебаггер, если доступные статьи вам не нравятся (пишите в комментах).



Ну ладно. приступим!


Подключать будем по такой схеме (RESET и BOOT0/BOOT1 нарисовал до кучи)

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Я считаю с этого места, что вы настроили среду разработки.


Для начала надо подключить ST-Link к нашему контроллеру. Делаем по схеме (слева программатор, справа контроллер):


SWDIO -> IO (или пин PA13)

SWCLK -> CLK (или пин PA14)

3.3V -> V3

GND -> G


Открываем STM32CubeMX и устанавливаем библиотеки для STM32F1 Help->Install New Libriaries, ставим галку Firmware Package for Family STM32F1, жмём Install Now:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Жмем New Project, в поле Part Number Search пишем STM32F103C8:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Щёлкаем два раза на чипе в нижней части экрана и попадаем в окно настройки.

Сначала настроим основные параметры.

- Включим FreeRTOS

- Включим резонатор на плате

- Затактируем системный таймер от TIM4

- Включим дебаг

- Включим RTC

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Теперь подключим кнопку и два светодиода:

- Щелчок на PA0 -> GPIO_EXTI0. Правый щелчок на PA0 -> Enter User Label -> BUTTON. Обратите внимание, мы подключаем кнопку на прерывание EXT0.

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост
STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

- Аналогично щелкаем на PB0 и PB1, только выбираем GPIO_Output и называем LED1 и LED2:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

В результате получим такую распиновку:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Откроем вкладку Clock Configuration.

- Отмечаем, что тактируемся от HSE и ставим частоту системной шины 72МГц:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Переходим во вкладку Configuration.


1. Настроим Кнопку. Жмём GPIO, выбираем кнопку и ставим сработку прерывания по обоим фронтам импульса, а также подтянем линию к питанию.

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

2. Включим прерывание на кнопку. Жмём NVIC и в строке EXTI line0 interrupt ставим обе галки

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

3. Настроим FreeRTOS

Жмём на FreeRTOS, во вкладке Config parameters выставляем TOTAL_HEAP_SIZE 4096 (это сколько памяти мы резервируем для всего FreeRTOS в целом)

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Во вкладке Task and Queues добавляем три задачи:

- Task Name: buttonPress, Priority: osPriorityNormal, Entry Function: StartButtonTask

- Task Name: Led1, Priority: osPriorityNormal, Entry Function: StartLed1Task

- Task Name: Led2, Priority: osPriorityNormal, Entry Function: StartLed2Task

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Во вкладке Timers and Semaphores добавим семафор, за который будут драться светодиоды:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Включим функцию vTaskDelayUntill во вкладке Include parameters:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Теперь укажем параметры проекта в Project->Settings из верхнего меню.


Указываем имя проекта в поле Project Name: PikabuLes1

Указываем путь в поле Project Location: ВАШ ПУТЬ, ГДЕ ХРАНИТЕ ПРОЕКТЫ

Выбираем Toolchain: SW4STM32

Не забываем во вкладке Code Generator включить “Add necessary libriary files as reference in the toolchain project configuration file”


Генерируем проект:

STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. Stm32, Stm32f103, Freertos, Урок, Длиннопост

Дальше, чтоб не выкладывать тут простыни кода, вы можете заменить три файла на аналогичные с моего репозитория на GitHub:


Inc/main.h -> меняем на этот

Src/main.c -> меняем на этот

Src/stm32f1xx_it.c -> меняем на этот


И для корректного автодополнения кода в ST3 в корень проекта закинуть CMakeLists.txt (если у вас Linux) либо сформировать правильный .clang_complete (если Windows), как я писал в статье.


Загружаем и запускаем так, как написано в той же статье.


Можете и тупо клонировать репо, инструкцию выше я давал для понимания, как это делается.


Теперь расскажу, как это всё работает.


Суть всего процесса - это планировщик задач FreeRTOS. У нас есть три задачи:

- ButtonTask: Занимается обработкой нажатий нашей кнопки

- Led1Task и Led2Task: занимаются светодиодами LED1 и LED2.


Для особого шика я добавил в эту связку бинарный семафор ledOnSemHandle. Суть его в том, что кто им владеет, тот и может управлять своим светодиодом. А кнопка, если перехватывает семафор, управляет обоими светодиодами.


Итак. При старте семафор свободен, состояние кнопки неизвестно. Кому повезёт, тот и хватает семафор функцией xSemaphoreTake. Соответственно задачи Led1Task или Led2Task ждут, когда семафор освободится.


Если нажимается кнопка, то задача ButtonTask ждёт, когда ей отдадут семафор. Когда она его получает, зажигает оба светодиода и держит семафор, пока не отпустить кнопку.


Дальше. Нажатия кнопки отбиваются прерыванием в Src/stm32f1xx_it.c в колбэке EXTI0_IRQHandler(). Самое главное вот в чём:

- Срабатывает прерывание.

- Мы проверяем, что сработка была более 50мсек от предыдущего срабатывания (простая защита от дребезга)

- Проверяем состояние линии: нажата или отпущена кнопка

- Уведомляем задачу ButtonTask об изменившемся состоянии кнопки

- Задача ButtonTask в зависимости от состояния кнопки пытается перехватить семафор или наоборот отдаёт его.


Вообще, с бинарными семафорами надо быть ОЧЕНЬ аккуратными. Это опасная штука и надо стараться обходиться без них. Хотя в некоторых задачах они необходимы. Например, если несколько задач используют одну шину для передачи данных. Но надо всегда держать в голове, что категорически нельзя глушить задачи, которые имеют доступ к семафору, иначе можно повесить всё наглухо.

Так, на этом всё на сегодня. Это вводная статья и тут куча моментов, на которых стоит остановиться подробнее. Об этом другой раз. Ну или пишите в комментах.


P.S. Баянометр ругается, но совпадений точно нет, контент на 100% уникальный.

Сообщество Ремонтёров

7.3K постов42.1K подписчик

Добавить пост

Правила сообщества

ЕСЛИ НЕ ХОТИТЕ, ЧТОБЫ ВАС ЗАМИНУСИЛИ НЕ ПУБЛИКУЙТЕ В ЭТОМ СООБЩЕСТВЕ ПРОСЬБЫ О ПОМОЩИ В РЕМОНТЕ, ДЛЯ ЭТОГО ЕСТЬ ВТОРОЕ СООБЩЕСТВО:


Посты с просьбами о помощи в ремонте создаются в дочернем сообществе: https://pikabu.ru/community/HelpRemont

К публикации допускаются только тематические статьи с тегом "Ремонт техники".

В сообществе строго запрещено и карается баном всего две вещи:

1. Оскорбления.

2. Реклама.

В остальном действуют базовые правила Пикабу.

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

Покажите, пожалуйста, проекты, под которые идёт такая техника.

У меня за плечами полтора десятка проектов (в т.ч. коммерческих) и я пока вообще не представляю, что нужно придумать, чтобы Arduino перестал справляться. 99% делаю на Nano (как вариант - Pro Mini), штучно - Mega/NodeMCU, ну и теоретически есть ещё Due.

раскрыть ветку (26)
Автор поста оценил этот комментарий

лабораторный блок питания. дисплей на ST7735 160х128 точек SPI. цвет одного пикселя 17бит. посчитай теперь нужную скорость SPI. справится твоя atmega328? справится, только фпс будет 0,5 кадра в секунду - красотища). я уже не говорю про то, что тупо не хватит вычислительной мощности. а у ф103 есть ДМА - отличная штука.

раскрыть ветку (25)
2
Автор поста оценил этот комментарий
Т.е. быстрый вывод большого количества информации на дисплей, к примеру, ок.

У меня с относительно большими дисплеями был опыт с Mega + UTFT 320x480 - при полной отрисовке картинки "с нуля" fps действительно 0.5 (впрочем, картинку я не сам формирую, а на лету читаю из сети через W5100 ethernet), но в проекте такой fps был приемлем.

https://www.aliexpress.com/item/3-2-inch-TFT-LCD-screen-modu...


Если вести речь про "лабораторный блок питания" - неужели там надо всю картинку целиком отрисовывать? Судя по тестам этой комбинации (mega+utft), отдельные элементы (т.е. без перерисовки всего экрана) выводятся очень даже шустро.


ОК, если речь зашла о производительности - что скажете про NodeMCU? Мегагерц-то там не пожалели (не очень большое количество выводов GPIO - отдельный вопрос)?


Ну и финальный вопрос. Упомянутая в статье среда разработки и количество телодвижений для первого "Hello, world!" вызывает панику и ужас. Что скажете про работу с STM32 в Arduino IDE? Насколько понимаю, в плату заливается совместимый с IDE бутлоадер и вся конструкция начинает называться STM32duino. Был такой опыт?

раскрыть ветку (19)
2
Автор поста оценил этот комментарий

в принципе, отрисовка с нуля в ЛБП нужна редко. но если уж делать, то делать все так, чтоб работало нормально. уж очень сильно бесят меня эти 0.5 фпс. так же нужна отрисовка графиков потребления тока рил тайм, там уже придется довольно приличную область дисплея с каждым смещением графика отрисовывать заново.

NodeMCU дороже стм32. мегагерц больше, а ДМА нету. ДМА весьма заметный прирост даёт в скорости дисплея. а вот если задрать частоту - разницы никакой.
у NodeMCU слабая переферия. по одному SPI и I2C. у ф103 по 2. в ЛБП это важно, так как нужно рулить ЦАПами.

с ардуиноИДЕ по стм32ф103 опыт был. про бутлоадер все верно. из минусов: 1) после заливки флэша нужно ресетить СТМку вручную кнопкой 2) если сравнивать с кейлом, то у ардуино порядком больший бинарник на выходе.

раскрыть ветку (18)
Автор поста оценил этот комментарий
Спасибо за подробные ответы! Но есть ещё вопросы ;)


> придется довольно приличную область дисплея с каждым смещением графика отрисовывать заново

Да, такая задача выглядит именно как отрисовка практически всего дисплея с нуля (ну если график не совсем крошечную область занимает ;) / наверное, не надо надеяться, что в контроллере дисплея может быть функция "переместить область x1y1x2y2 в координаты x3y3x4y4", которую контроллер дисплея моментально выполняет без участия основного контроллера?


> ДМА весьма заметный прирост даёт в скорости

Ни разу ничего с DMA не делал, увы. Почитал, что очень много проблем в конкретных реализациях. Вот если для примера взять дисплей ST7735 - какую посоветуете библиотеку для работы с STM32?


> после заливки флэша нужно ресетить СТМку вручную кнопкой
Прочёл, что платы Maple Mini избавлены от этого неудобства. Но всё равно не страшно, я начинал с Arduino Pro Mini с переходником USB-txrx, где нужно было ещё и в нужный момент резет жать/отпускать, чтобы прошивка в принципе начала заливаться ;)


Заказал сейчас плату F103C8T6 и дисплей ST7735 - попробую поиграться и сравнить три варианта (Arduino + Arduino IDE, STM + Arduino IDE, STM + прочие IDE).


Я, собственно, почему упираюсь в Arduino IDE: мне от контроллера+IDE нужны следующие вещи:


1. чтобы оно включалось в компьютер по USB (если даже через переходник типа ST-Link - это можно пережить)


2. Чтобы я мог в IDE нажать кнопку "upload" и оно скомпилировало бы мне всё и загрузило в контроллер.


3. Чтобы я мог программировать на не-низком уровне: чтобы пин GPIO, к примеру, включался через что-то типа digitalWrite( pin, level ), а не через что-то ассемблерное типа "записать в регистр A магическое число 47 (соответствующее выводу D13), потом записать в регистр B 255 (типа уровень), потом ещё какой-нибудь параметр, потом вызов "записать значение в выходной регистр", etc. Конечно, можно понаписать себе тучу хелпер-функций, но лучше, когда стресса не очень много от использования системы =) У меня от Arduino изжога начинается, когда приходится разнообразные "TIMSK2 |= (1 << OCIE2A);" делать.


4. Чтобы были полезные функции типа shiftIn/shiftOut, когда оно само этот bitbang исполняет и я не думаю, как мне это на низком уровне реализовывать.


5. Чтобы можно было найти библиотеки к популярным устройствам (для микросхем, я положим, и сам смогу написать) типа TFT-экранов, SD-карт, ethernet-интерфейсов и прочих прелестей.


Ну и финальный вопрос - STM32+WiFi. Я делал проект на NodeMCU v3 (ESP-12E) и у меня остались самые хорошие впечатления - великолепная статическая файловая система SPIFFS, работает одновременно и как точка доступа и как клиент, в общем - всё понравилось. Как у STM32 с WiFi дела обстоят? Есть что-то совсем родное, что к контроллеру присоединяется, или там противоестественный вариант "STM+ESP, которые общаются друг с другом по serial-интерфейсу"?

раскрыть ветку (13)
Автор поста оценил этот комментарий
Чтобы не было проблем с прошивкой и отладкой на STM32, необходимо обязательно подключать и вывод NRST микроконтроллера к отладчику.
Китайцы обычно выводят на разъем только GND, 3V3, SWCLK, SWDIO.
раскрыть ветку (11)
Автор поста оценил этот комментарий
Ещё раз, плиз, на примерах.

Вот приедет мне вот такая простенькая штука:

https://www.aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32...


Предположим, что я бросаю Arduio IDE и сразу использую uVision/Keil.

Я могу подключить эту плату просто USB-шнуром, чтобы получить a) возможность заливать прошивку; b) возможность запустить отладку?

Или мне обязательно нужно купить ещё и такую штуку?

https://www.aliexpress.com/item/FREE-SHIPPING-ST-Link-V2-stl...


Правильно ли я понимаю, что в отсутствие подключения вывода NRST (подключения куда?) мне периодически (после заливки прошивки?) придётся вручную нажимать кнопку Reset на контроллере?

раскрыть ветку (10)
Автор поста оценил этот комментарий

Я сам не проверял, это даже позорно, наверное. Но мне попадались такие платки, где в описании было, что на них есть загрзучик, позволяющий шить через USB. Но вот так навскидку, пусть меня поправят, выглядит, будто там залит загрузчик под STM32duino. Так что для KEIL нет, нельзя. Для STM32duino - возможно.


Но я могу ошибаться!!!

раскрыть ветку (2)
Автор поста оценил этот комментарий
> в описании было, что на них есть загрзучик, позволяющий шить через USB


Тут я в описании вообще ничего про загрузчик не вижу.

Правильно ли я понимаю, что в случае "нативной" разработки (к примеру, в Keil) понятия загрузчика нет вообще?


Если плату через USB прошивать нельзя, то что там делает USB (помимо питания от USB)? Просто обеспечивает обмен данными через serial/usb конвертер (какие-то два пина микросхемы подсоединяются к конвертеру как RX/TX и мы со стороны компьютера видим это как ком-порт)?


Да, кстати, есть ли на таких платах аналог ардуинного Vin, когда туда можно завести питание (например, +12V) и оно само его снизит до нужных (+5, +3.3) значений? По картинкам pinout вроде такого нет. Если нельзя большое напряжение подводить - можно ли питать плату от +5, подсоединяя БП к ноге 5V?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ну вообще, конечно, можно компилить прошивку в том же Keil или SW4, а потом через USB лить в МК.


Почти во всех STM32 есть USB. Этот USB и подключен к МК. Мы можете его настроить для чего угодно, хоть FatFS, хоть Communication Device. Можете подправить загрузчик и сделать возможным обновление прошивки через USB, например, для клиентов готового устройства.


Питание можете подавать через программатор. Или через USB, или через вход 5В, он заведён на питание с USB, через регулятор понижается до 3.3В. Можете запитать и через выход 3.3В, не вопрос. Кстати говоря, наилучший вариант, это питать настоящим +5В, т.к. с USB честные 5В приходят редко, и на МК обычно не 3.3, у чуть меньше приходит, по опыту бывает порядка 3-3.1В

Автор поста оценил этот комментарий
Если есть возможность, то купите STlink v2.
Это сильно облегчит жизнь при отладке.
USB-загрузчик не удобен при частой перепрошивке, когда ведется отладка кода.
С STlink v2 все делается намного быстрее и эффективнее.
USB-загрузчик пригодится в конечном изделии, когда понадобится изредка обновлять прошивку.
Еще, USB-порт STM32 полезен в качестве UART. Например для консольных команд (шелл).
раскрыть ветку (6)
Автор поста оценил этот комментарий
У меня рука уже занесена вот над этой позицией:
https://www.aliexpress.com/item/FREE-SHIPPING-ST-Link-V2-stl...

Это подходит? Можно брать?

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
Можно, у меня таких штук пять 😀
раскрыть ветку (2)
DELETED
Автор поста оценил этот комментарий

Можно. Только говно. Там нет никакой защиты USB входа и они вылетают от малейшего чиха.
Рекомендую взять оригинальный stlink если собираетесь заниматься всерьез. Либо, если денег жалко, купить любую плату STM32 discovery. Можно STM32-Nucleo - там вроде вообще можно отладчик отломить от платы и он будет жить своей жизнью.

раскрыть ветку (1)
Автор поста оценил этот комментарий
На счет китайских клонов я не в курсе. У меня беленький оригинальный STlink v2 и еще пара встроенных в демо платы STM32L-Discovery и STM32F4-Discovery.
Они и так дешевые. Не вижу смысла в аналогах.
Автор поста оценил этот комментарий

> USB-порт STM32 полезен в качестве UART. Например для консольных команд (шелл)

Да, куда ж без этого :) С конечными пользователями моих изделий я в основном так и общаюсь, через консольные команды.

Автор поста оценил этот комментарий

Да, в некоторых дисплеях есть функция с вот этими вот "переместить область x1y1x2y2 в координаты x3y3x4y4". но я даже не искал это в ДШ на СТ7735 - смысла мало. мало, потому что такая штука реализуется путем смещения изображения в памяти самого контроллера дисплея. память не бесконечна, да и будь она бесконечна, всё равно наступит момент, когда новую пачку инфы для графика придётся заливать.

http://www.stm32duino.com/viewtopic.php?t=486 тут вот есть библиотека с использованием ДМА. (отлично работает - проверял).

со всеми 5 пунктами по Arduino IDE проблем быть не должно.

на счёт "финального" вопроса: нужно искать библиотеку. флаг в руки. подозреваю, что есть такая.

Автор поста оценил этот комментарий
Чтобы не было проблем с прошивкой и отладкой на STM32, необходимо обязательно подключать и вывод NRST микроконтроллера к отладчику.
Китайцы обычно выводят на разъем только GND, 3V3, SWCLK, SWDIO.
раскрыть ветку (3)
Автор поста оценил этот комментарий

Я уже не парюсь на этот счёт, просто в настройках ставлю Soft Reset. Если прошивка не идёт, пальцем держу reset. Но это редкость, обычно если напортачишь с тактированием и чип сразу сваливается в HardFault.

Автор поста оценил этот комментарий

очевидная вещь. ну так на плату гляньте. видите там отдельный программатор-отладчик? и я не вижу. программируется МК через предварительно прошитый загрузчик с использованием аппаратного юсб, который есть в 103.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Для этого можно использовать любой USART, коим, по-сути, USB также является. Зависит от загрузчика.

1
Автор поста оценил этот комментарий
Ок, управление графическими дисплеями - задача для стм32. А ещё есть примеры?
раскрыть ветку (4)
1
Автор поста оценил этот комментарий

всё тот же ЛБП. разрядность АЦП и ШИМа у 328 атмеги совсем смешная для таких целей.  для чего АЦП - понятно. ШИМ - для формирования опорного напряжения линейных регуляторов напряжения. то есть связка ШИМ и ФНЧ. к  тому же тут роляет частота ШИМ, если говорить про эффективность ФНЧ. чем больше частота, тем меньше пульсаций будет после ФНЧ. и тут опять атмега328 - какашка.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Да, всё так. Правда на высоких частотах начинают другие штуки вылезать, приходится и их давить. Как с болячками - одно лечим, другое калечим. И неспециалисту 2/3 слов не понять, много слэнга =) Будьте проще. Я то окончил МАИ, ещё советской школы.

раскрыть ветку (2)
1
Автор поста оценил этот комментарий

ну какой слэнг?) ерунда. тот, кто такими вещами интересуется, поймёт. если не поймёт, то погуглит и поймёт).
да и образование тут не при чём. мне мои 11 классов обычной школы не мешают в подобных вещах разбираться).

раскрыть ветку (1)
Автор поста оценил этот комментарий

Ну тут есть люди, которых это возмущает сильно =) И кому гуглить лень=)

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку