栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

DAC实验·笔记(1)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DAC实验·笔记(1)

 

目录

 1.DAC简介

2.配置步骤


1.DAC简介         STM32 的 DAC 模块 ( 数字 / 模拟转换模块 ) 是 12 位数字输入,电压输出型的 DAC 。 DAC 可以配置为 8 位或 12 位模式,也可以与 DMA 控制器配合使用。 DAC 工作在 12 位模式时, 数据可以设置成左对齐或右对齐。 DAC 模块有 2 个输出通道,每个通道都有单独的转换器。 在双 DAC 模式下, 2 个通道可以独立地进行转换,也可以同时进行转换并同步地更新 2 个 通道的输出。          DAC 模块主要特点有: ① 2 个 DAC 转换器:每个转换器对应 1 个输出通道 ② 8 位或者 12 位单调输出 ③ 12 位模式下数据左对齐或者右对齐 ④ 同步更新功能 ⑤ 噪声波形生成 ⑥ 三角波形生成 ⑦ 双 DAC 通道同时或者分别转换 ⑧ 每个通道都有 DMA 功能         DAC 输出是受 DORx 寄存器直接控制的,但是我们不能直接往 DORx 寄存器写入数据,而是通过 DHRx 间接的传给 DORx 寄存器,实现对 DAC 输出的控制。前面我们提到,STM32 DAC 支持 8/12 位模式, 8 位模式的时候是固定的右对齐的,而 12 位模式又可以设置左对齐 / 右对齐。单 DAC 通道 x ,总共有 3 种情况: ① 8 位数据右对齐:用户将数据写入 DAC_DHR8Rx[7:0] 位(实际是存入 DHRx[11:4] 位)。 ② 12 位数据左对齐:用户将数据写入 DAC_DHR12Lx[15:4] 位(实际是存入 DHRx[11:0] 位)。 ③ 12 位数据右对齐:用户将数据写入 DAC_DHR12Rx[11:0] 位(实际是存入 DHRx[11:0] 位)。 如果没有选中硬件触发 ( 寄存器 DAC_CR1 的 TENx 位置’ 0 ’),存入寄存器 DAC_DHRx 的数据会在一个 APB1 时钟周期后自动传至寄存器 DAC_DORx 。如果选中硬件触发 ( 寄存器 DAC_CR1 的 TENx 位置’ 1 ’ ) ,数据传输在触发发生以后 3 个 APB1 时钟周期后完成。 一 旦数据从 DAC_DHRx 寄存器装入 DAC_DORx 寄存器,在经过时间 t之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。 t的典型值为 3us ,最大是 4us 。所以 DAC 的转换速度最快是 250K 左右。

首先,我们来看 DAC 通道 1 使能位 (EN1) ,该位用来控制 DAC 通道 1 使能的,本章我们就是用的 DAC 通道 1 ,所以该位设置为 1 。 再看关闭 DAC 通道 1 输出缓存控制位( BOFF1 ),这里 STM32 的 DAC 输出缓存做的 有些不好,如果使能的话,虽然输出能力强一点,但是输出没法到 0 ,所以本章我们不使用输出缓存。即设置该位为 1 。 DAC 通道 1 触发使能位( TEN1 ),该位用来控制是否使用触发,里我们不使用触发, 所以设置该位为 0 。 DAC 通道 1 触发选择位( TSEL1[2:0] ),这里我们没用到外部触发,所以设置这几个位 为 0 就行了。 DAC 通道 1 噪声 / 三角波生成使能位( WAVE1[1:0] ),这里我们同样没用到波形发生器, 故也设置为 0 即可。 DAC 通道 1 屏蔽 / 复制选择器( MAMP[3:0] ),这些位仅在使用了波形发生器的时候有

用,本章没有用到波形发生器,故设置为 0 就可以了。

2.配置步骤 1 )开启 PA 口时钟,设置 PA4 为模拟输入。 2 )使能 DAC1 时钟。 3 )初始化 DAC, 设置 DAC 的工作模式。 4 )使能 DAC 转换通道 5 )设置 DAC 的输出值
void Dac1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitType;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //①使能 PA 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //②使能 DAC 时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //①初始化 GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_4) ; //PA.4 输出高
DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1 输出缓存关
DAC_Init(DAC_Channel_1,&DAC_InitType); //③初始化 DAC 通道 1
DAC_Cmd(DAC_Channel_1, ENABLE); //④使能 DAC1
DAC_SetChannel1Data(DAC_Align_12b_R, 0); //⑤12 位右对齐,设置 DAC 初始值
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号