songqian17 发表于 2022-5-6 21:47

DAC通道没有输出

通道1的输出,我改了一下,改成通道2的输出,可是就一直输出最高电平。

void DAC2_Init(void)
{
      GPIO_InitTypeDefGPIO_InitStructure;
      DAC_InitTypeDef DAC_InitStructure;
      
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);//使能DAC时钟
      
      GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//DAC_2
      GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
      GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模拟量输入
      GPIO_Init(GPIOA,&GPIO_InitStructure);
      
      DAC_InitStructure.DAC_Trigger=DAC_Trigger_None;      //不使用触发功能 TEN1=0
      DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
      DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
      DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;      //DAC2输出缓存关闭 BOFF1=1
      DAC_Init(DAC_Channel_2,&DAC_InitStructure);         //初始化DAC通道2
      
      DAC_Cmd(DAC_Channel_2, ENABLE);//使能DAC通道2
      
      //DAC_SetChannel2Data(DAC_Align_12b_R, 0);//12位右对齐数据格式设置DAC值
}


      SysTick_Init(72);
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组 分2组
      LED_Init();
      USART1_Init(9600);
      
      DAC2_Init();
               
      while(1)
      {
                i++;
                if(i%20==0)
                {
                        led1=!led1;
                }

    DAC_SetChannel2Data(DAC_Align_12b_R,0);      
}

在通道一的时候是有用的,就是把其中的channel1改成了channel2 然后管脚4改成了管脚5

guoyt 发表于 2022-5-6 21:49

为什么DAC 的管脚是 模拟输入呢 还不是XX输出,DAC不是输出电压吗?

songqian17 发表于 2022-5-6 21:51

在使能DAC通道之后,管脚会连到DAC的输出。我觉得就是使能没有起作用,但是使能DAC1时有用的,改成2就没有用了

juventus9554 发表于 2022-5-6 21:53

DEBUG的时候 在watch窗口把DAC寄存器都对一遍看看寄存器是不是都配好了

songqian17 发表于 2022-5-6 21:55

调试的时候总是报错。。无限循环在一个地方

jiajs 发表于 2022-5-6 21:57

看晕了,这个难道直接把1修改成2运行不起了?

yszong 发表于 2022-5-6 21:59


用的哪个型号的MCU呢

songqian17 发表于 2022-5-6 22:04

就是把1改成2就2没有输出了。。。。

songqian17 发表于 2022-5-6 22:05

就是把1改成2就2没有输出了。。。。

songqian17 发表于 2022-5-6 22:07

确切的说一直输出最高电压,并不是没有电压输出。

tian111 发表于 2022-5-6 22:09


刚看了下,你的程序也没问题;
改成通道2,无非是寄存器的地址不一样;

dingy 发表于 2022-5-6 22:12

仿真的时候,重新下载程序,选择把FLASH的全部删除看看;

songqian17 发表于 2022-5-6 22:14

刚刚试过了,烧到板子上,连到DAC0有输出800mV,是我设定的,DAC1还是输出3.4V最高电压

juventus9554 发表于 2022-5-6 22:17

检测下 参考电压管脚是不是正常的

songqian17 发表于 2022-5-6 22:21

电压是对的,因为1和2用的是一个参考电压。我刚才想了一下,有可能是2的管脚复用没有调好,我调一下复用

songqian17 发表于 2022-5-6 22:23

没有复用,手册上没有写这个

zhaoxqi 发表于 2022-5-6 22:26

看一下你的GPIO口对应的是哪个通道的ADC,如果你随便换的话对应不上的,肯定没有输出

jlyuan 发表于 2022-5-6 22:28

那就不清楚什么原因了,手上也没有板子测试;

stly 发表于 2022-5-6 22:34

改为软件触发
DAC_InitStructure.DAC_Trigger = DAC_Trigger_Software;

输出:
DAC_SetChannel1Data(DAC_Align_12b_R, Out);
DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);

DAC_SetChannel2Data(DAC_Align_12b_R, Out);
DAC_SoftwareTriggerCmd(DAC_Channel_2, ENABLE);

dengdc 发表于 2022-5-6 22:36

用watch窗口检查寄存器,看对不对
页: [1] 2
查看完整版本: DAC通道没有输出