• STM32——DAC


    0.比较坑啊

      0)stm32f10x板

      1)【GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  //模拟输入】

        引脚设置成模拟输入是为了防干扰

      2)【//DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;  //DAC1输出缓存关闭 BOFF1=1】
        【 DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;  //DAC1输出缓存打开,提高端口驱动能力 BOFF1=0】

        第二句才有一定的驱动能力,否则死活连个灯都不亮

        用另外的板子读取过值,2个代码都能输出理想电压;可第1句代码却无法驱动小灯,估计是电流过小;据说要加电压跟随器

      3)我买的板子并未直接将Vref与电源相连;需要自己去提供参考电压


    1.

      1)GPIOA的时钟是在APB2,DAC的时钟则是在APB1

      2)DAC的通道引脚在电路图里有

        PA4——DAC_OUT1

        PA5——DAC_OUT2

      3)模式有8位和12位;

        为12位模式时,设置的值在4095以内

      3)流程

        设置GPIOA为模拟输出

        不使用触发功能

        不使用波形发生

        屏蔽、幅值设置

        DAC1输出缓存打开【提高端口驱动能力!】

        初始化DAC通道1

        使能DAC1

        设置DAC值

      4)重复修改值调用只用调用以下2句代码

        DAC_SetChannel1Data(DAC_Align_12b_R, Value);
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);


    2.代码:PA4口输出 = 3000 / 4095 * Vref 的电压

    #include <stm32f10x.h>
    
    void GPIO_Config(void);
    void DAC_Config(void);
    void DAC_SetValue(int Value);
        
    int main()
    {
        GPIO_Config();
        DAC_Config();
        
        while(1);
    }
    
    void GPIO_Config()
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
        
        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);
    }
    
    void DAC_Config()
    {
        DAC_InitTypeDef DAC_InitStructure;
        
        //使能DAC通道时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); 
        
        //不使用触发功能 TEN1=0
        DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
        //不使用波形发生
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
        //屏蔽、幅值设置
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude = DAC_LFSRUnmask_Bit0;
        //DAC1输出缓存关闭 BOFF1=1
    //DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
        //DAC1输出缓存打开,提高端口驱动能力 BOFF1=0
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
        //初始化DAC通道1
        DAC_Init(DAC_Channel_1, &DAC_InitStructure);
        //使能DAC1
        DAC_Cmd(DAC_Channel_1, ENABLE);
        //12位右对齐数据格式设置DAC值
        DAC_SetChannel1Data(DAC_Align_12b_R, 3000);
    }
    
    /***************************************
    **
    **设置通道1输出电压
    **反复调用并修改数值仅调用以下2句
    **主函数并未使用,备用
    **
    ***************************************/
    void DAC_SetValue(int Value)
    {
        DAC_SetChannel1Data(DAC_Align_12b_R, Value);
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);
    }
  • 相关阅读:
    error C2955: “std::xx”: 使用 类 模板 需要 模板 参数列表
    打印windows环境变量
    自动化测试覆盖率要到多少才算足够
    每个离谱的bug背后总有一个精彩绝伦的幕后故事
    测试是整个开发过程的瓶颈吗
    如何用指标去度量bug本身的质量情况
    python : 将txt文件中的数据读为numpy数组或列表
    Baxter+Kinect: Robot Teleoperation via Skeleton Tracking and Inverse Kinematics
    安卓环境和配置
    Qt开发经验小技巧181-185
  • 原文地址:https://www.cnblogs.com/maplesnow/p/5397723.html
Copyright © 2020-2023  润新知