00. 目录

文章目录

  • 00. 目录
  • 01. DAC简介
  • 02. 相关类型
  • 03. 相关函数
  • 04. 结构体封装
  • 05. 预留
  • 06. 附录
  • 07. 声明

01. DAC简介

STM32F4的DAC模块(数字/模拟转换模块)是12位数字输入,电压输出型的DAC。DAC可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。DAC 工作在 12 位模式时,数据可以设置成左对齐或右对齐。DAC 模块有 2 个输出通道,每个通道都有单独的转换器。在双 DAC 模式下,2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个通道的输出。DAC 可以通过引脚输入参考电压 Vref+(通 ADC 共用)以获得更精确的转换结果。
STM32F4 的 DAC 模块主要特点有:
① 2 个 DAC 转换器:每个转换器对应 1 个输出通道
② 8 位或者 12 位单调输出
③ 12 位模式下数据左对齐或者右对齐
④ 同步更新功能
⑤ 噪声波形生成
⑥ 三角波形生成
⑦ 双 DAC 通道同时或者分别转换
⑧ 每个通道都有 DMA 功能

02. 相关类型

DAC Init structure

/** * @brief  DAC Init structure definition*/typedef struct
{uint32_t DAC_Trigger;                      /*!< Specifies the external trigger for the selected DAC channel.This parameter can be a value of @ref DAC_trigger_selection */uint32_t DAC_WaveGeneration;               /*!< Specifies whether DAC channel noise waves or triangle wavesare generated, or whether no wave is generated.This parameter can be a value of @ref DAC_wave_generation */uint32_t DAC_LFSRUnmask_TriangleAmplitude; /*!< Specifies the LFSR mask for noise wave generation orthe maximum amplitude triangle generation for the DAC channel. This parameter can be a value of @ref DAC_lfsrunmask_triangleamplitude */uint32_t DAC_OutputBuffer;                 /*!< Specifies whether the DAC channel output buffer is enabled or disabled.This parameter can be a value of @ref DAC_output_buffer */
}DAC_InitTypeDef;

DAC_trigger_selection

/** @defgroup DAC_trigger_selection * @{*/#define DAC_Trigger_None                   ((uint32_t)0x00000000) /*!< Conversion is automatic once the DAC1_DHRxxxx register has been loaded, and not by external trigger */
#define DAC_Trigger_T2_TRGO                ((uint32_t)0x00000024) /*!< TIM2 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T4_TRGO                ((uint32_t)0x0000002C) /*!< TIM4 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T5_TRGO                ((uint32_t)0x0000001C) /*!< TIM5 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T6_TRGO                ((uint32_t)0x00000004) /*!< TIM6 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T7_TRGO                ((uint32_t)0x00000014) /*!< TIM7 TRGO selected as external conversion trigger for DAC channel */
#define DAC_Trigger_T8_TRGO                ((uint32_t)0x0000000C) /*!< TIM8 TRGO selected as external conversion trigger for DAC channel */                                                                       #define DAC_Trigger_Ext_IT9                ((uint32_t)0x00000034) /*!< EXTI Line9 event selected as external conversion trigger for DAC channel */
#define DAC_Trigger_Software               ((uint32_t)0x0000003C) /*!< Conversion started by software trigger for DAC channel */#define IS_DAC_TRIGGER(TRIGGER) (((TRIGGER) == DAC_Trigger_None) || \((TRIGGER) == DAC_Trigger_T6_TRGO) || \((TRIGGER) == DAC_Trigger_T8_TRGO) || \((TRIGGER) == DAC_Trigger_T7_TRGO) || \((TRIGGER) == DAC_Trigger_T5_TRGO) || \((TRIGGER) == DAC_Trigger_T2_TRGO) || \((TRIGGER) == DAC_Trigger_T4_TRGO) || \((TRIGGER) == DAC_Trigger_Ext_IT9) || \((TRIGGER) == DAC_Trigger_Software))

