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上)
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "lcd.h"
- #include "adc.h"
- #include "dac.h"
- #include "key.h"
- int main(void)
- {
- u16 adcx;
- float temp;
- u8 t=0;
- u16 dacval=0;
- u8 key;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
- delay_init(168); //初始化延时函数
- uart_init(115200); //初始化串口波特率为115200
-
- LED_Init(); //初始化LED
- LCD_Init(); //LCD初始化
- Adc_Init(); //adc初始化
- KEY_Init(); //按键初始化
- Dac1_Init(); //DAC通道1初始化
- POINT_COLOR=RED;
- LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
- LCD_ShowString(30,70,200,16,16,"DAC TEST");
- LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
- LCD_ShowString(30,110,200,16,16,"2014/5/6");
- LCD_ShowString(30,130,200,16,16,"WK_UP:+ KEY1:-");
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(30,150,200,16,16,"DAC VAL:");
- LCD_ShowString(30,170,200,16,16,"DAC VOL:0.000V");
- LCD_ShowString(30,190,200,16,16,"ADC VOL:0.000V");
-
- DAC_SetChannel1Data(DAC_Align_12b_R,dacval);//初始值为0
- while(1)
- {
- t++;
- key=KEY_Scan(0);
- if(key==WKUP_PRES)
- {
- if(dacval<4000)dacval+=200;
- DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
- }else if(key==2)
- {
- if(dacval>200)dacval-=200;
- else dacval=0;
- DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC值
- }
- if(t==10||key==KEY1_PRES||key==WKUP_PRES) //WKUP/KEY1按下了,或者定时时间到了
- {
- adcx=DAC_GetDataOutputValue(DAC_Channel_1);//读取前面设置DAC的值
- LCD_ShowxNum(94,150,adcx,4,16,0); //显示DAC寄存器值
- temp=(float)adcx*(3.3/4096); //得到DAC电压值
- adcx=temp;
- LCD_ShowxNum(94,170,temp,1,16,0); //显示电压值整数部分
- temp-=adcx;
- temp*=1000;
- LCD_ShowxNum(110,170,temp,3,16,0X80); //显示电压值的小数部分
- adcx=Get_Adc_Average(ADC_Channel_5,10); //得到ADC转换值
- temp=(float)adcx*(3.3/4096); //得到ADC电压值
- adcx=temp;
- LCD_ShowxNum(94,190,temp,1,16,0); //显示电压值整数部分
- temp-=adcx;
- temp*=1000;
- LCD_ShowxNum(110,190,temp,3,16,0X80); //显示电压值的小数部分
- LED0=!LED0;
- t=0;
- }
- delay_ms(10);
- }
- }
复制代码
所有资料51hei提供下载:
DAC实验.zip
(545.31 KB, 下载次数: 8)
|