找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2295|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

stm32f4xxDAC實(shí)驗(yàn)源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:340141 發(fā)表于 2018-5-28 21:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32f4xxDAC實(shí)驗(yàn)代碼
實(shí)驗(yàn)現(xiàn)象:
    本實(shí)驗(yàn)利用按鍵(KEY1/KEY_UP兩個(gè)按鍵,或USMART)控制STM32F4內(nèi)部DAC模塊的通道1來(lái)輸出電壓,通過(guò)ADC1的
    通道5采集DAC的輸出電壓,在LCD模塊上面顯示ADC獲取到的電壓值以及DAC的設(shè)定輸出電壓值等信息。同時(shí)可以通
    過(guò)usmart調(diào)用Dac1_Set_Vol函數(shù),來(lái)直接設(shè)置DAC輸出電壓。
   
注意事項(xiàng):
    1,4.3寸和7寸屏需要比較大電流,USB供電可能不足,請(qǐng)用外部電源適配器(推薦外接12V 1A電源).
    2,本例程在LCD_Init函數(shù)里面(在ILI93xx.c),用到了printf,如果不初始化串口1,將導(dǎo)致液晶無(wú)法顯示!!
    3,ADC和DAC的參考電壓默認(rèn)通過(guò)P7連接在VDDA上面(3.3V),所以默認(rèn)參考電壓是3.3V  
    4,通過(guò)跳線帽短接多功能接口(P12)的ADC和DAC,即可實(shí)現(xiàn)自測(cè)試(AD讀取DA值,顯示在LCD上)

單片機(jī)源程序如下:
  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);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
  17.         delay_init(168);      //初始化延時(shí)函數(shù)
  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;//設(shè)置字體為藍(lán)色               
  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);//設(shè)置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);//設(shè)置DAC值
  50.                 }         
  51.                 if(t==10||key==KEY1_PRES||key==WKUP_PRES)         //WKUP/KEY1按下了,或者定時(shí)時(shí)間到了
  52.                 {          
  53.                         adcx=DAC_GetDataOutputValue(DAC_Channel_1);//讀取前面設(shè)置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);                //顯示電壓值整數(shù)部分
  58.                         temp-=adcx;
  59.                         temp*=1000;
  60.                         LCD_ShowxNum(110,170,temp,3,16,0X80);            //顯示電壓值的小數(shù)部分
  61.                         adcx=Get_Adc_Average(ADC_Channel_5,10);                //得到ADC轉(zhuǎn)換值          
  62.                         temp=(float)adcx*(3.3/4096);                                //得到ADC電壓值
  63.                         adcx=temp;
  64.                         LCD_ShowxNum(94,190,temp,1,16,0);               //顯示電壓值整數(shù)部分
  65.                         temp-=adcx;
  66.                         temp*=1000;
  67.                         LCD_ShowxNum(110,190,temp,3,16,0X80);           //顯示電壓值的小數(shù)部分
  68.                         LED0=!LED0;          
  69.                         t=0;
  70.                 }            
  71.                 delay_ms(10);         
  72.         }       
  73. }

復(fù)制代碼

所有資料51hei提供下載:
DAC實(shí)驗(yàn).zip (545.31 KB, 下載次數(shù): 8)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表