打印
[STM32F1]

STM32的DAC输出始终为参考电压(3.26V),改变不了!

[复制链接]
7250|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiaoyucumt|  楼主 | 2013-12-18 17:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "dac.h"
#include "stm32f10x.h"

void DAC_CH_CONFIG(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        DAC_InitTypeDef DAC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, 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);

        DAC_DeInit();
    DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software ; //软件触发
        //以下两句的作用为关闭DAC端口的输出三角波形功能以及关闭其输出波形的电压幅值
        DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
        DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
        //关闭缓存,DAC端口不接负载时可不用缓存
        DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
       
       
        DAC_Init( DAC_Channel_1, &DAC_InitStructure ); //初始化
        DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC1 通
       

        DAC_SetChannel1Data(DAC_Align_12b_R, 0x0000); //写入初始值0
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE); ///软件触发转换

}
void DAC_SET(void)
{
        DAC_SetChannel1Data(DAC_Align_12b_R, 0x5ff);       
        DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);




}

int main(void)
{
        DAC_CH_CONFIG();
        DAC_SET();
    while(1)
        {
       
        }                  
}
使用的CPU 是stm32f103vet6  在开发板的PA4口测量的输出电压始终是3.26V(实测DAV的参考电压为3.26V),改变DAC_SetChannel1Data(DAC_Align_12b_R, 0x5ff);中的值 ,输出 电压值 不变! 求各位帮忙看下,不盛感激!
沙发
fengdingkusong| | 2013-12-19 00:49 | 只看该作者
我又在这里碰到你了!!!

使用特权

评论回复
板凳
fengdingkusong| | 2013-12-19 00:51 | 只看该作者
不知道跟amo里面是不是一个,哈哈

使用特权

评论回复
地板
xiaoyucumt|  楼主 | 2013-12-20 10:00 | 只看该作者
fengdingkusong 发表于 2013-12-19 00:51
不知道跟amo里面是不是一个,哈哈

呵呵,是的啊, 这个问题纠结死我了,用火哥的输出波形的程序 ,可以在输出口看到波形,可是用这个输出电压的程序测量的结果 就是不对!

使用特权

评论回复
5
negiul| | 2014-7-30 15:25 | 只看该作者
有类似问题,不知道怎么改变输出固定电压的值呀!!!!

使用特权

评论回复
6
negiul| | 2014-7-30 15:50 | 只看该作者
请问这个问题是怎么解决的呀?

使用特权

评论回复
7
icecut| | 2014-7-30 16:37 | 只看该作者
去官网找个例程..

使用特权

评论回复
8
香水城| | 2014-7-30 17:00 | 只看该作者
第一,在调试状态下,看看DAC模块的寄存器配置成功了么。否则如若DAC模块的时钟没有使能,寄存器配置完全没有成功,相当于DAC就没有开始工作

第二,PA4的外面接的什么?悬空状态下看看输出值如何?

第三,比较官网上DAC例程的代码。

使用特权

评论回复
9
negiul| | 2014-8-2 20:50 | 只看该作者
您好,我有个问题想问一下,关于STM32DA  AD 在设置的时候,软件触发是什么原理呢,没弄明白就一直纠结着,是在程序运行的时候,按照某个频率在触发还是说因为程序
DAC_SetChannel1Data(DAC_Align_12b_R, 4095);     
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); 这两句来实现的?

使用特权

评论回复
10
negiul| | 2014-8-11 21:17 | 只看该作者
icecut 发表于 2014-7-30 16:37
去官网找个例程..

请版主帮忙,我查数据手册和很多例程,但仍然有几个问题弄不懂,能指教一下吗

        DAC_SetDualChannelData(DAC_Align_12b_L, 2047, 4095);
   
                                                
    DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);   
    DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE);   
   printf("\r\n The Value is : %d ,%d\r\n",DAC_GetDataOutputValue(DAC_Channel_1),DAC_GetDataOutputValue(DAC_Channel_2));  
   

我是这样配置的,串口输出The Value is :255,,127
不是很明白这代表的是什么?

2、而且数据手册上说取值范围为0~4095,输出值是最大Vref,但是我调程序时把值设置成5095串口仍然输出,且值变大,不太明,输白这是为什么?
3、我想使用DA转换的值,但是手册上也有说明,GPIO口设置成AIN模式输入模式怎么输出数据呢,还是要设置其他什么值?

使用特权

评论回复
11
negiul| | 2014-8-11 21:18 | 只看该作者
本帖最后由 negiul 于 2014-8-11 21:20 编辑
香水城 发表于 2014-7-30 17:00
第一,在调试状态下,看看DAC模块的寄存器配置成功了么。否则如若DAC模块的时钟没有使能,寄存器配置完全没 ...

看了很多例子,也研究了数据手册,但是还是有些问题,版主能指教一下 吗?

        DAC_SetDualChannelData(DAC_Align_12b_L, 2047, 4095);
   
                                                
    DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);   
    DAC_SoftwareTriggerCmd(DAC_Channel_2,ENABLE);   
   printf("\r\n The Value is : %d ,%d\r\n",DAC_GetDataOutputValue(DAC_Channel_1),DAC_GetDataOutputValue(DAC_Channel_2));  
   

我是这样配置的,串口输出The Value is :255,,127
不是很明白这代表的是什么?

2、而且数据手册上说取值范围为0~4095,输出值是最大Vref,但是我调程序时把值设置成5095串口仍然输出,且值变大,不太明,输白这是为什么?
3、我想使用DA转换的值,但是手册上也有说明,GPIO口设置成AIN模式输入模式怎么输出数据呢,还是要设置其他什么值?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