Старт ARM. Цифро-аналоговый преобразователь DAC.

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