STM8L15x系列DAC的使用

在项目中偶尔会使用DA转换器,我使用的MCU是STM8L151G6U6。我是用的是PB4作为DA输出管脚,查阅该芯片的Reference manual手册可知,PB4是属于DAC_OUT1,即DAC通道一。
STM8L15x系列DAC的使用_第1张图片
再查阅PB4输入输出控制,PB4对应的是开关15。
STM8L15x系列DAC的使用_第2张图片
下面是我用软件触发模式使用的DAC配置代码。
dac.h头文件代码如下:

#ifndef __DAC_H__
#define __DAC_H__

#ifdef __cplusplus
extern "C"{
#endif

#include "stm8l15x.h"

/* DAC_OUT ---> PB4(DAC_OUT) */
#define    DAC_OUT_PORT    (GPIOB)
#define    DAC_OUT_PIN     (GPIO_Pin_4)

/* Function prototype */
void DAC_Init(void);

#ifdef __cplusplus
}
#endif

#endif  /* End define macro __DAC_H__ */

dac.c源文件代码如下:

#include "dac.h"

/*
** @ Brief: Init DAC
** @ Parameter: None
** @ Return: None
**/
void DAC_Init(void)
{
        /* Configure DAC GPIO pin */
        GPIO_Init(DAC_OUT_PORT, DAC_OUT_PIN, GPIO_Mode_In_FL_No_IT);

        /* Enable comparator clock */
        CLK_PeripheralClockConfig(CLK_Peripheral_COMP,ENABLE);

        /* Enable DAC Clock */
        CLK_PeripheralClockConfig(CLK_Peripheral_DAC, ENABLE);

        /* Enable PB4 input output switch */
        SYSCFG_RIIOSwitchConfig(RI_IOSwitch_15, ENABLE);

        /* Init DAC channel 1 output and enable output buffer */
        DAC_DeInit();
        DAC_Init(DAC_Channel_1, DAC_Trigger_Software, DAC_OutputBuffer_Enable);

        /* Enable the selected DAC channel wave generation */
        DAC_WaveGenerationCmd(DAC_Channel_1, DAC_Wave_Triangle, ENABLE);

        /* Select DAC Triangle Wave Generation Amplitude according to the specified parameters */
        DAC_SetTriangleWaveAmplitude(DAC_Channel_1, DAC_TriangleAmplitude_4095);

        /* Enables the specified DAC channel. */
        DAC_Cmd(DAC_Channel_1, ENABLE);
}

在main.c中,使用DAC转换器的代码如下;

#include "dac.h"

void main(void)
{
    uint16_t DACData = 0;

    DAC_Init();

    while(1)
    {
        for(DACData = 0; DACData < 4096; DACData++)
        {
            DAC_SetChannel1Data(DAC_Align_12b_R, DACData);

            DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
        }
    }
}

用示波器测量PB4会发现,电压值从小到大循环往复。转换关系为:

输出电压 = DACData * 参考电压 / 4096;

其中4096为DAC触发振幅,由初始化参数DAC_TriangleAmplitude_4095设定,可以更改;DACData为输入的需要转换的值,范围0~触发振幅(这里为4096);参考电压一般为板子工作的所需的正常电压,我的为3.3V。

你可能感兴趣的:(C语言,嵌入式,STM8)