Мы рады приветствовать Вас на нашем сайте! И сегодня речь снова пойдет об использовании среды STM32CubeMx для генерации пользовательского кода. На очереди у нас модуль цифро-аналогового преобразователя, он же ЦАП, он же DAC!
В общем, открываем STM32CubeMx и создаем новый проект. Я буду использовать для тестирования платку с микроконтроллером STM32F103VET6. Соответственно, его я и выбрал при создании проекта. Теперь давайте разберемся с периферией – пусть будет задействован модуль DAC и выход DAC_OUT2 (PA5). Так и настраиваем:
Сразу же видим, что нужный нам вывод 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, номер канала, выравнивание данных (по левому краю, либо по правому), ну и последний аргумент – сами данные.
Такая вот получилась совсем небольшая статья… Оставайтесь с нами, подписывайтесь на обновления и заходите на сайт!