STM32 DAC. Пример использования и настройка в STM32CubeMx.

Работа с модулем DAC

Мы рады приветствовать Вас на нашем сайте! И сегодня речь снова пойдет об использовании среды STM32CubeMx для генерации пользовательского кода. На очереди у нас модуль цифро-аналогового преобразователя, он же ЦАП, он же DAC!

В общем, открываем STM32CubeMx и создаем новый проект. Я буду использовать для тестирования платку с микроконтроллером STM32F103VET6. Соответственно, его я и выбрал при создании проекта. Теперь давайте разберемся с периферией – пусть будет задействован модуль DAC и выход DAC_OUT2 (PA5). Так и настраиваем:

Настройка модуля STM32 DAC.

Сразу же видим, что нужный нам вывод PA5 Cube автоматически настроил на работу в нужном режиме:

Конфигурация ЦАП.

В принципе, больше ничего пока менять не будем, генерируем проект и видим, что Cube создал для нас функцию:

/* DAC init function */
void MX_DAC_Init(void)
{
	DAC_ChannelConfTypeDef sConfig;

	/**DAC Initialization */
	hdac.Instance = DAC;
	HAL_DAC_Init(&hdac);

	/**DAC channel OUT2 config */
	sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
	sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
	HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2);
}

В STM32 DAC 12-ти битный, поэтому мы можем преобразовать в аналоговый сигнал любое цифровое значение от 0 до 4095. Для того, чтобы это осуществить есть специальная функция. Давайте к примеру сгенерируем на выходе уровень напряжения равный 3.3В / 2 = 1.65 В. Соответствующее цифровое значение, которое необходимо преобразовать, равно 2048:

uint16_t currentDACData = 2048;

// Включаем ЦАП, нужный канал
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, currentDACData);

Как видите, все сводится к вызову специальной функции, да и только 🙂 Параметры тут все понятные – структура, которая соответствует нашему модулю DAC, номер канала, выравнивание данных (по левому краю, либо по правому), ну и последний аргумент – сами данные.

Такая вот получилась совсем небольшая статья… Оставайтесь с нами, подписывайтесь на обновления и заходите на сайт!

Поделиться!

Подписаться
Уведомление о
guest
14 Комментарий
старее
новее большинство голосов
Inline Feedbacks
View all comments
Denis
Denis
4 лет назад

А не будет ли интереснее рассмотреть какую-нибудь Discovery с её усилителем и выводом звука на наушники, через уже разведенный разъем?

Maraudeur
Maraudeur
4 лет назад

Знаете, ничего не работало, пока не нашёл в примере от STM тот факт, что нужно перед уставкой значения,нужно запустить сам DAC:
HAL_DAC_Start(&hdac, DAC_CHANNEL_2);
А так, спасибо за уроки!

Александр
Александр
3 лет назад

а где вторая и третья статьи? хоть бы ссылки на них

Витя
2 лет назад

Здравствуйте, а как можно прогнать ШИМ от таймера через ЦАП?

Витя
Reply to  Aveal
2 лет назад

Да, извините, этот вопрос я уже решил, буду преобразовывать ШИМ внешним фильтром. У меня есть еще один вопрос, мне необходимо управлять скважностью с помощью 4х-разрядного кода и исходить он должен от ВНЕШНЕГО источника, что можно для этого использовать? Только не злитесь, если вопрос глупый, я новичок)

Витя
Reply to  Aveal
2 лет назад

Счетчик на триггерах, мне надо как-то с него считывать данные

Георгий
Георгий
1 месяц назад

Плата Nucleo-F413ZH. Генерирую прогу в Кубе, в Кейле добавляю Ваш код. Не работает. Вроде все делаю правильно, но результат нулевой.

Присоединяйтесь!

Profile Profile Profile Profile Profile
Vkontakte
Twitter

Язык сайта

Октябрь 2020
Пн Вт Ср Чт Пт Сб Вс
 1234
567891011
12131415161718
19202122232425
262728293031  

© 2013-2020 MicroTechnics.ru