DAC_wave_generation

/** @defgroup DAC_wave_generation * @{*/#define DAC_WaveGeneration_None            ((uint32_t)0x00000000)
#define DAC_WaveGeneration_Noise           ((uint32_t)0x00000040)
#define DAC_WaveGeneration_Triangle        ((uint32_t)0x00000080)
#define IS_DAC_GENERATE_WAVE(WAVE) (((WAVE) == DAC_WaveGeneration_None) || \((WAVE) == DAC_WaveGeneration_Noise) || \((WAVE) == DAC_WaveGeneration_Triangle))

DAC_lfsrunmask_triangleamplitude


/** @defgroup DAC_lfsrunmask_triangleamplitude* @{*/#define DAC_LFSRUnmask_Bit0                ((uint32_t)0x00000000) /*!< Unmask DAC channel LFSR bit0 for noise wave generation */
#define DAC_LFSRUnmask_Bits1_0             ((uint32_t)0x00000100) /*!< Unmask DAC channel LFSR bit[1:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits2_0             ((uint32_t)0x00000200) /*!< Unmask DAC channel LFSR bit[2:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits3_0             ((uint32_t)0x00000300) /*!< Unmask DAC channel LFSR bit[3:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits4_0             ((uint32_t)0x00000400) /*!< Unmask DAC channel LFSR bit[4:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits5_0             ((uint32_t)0x00000500) /*!< Unmask DAC channel LFSR bit[5:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits6_0             ((uint32_t)0x00000600) /*!< Unmask DAC channel LFSR bit[6:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits7_0             ((uint32_t)0x00000700) /*!< Unmask DAC channel LFSR bit[7:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits8_0             ((uint32_t)0x00000800) /*!< Unmask DAC channel LFSR bit[8:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits9_0             ((uint32_t)0x00000900) /*!< Unmask DAC channel LFSR bit[9:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits10_0            ((uint32_t)0x00000A00) /*!< Unmask DAC channel LFSR bit[10:0] for noise wave generation */
#define DAC_LFSRUnmask_Bits11_0            ((uint32_t)0x00000B00) /*!< Unmask DAC channel LFSR bit[11:0] for noise wave generation */
#define DAC_TriangleAmplitude_1            ((uint32_t)0x00000000) /*!< Select max triangle amplitude of 1 */
#define DAC_TriangleAmplitude_3            ((uint32_t)0x00000100) /*!< Select max triangle amplitude of 3 */
#define DAC_TriangleAmplitude_7            ((uint32_t)0x00000200) /*!< Select max triangle amplitude of 7 */
#define DAC_TriangleAmplitude_15           ((uint32_t)0x00000300) /*!< Select max triangle amplitude of 15 */
#define DAC_TriangleAmplitude_31           ((uint32_t)0x00000400) /*!< Select max triangle amplitude of 31 */
#define DAC_TriangleAmplitude_63           ((uint32_t)0x00000500) /*!< Select max triangle amplitude of 63 */
#define DAC_TriangleAmplitude_127          ((uint32_t)0x00000600) /*!< Select max triangle amplitude of 127 */
#define DAC_TriangleAmplitude_255          ((uint32_t)0x00000700) /*!< Select max triangle amplitude of 255 */
#define DAC_TriangleAmplitude_511          ((uint32_t)0x00000800) /*!< Select max triangle amplitude of 511 */
#define DAC_TriangleAmplitude_1023         ((uint32_t)0x00000900) /*!< Select max triangle amplitude of 1023 */
#define DAC_TriangleAmplitude_2047         ((uint32_t)0x00000A00) /*!< Select max triangle amplitude of 2047 */
#define DAC_TriangleAmplitude_4095         ((uint32_t)0x00000B00) /*!< Select max triangle amplitude of 4095 */#define IS_DAC_LFSR_UNMASK_TRIANGLE_AMPLITUDE(VALUE) (((VALUE) == DAC_LFSRUnmask_Bit0) || \((VALUE) == DAC_LFSRUnmask_Bits1_0) || \((VALUE) == DAC_LFSRUnmask_Bits2_0) || \((VALUE) == DAC_LFSRUnmask_Bits3_0) || \((VALUE) == DAC_LFSRUnmask_Bits4_0) || \((VALUE) == DAC_LFSRUnmask_Bits5_0) || \((VALUE) == DAC_LFSRUnmask_Bits6_0) || \((VALUE) == DAC_LFSRUnmask_Bits7_0) || \((VALUE) == DAC_LFSRUnmask_Bits8_0) || \((VALUE) == DAC_LFSRUnmask_Bits9_0) || \((VALUE) == DAC_LFSRUnmask_Bits10_0) || \((VALUE) == DAC_LFSRUnmask_Bits11_0) || \((VALUE) == DAC_TriangleAmplitude_1) || \((VALUE) == DAC_TriangleAmplitude_3) || \((VALUE) == DAC_TriangleAmplitude_7) || \((VALUE) == DAC_TriangleAmplitude_15) || \((VALUE) == DAC_TriangleAmplitude_31) || \((VALUE) == DAC_TriangleAmplitude_63) || \((VALUE) == DAC_TriangleAmplitude_127) || \((VALUE) == DAC_TriangleAmplitude_255) || \((VALUE) == DAC_TriangleAmplitude_511) || \((VALUE) == DAC_TriangleAmplitude_1023) || \((VALUE) == DAC_TriangleAmplitude_2047) || \((VALUE) == DAC_TriangleAmplitude_4095))

