Всем привет! продолжаем говорить про 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! 🙂