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
12 Комментарий
старее
новее большинство голосов
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 лет назад

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

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

Profile Profile Profile Profile Profile
Vkontakte
Twitter

Язык сайта

Июль 2020
Пн Вт Ср Чт Пт Сб Вс
« Июн    
 12345
6789101112
13141516171819
20212223242526
2728293031  

© 2013-2020 MicroTechnics.ru