DAC_output_buffer

/** @defgroup DAC_output_buffer * @{*/#define DAC_OutputBuffer_Enable            ((uint32_t)0x00000000)
#define DAC_OutputBuffer_Disable           ((uint32_t)0x00000002)
#define IS_DAC_OUTPUT_BUFFER_STATE(STATE) (((STATE) == DAC_OutputBuffer_Enable) || \((STATE) == DAC_OutputBuffer_Disable))

DAC_Channel_selection

/** @defgroup DAC_Channel_selection * @{*/#define DAC_Channel_1                      ((uint32_t)0x00000000)
#define DAC_Channel_2                      ((uint32_t)0x00000010)
#define IS_DAC_CHANNEL(CHANNEL) (((CHANNEL) == DAC_Channel_1) || \((CHANNEL) == DAC_Channel_2))

DAC_data_alignement

/** @defgroup DAC_data_alignement * @{*/#define DAC_Align_12b_R                    ((uint32_t)0x00000000)
#define DAC_Align_12b_L                    ((uint32_t)0x00000004)
#define DAC_Align_8b_R                     ((uint32_t)0x00000008)
#define IS_DAC_ALIGN(ALIGN) (((ALIGN) == DAC_Align_12b_R) || \((ALIGN) == DAC_Align_12b_L) || \((ALIGN) == DAC_Align_8b_R))

DAC_wave_generation

/** @defgroup DAC_wave_generation * @{*/#define DAC_Wave_Noise                     ((uint32_t)0x00000040)
#define DAC_Wave_Triangle                  ((uint32_t)0x00000080)
#define IS_DAC_WAVE(WAVE) (((WAVE) == DAC_Wave_Noise) || \((WAVE) == DAC_Wave_Triangle))

其它

/** @defgroup DAC_data * @{*/#define IS_DAC_DATA(DATA) ((DATA) <= 0xFFF0)
/*** @}*//** @defgroup DAC_interrupts_definition * @{*/
#define DAC_IT_DMAUDR                      ((uint32_t)0x00002000)
#define IS_DAC_IT(IT) (((IT) == DAC_IT_DMAUDR)) /*** @}*/ /** @defgroup DAC_flags_definition * @{*/ #define DAC_FLAG_DMAUDR                    ((uint32_t)0x00002000)
#define IS_DAC_FLAG(FLAG) (((FLAG) == DAC_FLAG_DMAUDR))  

