Всем привет! продолжаем говорить про ARM. Сегодня у нам ЦАП (DAC).
Цифро-аналоговый преобразователь (ЦАП) — устройство для преобразования цифрового (обычно двоичного) кода в аналоговый сигнал (ток, напряжение или заряд). Цифро-аналоговые преобразователи являются интерфейсом между дискретным цифровым миром и аналоговыми сигналами.
Для DAC используется RCC APB1 peripheral clock(RCC_APB1ENR) 42 MHz максимальная частота (stm32f429zi).
#include "stm32f4xx_hal.h" #include <math.h> #include <limits.h> DAC_HandleTypeDef hdac; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DAC_Init(void); int main(void) { uint32_t i = 0; HAL_Init(); SystemClock_Config(); HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_0); HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); MX_GPIO_Init(); MX_DAC_Init(); while (1) { //12bit DAC (0 - 4095) if(i == 2000) i = 0; //например i++; //(uint32_t) ( 0.5*(sin((double)i*3.14 /180.0)) + 0.5) HAL_DAC_Start(&hdac, DAC_CHANNEL_2); HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_L, i); HAL_DAC_Stop(&hdac, DAC_CHANNEL_2); } } ...
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel) /** * @brief Разрешить ЦАП и запустить канал преобразования. * @param hdac: указатель на структуру DAC_HandleTypeDef. Структура содержит конфигурацию ЦАП. * @param Выбор канала ЦАП : * @arg DAC_CHANNEL_1: ЦАП канал 1 * @arg DAC_CHANNEL_2: ЦАП канал 2 * @retval HAL статус */ //.................................................. HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data) /** * @brief Установить выходное значение регистра ЦАП * @param hdac: указатель на структуру DAC_HandleTypeDef. Структура содержит конфигурацию ЦАП. * @param Выбор канала ЦАП : * @arg DAC_CHANNEL_1: ЦАП канал 1 * @arg DAC_CHANNEL_2: ЦАП канал 2 * @param Специфика выравнивания выходного значения регистра * @arg DAC_ALIGN_8B_R: 8bit выравнивание данных по правому краю * @arg DAC_ALIGN_12B_L: 12bit выравнивание данных по левому краю * @arg DAC_ALIGN_12B_R: 12bit выравнивание данных по правому краю * @param значение которое записывается в ЦАП * @retval HAL статус */ //.................................................. HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel) /** * @brief Запретить ЦАП и остановить канал преобразования. * @param hdac: указатель на структуру DAC_HandleTypeDef. Структура содержит конфигурацию ЦАП. * @param Выбор канала ЦАП : * @arg DAC_CHANNEL_1: ЦАП канал 1 * @arg DAC_CHANNEL_2: ЦАП канал 2 * @retval HAL статус */ //..................................................
By! 🙂