无薪税绵 发表于 2018-3-1 10:23:53

本帖最后由 无薪税绵 于 2018-3-1 11:13 编辑

看看 VDDA 和 VSSA 的电压是否正常。

void MyDAC_Init(void)                        //DAC channel1 Configuration
{
          unsigned int tmpreg1=0,tmpreg2=0;
         RCC->APB2ENR|=1<<2;                     //使能PORTA时钟
      RCC->APB1ENR|=RCC_APB1Periph_DAC;         //使能DAC时钟
         GPIOA->CRL&=0XFF00FFFF;
      GPIOA->CRL|=0X00440000;                   //PA4,5 浮空输入            

          tmpreg1=DAC->CR;                        //Get the DAC CR value
          tmpreg1&=~(CR_CLEAR_Mask<<DAC_Channel_1); //Clear BOFFx, TENx, TSELx, WAVEx and MAMPx bits
          tmpreg2=(DAC_Trigger_Software|DAC_WaveGeneration_None|DAC_LFSRUnmask_Bits8_0|DAC_OutputBuffer_Enable);
          tmpreg1|=tmpreg2<<DAC_Channel_1;          //Calculate CR register value depending on DAC_Channel
          DAC->CR=tmpreg1;                        //Write to DAC CR
      DAC->CR|=CR_EN_Set<<DAC_Channel_1;      //DAC Channel1使能,PA4自动连接到DAC
      DAC1_SetData(2900);

}

void DAC1_SetData(u16 data)
{
      DAC->DHR12R1=data;                        //通道1的12位右对齐数据
      DAC->SWTRIGR|=0x01;                     //软件启动转换
}


再上个STM32F05X系列的参考代码:

请把扩展名改为.7z再解压。

toofree 发表于 2018-3-1 10:35:31

本帖最后由 toofree 于 2018-3-1 10:40 编辑

刚看了STM32F0的固件库,DAC样例非常简单。只不过触发方式为 DAC_Trigger_None,初始化完成后,随时刷DAC_SetChannel1Data(DAC_Align_12b_R, ADCVal);,DAC立即输出。






总之,先跑个样例程序,排除管脚或其它硬件故障,然后再自己发挥。

feixiang20 发表于 2018-3-1 11:04:13

可能是硬件连接异常,输出0的话,再检查下配置是否正确,不行的话,再去查官方资料DAC部分,尝试样例检测,再来对比DAC_Init(DAC_Channel_1, &dactype);DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_SetChannel1Data(DAC_Align_12b_R,修改了看看对比下);DAC_SoftwareTriggerCmd(DAC_Channel_1, ENABLE);

哈佛祖安智 发表于 2018-3-1 17:13:59

用HAL库的例程试试吧,标准库过时了

hello_bug 发表于 2018-3-1 22:36:22

DAC是复用功能吗,是否需要开启AFIO复用。另外就是DAC的配置是否正确,先看看官方例程吧。
页: 1 [2]
查看完整版本: stmf32f051 dac 无论怎么配置 pa4都没有输出