微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 神舟IV实验:使用DAC模块的通道1来输出模拟电压

神舟IV实验:使用DAC模块的通道1来输出模拟电压

时间:10-02 整理:3721RD 点击:

DAC相对比较简单,看寄存器手册,内容不是太多。

同样方式DAC 给 ADC 串口输出。目前一直没有用LCD,木有移植呢

DAC:PA4  ADC:PB1  :

PA4 DAC 1CH 当前AD转换结果为:0xBB8, 百分比为:73%,电压值:2.416992 V.

PB1 ADC 9CH 当前AD转换结果为:0xBB5, 百分比为:73%,电压值:2.414575 V.


正点原子:http://openedv.com/posts/list/12952.htm

通过以上介绍,我们了解了STM32实现DAC输出的相关设置,本章我们将使用DAC模块的通道1来输出模拟电压,其详细设置步骤如下:

1)开启PA口时钟,设置PA4为模拟输入。

STM32F103ZET6的DAC通道1是接在PA4上的,所以,我们先要使能PORTA的时钟,然后设置PA4为模拟输入(虽然是输入,但是STM32内部会连接在DAC模拟输出上)。

2)使能DAC1时钟。

同其他外设一样,要想使用,必须先开启相应的时钟。STM32的DAC模块时钟是由APB1提供的,所以我们先要在APB1ENR寄存器里面设置DAC模块的时钟使能。

3)设置DAC的工作模式。

该部分设置全部通过DAC_CR设置实现,包括:DAC通道1使能、DAC通道1输出缓存关闭、不使用触发、不使用波形发生器等设置。  

4)设置DAC的输出值。

通过前面3个步骤的设置,DAC就可以开始工作了,我们使用12位右对齐数据格式,所以我们通过设置DHR12R1,就可以在DAC输出引脚(PA4)得到不同的电压值了。

最后,再提醒一下大家,本例程,我们使用的是3.3V的参考电压,即Vref+连接VDDA。

  1. Dac1_Init
  2. //DAC通道1输出初始化
  3. //DAC 使用PA4,连接到ADC CH1:PA1接收后输出
  4. void Dac1_Init(void)
  5. {
  6.   
  7.     GPIO_InitTypeDef GPIO_InitStructure;
  8.     DAC_InitTypeDef DAC_InitType;

  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );      //使能PORTA通道时钟
  10.        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );      //使能DAC通道时钟

  11.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                 // 端口配置
  12.      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;          //模拟输入
  13.      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.      GPIO_Init(GPIOA, &GPIO_InitStructure);
  15.     GPIO_SetBits(GPIOA,GPIO_Pin_4)    ;//PA.4 输出高
  16.                     
  17.     DAC_InitType.DAC_Trigger=DAC_Trigger_None;    //不使用触发功能 TEN1=0
  18.     DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
  19.     DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
  20.     DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;    //DAC1输出缓存关闭 BOFF1=1
  21.     DAC_Init(DAC_Channel_1,&DAC_InitType);     //初始化DAC通道1

  22.     DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  23.   
  24.     DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值

  25. }

  26. //读取ADC1的值
  27. //DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值

复制代码

  1. DAC_SetChannel1Data(DAC_Align_12b_R, 2000);//设置DAC值

复制代码

  1. DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值

复制代码

  1. main
  2.         Adc_Init();                  //ADC初始化     PB1
  3.          Dac1_Init();                //DAC初始化     PA4

  4.          DAC_SetChannel1Data(DAC_Align_12b_R, 3000);//设置DAC值
  5.          while(1)
  6.          {
  7.             adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
  8.             temp=(float)adcx*(3.3/4096);
  9.             printf("\r\n PA4 DAC 1CH 当前AD转换结果为:0x%X, 百分比为:%d%%,电压值:%f V.\n\r", adcx, adcx*100/4096, temp);
  10.             Delay_ARMJISHU(10000);
  11.             adcx=Get_Adc_Average(ADC_Channel_9,10);
  12. //            adcx=Get_Adc(ADC_Channel_9);
  13.             temp=(float)adcx*(3.3/4096);
  14.             printf("\r\n PB1 ADC 9CH 当前AD转换结果为:0x%X, 百分比为:%d%%,电压值:%f V.\n\r", adcx, adcx*100/4096, temp);
  15.                     Delay_ARMJISHU(1000000);
  16. }

复制代码

没有加入调节DAC大小的方法,只要调用 DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值  就可以了


很好的东西!学到了。

不错啊,但是没有输出正弦波的例程

谢谢分享谢谢分享谢谢分享
         谢谢分享谢谢分享                       谢谢分享
         谢谢分享谢谢分享                谢谢分享         
                    谢谢分享              谢谢分享谢谢分享谢谢分享
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        分                分
               谢谢分享              谢谢分享        享                享
               谢谢分享              谢谢分享        谢                谢
               谢谢分享              谢谢分享        谢                谢
谢        谢谢分享               谢谢分享       分                分
谢谢     谢谢分享              谢谢分享        享                享
谢谢分 谢谢分享              谢谢分享        谢                谢
谢谢分 谢谢分享                               谢       谢
谢谢分谢谢分享                         谢                 谢
           谢谢谢谢                    分                               分
               谢谢                   享                                     享

支持一下,小编大作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top