03. 相关函数

/*  Function used to set the DAC configuration to the default reset state *****/
void DAC_DeInit(void);/*  DAC channels configuration: trigger, output buffer, data format functions */
void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct);
void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct);
void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState);
void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState);
void DAC_DualSoftwareTriggerCmd(FunctionalState NewState);
void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState);
void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);
void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data);
void DAC_SetDualChannelData(uint32_t DAC_Align, uint16_t Data2, uint16_t Data1);
uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel);/* DMA management functions ***************************************************/
void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState);/* Interrupts and flags management functions **********************************/
void DAC_ITConfig(uint32_t DAC_Channel, uint32_t DAC_IT, FunctionalState NewState);
FlagStatus DAC_GetFlagStatus(uint32_t DAC_Channel, uint32_t DAC_FLAG);
void DAC_ClearFlag(uint32_t DAC_Channel, uint32_t DAC_FLAG);
ITStatus DAC_GetITStatus(uint32_t DAC_Channel, uint32_t DAC_IT);
void DAC_ClearITPendingBit(uint32_t DAC_Channel, uint32_t DAC_IT);

04. 结构体封装

/** * @brief Digital to Analog Converter*/typedef struct
{__IO uint32_t CR;       /*!< DAC control register,                                    Address offset: 0x00 */__IO uint32_t SWTRIGR;  /*!< DAC software trigger register,                           Address offset: 0x04 */__IO uint32_t DHR12R1;  /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */__IO uint32_t DHR12L1;  /*!< DAC channel1 12-bit left aligned data holding register,  Address offset: 0x0C */__IO uint32_t DHR8R1;   /*!< DAC channel1 8-bit right aligned data holding register,  Address offset: 0x10 */__IO uint32_t DHR12R2;  /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */__IO uint32_t DHR12L2;  /*!< DAC channel2 12-bit left aligned data holding register,  Address offset: 0x18 */__IO uint32_t DHR8R2;   /*!< DAC channel2 8-bit right-aligned data holding register,  Address offset: 0x1C */__IO uint32_t DHR12RD;  /*!< Dual DAC 12-bit right-aligned data holding register,     Address offset: 0x20 */__IO uint32_t DHR12LD;  /*!< DUAL DAC 12-bit left aligned data holding register,      Address offset: 0x24 */__IO uint32_t DHR8RD;   /*!< DUAL DAC 8-bit right aligned data holding register,      Address offset: 0x28 */__IO uint32_t DOR1;     /*!< DAC channel1 data output register,                       Address offset: 0x2C */__IO uint32_t DOR2;     /*!< DAC channel2 data output register,                       Address offset: 0x30 */__IO uint32_t SR;       /*!< DAC status register,                                     Address offset: 0x34 */
} DAC_TypeDef;

05. 预留

06. 附录

6.1 【STM32】STM32系列教程汇总

网址:【STM32】STM32系列教程汇总

07. 声明

STM32F4xx英文参考手册

