zoukankan      html  css  js  c++  java
  • DAC:神舟IV实验

    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为模拟输入。

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

    2)使能DAC1时钟。

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

    3)设置DAC的工作模式。

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

    4)设置DAC的输出值。

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

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

     

    Dac1_Init
     1 //DAC通道1输出初始化
     2 //DAC 使用PA4,连接到ADC CH1:PA1接收后输出
     3 void Dac1_Init(void)
     4 {
     5   
     6     GPIO_InitTypeDef GPIO_InitStructure;
     7     DAC_InitTypeDef DAC_InitType;
     8 
     9     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );      //使能PORTA通道时钟
    10        RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );      //使能DAC通道时钟 
    11 
    12     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                 // 端口配置
    13      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;          //模拟输入
    14      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    15      GPIO_Init(GPIOA, &GPIO_InitStructure);
    16     GPIO_SetBits(GPIOA,GPIO_Pin_4)    ;//PA.4 输出高
    17                     
    18     DAC_InitType.DAC_Trigger=DAC_Trigger_None;    //不使用触发功能 TEN1=0
    19     DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
    20     DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
    21     DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;    //DAC1输出缓存关闭 BOFF1=1
    22     DAC_Init(DAC_Channel_1,&DAC_InitType);     //初始化DAC通道1
    23 
    24     DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
    25   
    26     DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值
    27 
    28 }
    29 
    30 //读取ADC1的值
    31 //DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值

     

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

     

    Get Value
    1 DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
    main
     1         Adc_Init();                  //ADC初始化     PB1
     2          Dac1_Init();                //DAC初始化     PA4
     3 
     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值  就可以了

     

  • 相关阅读:
    测序分析软件-phred的安装
    测序分析软件-trimmomatic的记录
    linux-ubuntu下fastQC的安装及使用
    linux 下统计文本行数
    linux .gz文件 解压缩命令
    启用谷歌浏览器Adobe Flash Player
    「三代组装」使用Pilon对基因组进行polish
    用BUSCO来评估基因组完整性
    linux tar.gz 文件解压缩
    查看jobs详情
  • 原文地址:https://www.cnblogs.com/wwjdwy/p/2965650.html
Copyright © 2011-2022 走看看