Вадим Дерябкин @Vadimatorikda
Инженер-программист
Information
- Rating
- Does not participate
- Location
- Красноярск, Красноярский край, Россия
- Date of birth
- Registered
- Activity
Specialization
Software Developer, Embedded Software Engineer
Lead
From 250,000 ₽
C++
STM32
Linux
Circuitry
Python
Assembler
Programming microcontrollers
Embedded system
Software development
Object-oriented design
2. Мне ЕГЭ через месяц писать) Часть С буду на паскале делать. Он для меня самый простой.
Да, для этого.
Да, технически можно обойтись одним таймером, если сгенерировать синусоиду привязанной к частоте. Но это бред… В следующей статье (то, о чем говорю, уже дописано) мы сделаем небольшую функцию, которая будет меняя частоту таймера играть MIDI мелодию (одно голосую). А после покажу способ (сейчас еще выбираю, как будет проще), как сделать выдачу многоголосой музыки без изменения настроек таймера.
Каждый канал имеет первичную и альтеранативную структуру (того две). Каналов DMA имеет 32 (0..31). На каждый канал по 2 структуры = 64 структуры. Мы используем всего 1 канал и можем оставить только 2 структуры. Остальную память можно использовать по собственному назначению. НО. Каждая структура имеет свой фиксированный адрес со смещением в 1024. К примеру для канала «0» первичная структура может размещаться в 0x20000000 или 0x20000200, 0x20000400 и т.д… Нельзя разместить структуру для третьего канала (если мы используем только третий канал) по адресу 0x20000000. Он обязательно должен быть 0x20000030, или 0x20000230, или 0x20000430 и т.д.
Таймер 1 железно (в чипе) связан с DMA. Когда таймер генерирует сигнал — он «производит процедуру арбитража». Иначе говоря, разрешает передачу. В структуре мы указали, что контроллер должен ждать этого разрешения после каждой передачи. Если бы мы хотели передавать, к примеру, по 128 значений, то в структуре нужно было бы указать «производить арбитраж через каждые 128 передач». Тогда бы за один вызов таймера мы бы передавали 128 значений.
Не только половину. Мы проверяем, передал ли DMA первую структуру и хотя бы один элемент из следующей. Потому что есть риск, что мы проверим структуру как раз в тот момент, когда ПДП передал последней элемент структуры, но еще не попытался передать элемент из следующей. Тогда мы «восстановим» структуру и в этот же момент ДМА вместе перехода к новой структуре начнет заново передавать все из восстановленной.
Я вроде бы на C пишу… Значит и этот тег тоже выбрать следовало. Разве нет?
Вы меня заставили немного усомниться в своих знаниях. Интереса ради пробежался по описаниям всех достоинств Cortex-M3. Нигде не нашел упоминания о том, что DAC — часть ядра. SysTick — да. Везде об этом пишут. Но про DAC не нашел. Да и лично мне не попадался STM32 с DAC (Из тех, что из F100 и F103). Например в самом часто используемом мной STM32F103C8 — нет DAC (сейчас еще раз пересмотрел в описании). А он на Cortex-m3. Делаю вывод — он не часть ядра.
Лично я — перешел. Уже. Сейчас. Надеюсь, что удастся договориться в будущем с Миландром о сотрудничестве и получать образцы) Сейчас к ЕГЭ готовиться нужно. Иначе не быть мне прибористом. А вообще хочу пойти в какую-нибудь фирму как раз типа Миландра. Всегда мечтал работать на самом низком уровне логики (писать ядра, исправлять периферию...).
Пока что мне все нравится, но я не всего каснулся. Лично ДМА для следующей статьи сейчас настраиваю 3-й день. Не смог разобраться с документацией. Вернее смог, но так и не запустилось. Сейчас получил помощь с официального форума в виде типового кода под свою задачу. Если все удастся — выложу все: как пытался, как не получилось, какие грабли были, как от них избавился. Мне всегда не нравилось, что в статьях не пишут, что делать, если что-то работает не так, как должно. Я же буду описывать все грабли и их признаки.
Да, игнорирую. Причем в упор. Не нравятся они мне. Честно сказать я бы не отказался от правильно отлаженной графической среды (кою пишу сейчас сам). Прошу меня понять. Я начинал с паскаля под AVR, но потом пройдя через си ощутил все блаженство от ассемблера. Но вот писать на ассемблере под STM32 было очень трудно. Море нюансов, которые нигде не описывают. Так что дальше мигалки с USART дело не двинулось. Сейчас же я могу наконец-то, благодаря документации на родном (хоть и местами корявом) языке, настроить все сам. На си. Ассемблер придется забыть( Но если мне в руки попадет восьмибитка от Миландра — я начну писать курс про освоения ее на ассемблере и си одновременно. Для сравнения.
Спасибо за исправление. Исправлю!