嵌入式--DAC实验及其相关库函数功能

一、DAC介绍

1.只有大容量的STM32F10x才具有DAC功能,数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。 DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。DAC模块有2个输出通道,每个通道都有单独的转换器,对应的引脚分别是PA4、PA5。

2.2个DAC转换器:每个转换器对应1个输出通道。8位或者12位单调输出。12位模式下数据左对齐或者右对齐。同步更新功能。噪声波形生成。三角波形生成。双DAC通道同时或者分别转换。每个通道都有DMA功能。外部触发转换。输入参考电压VREF+

3.DAC转换和输出电压:
(1)转换:1.不能直接对寄存器DAC_DORx写入数据,任何输出到DAC通道x的数据都必须写入DAC_DHRx寄存器(数据实际写入DAC_DHR8Rx、 DAC_DHR12Lx、 DAC_DHR12Rx、DAC_DHR8RD、DAC_DHR12LD、或者DAC_DHR12RD寄存器)。
                   2.如果没有选中硬件触发(寄存器DAC_CR1的TENx位置’0’),存入寄存器DAC_DHRx的数据会在一个APB1时钟周期后自动传至寄存器DAC_DORx。如果选中硬件触发(寄存器DAC_CR1的TENx位置’1’),数据传输在触发发生以后3个APB1时钟周期后完成。
                 3.一旦数据从DAC_DHRx寄存器装入DAC_DORx寄存器,在经过时间tSETTLING之后,输出即有效,这段时间的长短依电源电压和模拟输出负载的不同会有所变化。

 

输出电压: 数字输入经过DAC被线性地转换为模拟电压输出,其范围为0到VREF+。任一DAC通道引脚上的输出电压满足下面的关系:DAC输出 = VREF x (DOR / 4095)。

二、DAC相关库函数及功能

1.void DAC_DeInit(void);

初始化DAC寄存器为默认,调用RCC_APB2PeriphResetCmd()函数进行复位。

2.void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct);

1.选择通道 ,一通道还是二通道。2.对DAC参数设置,分别包括:(1)采用那种触发方式触发DAC,(2)生成那种噪声波还是三角波。(3)DAC屏蔽/幅值选择器,通过控制DAC_CR 寄存器进行选择。(4)是否开启DAC输出缓存。

3.void DAC_StructInit(DAC_InitTypeDef* DAC_InitStruct);

 用默认值对DAC进行结构体形式的初始化 ,初始化参数和上面六个参数一样,但都是默认值。

4.void DAC_Cmd(uint32_t DAC_Channel, FunctionalState NewState); 

使能或者失能指定的DAC。 

5.void DAC_DMACmd(uint32_t DAC_Channel, FunctionalState NewState);

 DMA使能。1.选择通道。2.使能

6.void DAC_SoftwareTriggerCmd(uint32_t DAC_Channel, FunctionalState NewState);

 软件触发使能。1.选择通道。2.使能

7.void DAC_DualSoftwareTriggerCmd(FunctionalState NewState); 

 双通道软件触发使能。

8.void DAC_WaveGenerationCmd(uint32_t DAC_Channel, uint32_t DAC_Wave, FunctionalState NewState);

DAC生成波形参数设置。 1.通道选择。2.生成波形选择。3.使能。

9. void DAC_SetChannel1Data(uint32_t DAC_Align, uint16_t Data);

设置通道1数据及其对其方式。12位左对齐/12位右对齐/8位右对齐。 

10.void DAC_SetChannel2Data(uint32_t DAC_Align, uint16_t Data);

 设置通道2数据及其对其方式。12位左对齐/12位右对齐/8位右对齐。

11.uint16_t DAC_GetDataOutputValue(uint32_t DAC_Channel); 

获取输出通道数据值。

三、DAC实验一般配置步骤 

 1)开启 PA 口时钟,设置 PA4 为模拟输入。

使能 DACx 通道之后,相应的 GPIO 引脚(PA4 或者 PA5)会自动与 DAC 的模拟输出相连,设
置为输入,是为了避免额外的干扰。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入

2)使能 DAC1 时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); 

3)初始化 DAC,设置 DAC 的工作模式。

void DAC_Init(uint32_t DAC_Channel, DAC_InitTypeDef* DAC_InitStruct)
4)使能 DAC 转换通道

DAC_Cmd(DAC_Channel_1, ENABLE); //使能 DAC1
5)设置 DAC 的输出值。
DAC_SetChannel1Data(DAC_Align_12b_R, 0);
DAC_GetDataOutputValue(DAC_Channel_1);
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32是一种嵌入处理器,通常被用于开发嵌入系统和应用。要在STM32上实现FFT(快速傅里叶变换)算法,可以通过以下步骤进行: 1. 安装嵌入开发工具:首先,需要安装适用于STM32的嵌入开发工具,如Keil或IAR Embedded Workbench。这些工具提供了编译、调试和下载嵌入应用程序的功能。 2. 编写嵌入应用程序:使用C或C++语言,在嵌入开发工具中编写嵌入应用程序。该程序需要包含FFT算法的实现代码。 3. 导入FFT:从开源资源或第三方提供的FFT中导入算法代码。这些通常包含FFT的逆变换(IFFT)和其他相关函数,可以简化算法的实现过程。 4. 配置STM32:使用STM32的软件开发工具,配置处理器和外设。例如,可以设置用于数据输入和输出的引脚,并使能处理器的相关模块,如ADC(模数转换器)或DAC(数字到模数转换器)。 5. 实现算法:在嵌入应用程序中,调用FFT函数并传递输入数据。通过选择合适的变换长度和不同的窗函数,可以优化FFT算法的性能和准确度。 6. 测试和调试:在嵌入开发工具中,编译并下载应用程序到STM32处理器上。使用调试功能验证算法的正确性,并通过实时观察变量值、调试输出和波形图来调试应用程序。 总之,要在STM32上实现FFT算法,需要了解嵌入开发工具的使用和STM32的配置,以及进行适当的算法实现和调试。这些步骤可以帮助开发人员将FFT算法应用到STM32嵌入系统中,以满足特定应用的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值