找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1820|回复: 0
收起左侧

stm32f4xxDAC实验源码

[复制链接]
ID:340141 发表于 2018-5-28 21:40 | 显示全部楼层 |阅读模式
stm32f4xxDAC实验代码
实验现象:
    本实验利用按键(KEY1/KEY_UP两个按键,或USMART)控制STM32F4内部DAC模块的通道1来输出电压,通过ADC1的
    通道5采集DAC的输出电压,在LCD模块上面显示ADC获取到的电压值以及DAC的设定输出电压值等信息。同时可以通
    过usmart调用Dac1_Set_Vol函数,来直接设置DAC输出电压。
   
注意事项:
    1,4.3寸和7寸屏需要比较大电流,USB供电可能不足,请用外部电源适配器(推荐外接12V 1A电源).
    2,本例程在LCD_Init函数里面(在ILI93xx.c),用到了printf,如果不初始化串口1,将导致液晶无法显示!!
    3,ADC和DAC的参考电压默认通过P7连接在VDDA上面(3.3V),所以默认参考电压是3.3V  
    4,通过跳线帽短接多功能接口(P12)的ADC和DAC,即可实现自测试(AD读取DA值,显示在LCD上)

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include "dac.h"
  8. #include "key.h"


  9. int main(void)
  10. {
  11.         u16 adcx;
  12.         float temp;
  13.         u8 t=0;         
  14.         u16 dacval=0;
  15.         u8 key;       
  16.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  17.         delay_init(168);      //初始化延时函数
  18.         uart_init(115200);                //初始化串口波特率为115200
  19.        
  20.         LED_Init();                                        //初始化LED
  21.         LCD_Init();                                        //LCD初始化
  22.         Adc_Init();                                 //adc初始化
  23.         KEY_Init();                                 //按键初始化
  24.         Dac1_Init();                                 //DAC通道1初始化       
  25.         POINT_COLOR=RED;
  26.         LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");       
  27.         LCD_ShowString(30,70,200,16,16,"DAC TEST");       
  28.         LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
  29.         LCD_ShowString(30,110,200,16,16,"2014/5/6");         
  30.         LCD_ShowString(30,130,200,16,16,"WK_UP:+  KEY1:-");         
  31.         POINT_COLOR=BLUE;//设置字体为蓝色               
  32.         LCD_ShowString(30,150,200,16,16,"DAC VAL:");             
  33.         LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");             
  34.         LCD_ShowString(30,190,200,16,16,"ADC VOL:0.000V");
  35.        
  36.   DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值为0       
  37.         while(1)
  38.         {
  39.                 t++;
  40.                 key=KEY_Scan(0);                          
  41.                 if(key==WKUP_PRES)
  42.                 {                 
  43.                         if(dacval<4000)dacval+=200;
  44.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
  45.                 }else if(key==2)       
  46.                 {
  47.                         if(dacval>200)dacval-=200;
  48.                         else dacval=0;
  49.                         DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
  50.                 }         
  51.                 if(t==10||key==KEY1_PRES||key==WKUP_PRES)         //WKUP/KEY1按下了,或者定时时间到了
  52.                 {          
  53.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
  54.                         LCD_ShowxNum(94,150,adcx,4,16,0);                //显示DAC寄存器值
  55.                         temp=(float)adcx*(3.3/4096);                                 //得到DAC电压值
  56.                         adcx=temp;
  57.                         LCD_ShowxNum(94,170,temp,1,16,0);                //显示电压值整数部分
  58.                         temp-=adcx;
  59.                         temp*=1000;
  60.                         LCD_ShowxNum(110,170,temp,3,16,0X80);            //显示电压值的小数部分
  61.                         adcx=Get_Adc_Average(ADC_Channel_5,10);                //得到ADC转换值          
  62.                         temp=(float)adcx*(3.3/4096);                                //得到ADC电压值
  63.                         adcx=temp;
  64.                         LCD_ShowxNum(94,190,temp,1,16,0);               //显示电压值整数部分
  65.                         temp-=adcx;
  66.                         temp*=1000;
  67.                         LCD_ShowxNum(110,190,temp,3,16,0X80);           //显示电压值的小数部分
  68.                         LED0=!LED0;          
  69.                         t=0;
  70.                 }            
  71.                 delay_ms(10);         
  72.         }       
  73. }

复制代码

所有资料51hei提供下载:
DAC实验.zip (545.31 KB, 下载次数: 8)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表