В прошлый раз приведя пару примеров работы с библиотекой от STMicroelectronics, я не думал что для работы с мк установленным в STM32VLDiscovery используется другая библиотека. А так как большинство имеет на руках именно STM32VLDiscovery, то сегодня попытаюсь исправить свою ошибку и рассмотрю работу с ЦАП и ПДП (DMA).
В примерах предлагаемых производителем, я не нашел работу с ЦАП и ПДП, но примеры были в ранее рассмотренной библиотеке, поэтому я их немного поправил под мк установленный на плате STM32VLDiscovery.
И так начнем с самого простого и самого любимого с генерации ЦАП-ом обычной синусоиды.
Один из возможных вариантов решения поставленной задачи: по таймеру запускать преобразования ЦАП, по запросам ЦАП запускать ПДП для записи нового значения из памяти в ЦАП.
Вся настройка сводится к уже привычному списку:
разрешить тактирование
настроить режим работы
разрешить работу
</ul> Разрешаем тактирование ЦАП, ПДП, таймера:
Настраиваем режим работы таймера 7:
Таймер 7 выбран не случайно, он может быть выбран в качестве источника запуска для ЦАП:
Настраиваем и разрешаем работу ПДП канал 3:
Канал 3 контроллера ПДП, так же выбран не случайно, именно к нему “привязан” запрос от ЦАП:
Настраиваем и разрешаем работу ЦАП:
В последнюю очередь разрешаем работу таймера 7, так как именно он является инициатором:
// разрешаем работу таймера 7
TIM_Cmd(TIM7, ENABLE);
Код целиком:
Всё можно зашивать и любоваться синусоидой на выводе PA4.
Отдельно касательно тактирования мк, после сброса тактирование всегда идет от встроенного генератора, но не плохо бы выжать “максимум” для этого необходимо разрешить работу внешнего высокочастотного генератора, настроить систему ФАПЧ, для умножения на 3 (на плате установлен кварц на 8 МГц, максимальная частота мк 24 МГц):
Проект одним файлом:
2011-04-19-stm32vldiscovery-dac-dma
Размер после компиляции:
Linking: target.elf
-----------------------------------------------------------
text data bss dec hex filename
1880 0 200 2080 820 target/target.elf