【STM32】DAC相关函数和类型相关推荐

  1. 【STM32】RTC相关函数和类型

    00. 目录 文章目录 00. 目录 01. 概述 02. 相关类型 03. 相关函数 04. 结构体封装 05. 预留 06. 附录 07. 声明 01. 概述 RTC相关函数和类型主要在stm32 ...

  2. 【STM32】GPIO相关函数和类型

    00. 目录 文章目录 00. 目录 01. GPIO固件库概述 02. GPIO相关类型 03. GPIO相关宏 04. GPIO相关函数 05. GPIO其它相关 06. 附录 07. 声明 01 ...

  3. RT-Thread系统 STM32 DAC设备改进,直接调用系统DAC驱动函数设置输出电压

    前言 RT-Thread系统官方的驱动支持DAC设备比较晚,还不太完善,所以早期的STM32F1等系列基于芯片的工程中并没有DAC设备的驱动,很多人建议直接调用HAL库中的函数操作DAC,但这样操作并 ...

  4. 基于STM32+DAC+DMA和AD9850的波形发生器

    基于STM32+DAC+DMA和AD9850的波形发生器 试验目的 一.通过STM32单片机DAC+DMA产生频率可调正弦波.三角波.锯齿波.方波. 二.使用STM32驱动AD9850波形发生模块产生 ...

  5. STM32 DAC DMA 使用

    目的:STM32 DAC DMA 环形发送音频数据:(ffmpeg.exe 可以将一些常见的音频文件转为原始数据,很强大): 用到的外设:DAC ,TIM,DMA DCA配置 TIM配置 加入代码 H ...

  6. 【STM32】SPI相关函数和类型

    00. 目录 文章目录 00. 目录 01. SPI简介 02. 相关类型 03. 相关函数 04. 结构体封装 05. 预留 06. 附录 07. 声明 01. SPI简介 SPI 是英语 Seri ...

  7. 【STM32】I2C相关函数和类型

    00. 目录 文章目录 00. 目录 01. I2C简介 02. 相关类型 03. 相关函数 04. 结构体封装 05. 预留 06. 附录 07. 声明 01. I2C简介 I2C(内部集成电路)总 ...

  8. 【STM32】DMA相关函数和类型

    00. 目录 文章目录 00. 目录 01. DMA简介 02. 相关类型 03. 相关函数 04. 结构体封装 05. 预留 06. 附录 07. 声明 01. DMA简介 DMA,全称为:Dire ...

  9. 【STM32】低功耗相关函数和类型

    00. 目录 文章目录 00. 目录 01. 概述 02. 相关类型 03. 相关函数 04. 结构体封装 05. 预留 06. 附录 07. 声明 01. 概述 很多单片机都有低功耗模式,STM32 ...

最新文章

  1. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
  2. openstack queens 版本 linux bridge起不来的解决办法
  3. Ubuntu中Vim使用技巧
  4. (转)Fedora 17 安装完全指南
  5. 《HTML5 从入门到精通--7.6.3 单元格垂直跨度——rowspan》
  6. Mysql数据库 自动增长 重新从0开始
  7. 缠论k线合并处理python实现_缠论期货:道琼斯工业指数缠论分解体系5F趋势背驰,3买能否构筑成功?...
  8. linux printf 底层api,printf · Linux C API 参考手册 · 看云
  9. Android文本输入框EditText方法说明和属性
  10. adb shell网络命令nestat、ping、netcfg、ip操作实例解释
  11. 利用urllib读取JSON,然后将JSON解析为Python对象 —— python学习笔记
  12. Arduino and the SPI bus
  13. MSSQLSERVER 2019修改数据库文件存放路径的简单实现
  14. 基于ARCGIS二次开发可视化开发环境搭建(JAVA)
  15. Html5结合nodejs实现保存图片到硬盘或数据库的方法
  16. 图论:并查集求最小环
  17. i3wm中截图软件flameshot deepin-screenshot
  18. 《Photoshop Lightroom4 经典教程》—第2课2.1节入门
  19. CSS样式词典(全)
  20. 产品追溯遇到了NFT

热门文章

  1. 最大熵学习笔记(六)优缺点分析
  2. MainService流程
  3. 创建可按比例调整的布局的 Windows 窗体
  4. c#可移动不规则窗体
  5. 什么能在main()函数之前或之后执行
  6. 设计一个简单的缓存容器
  7. java判断或_Java 条件判断
  8. C语言学习之求一个3×3的整型矩阵对角线元素之和
  9. 列表数据提交_Mybatis-实现数据的增删改查
  10. 随机变量的分布函数-定义域问题