完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include “dac.h”
//DAC 通道 1 输出初始化 void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitType; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //①使能 PA 时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //②使能DAC时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //①初始化 GPIOA GPIO_SetBits(GPIOA,GPIO_Pin_4) ; //PA.4 输出高 DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能 DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生 DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0; DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1 输出缓存关 DAC_Init(DAC_Channel_1,&DAC_InitType); //③初始化 DAC 通道 1 DAC_Cmd(DAC_Channel_1, ENABLE); //④使能 DAC1 DAC_SetChannel1Data(DAC_Align_12b_R, 0); //⑤12 位右对齐,设置 DAC 初始值 } //设置通道 1 输出电压 //vol:0~3300,代表 0~3.3V void Dac1_Set_Vol(u16 vol) { float temp=vol; temp/=1000; temp=temp4096/3.3; DAC_SetChannel1Data(DAC_Align_12b_R,temp);// 12 位右对齐设置 DAC 值 } 此部分代码就 2 个函数,Dac1_Init 函数用于初始化 DAC 通道 1。步骤①~⑤基本上是按我 们上面的步骤来初始化的,经过这个初始化之后,我们就可以正常使用 DAC 通道 1 了。第二 个函数 Dac1_Set_Vol,用于设置 DAC 通道 1 的输出电压,通过 USMART 调用该函数,就可以 随意设置 DAC 通道 1 的输出电压了。 接下来我们看看 main 函数如下: int main(void) { u16 adcx; float temp; u8 t=0; u16 dacval=0; u8 key; delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2 uart_init(115200); //串口初始化波特率为 115200 KEY_Init(); //初始化按键程序 LED_Init(); //LED 端口初始化 LCD_Init(); //LCD 初始化 usmart_dev.init(72); //初始化 USMART Adc_Init(); //ADC 初始化 Dac1_Init(); //DAC 初始化 POINT_COLOR=RED;//设置字体为红色 LCD_ShowString(30,50,200,16,16,“WarShip STM32”); 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,“2015/1/15”); LCD_ShowString(30,130,200,16,16,“WK_UP:+ KEY1:-”); //显示提示信息 POINT_COLOR=BLUE;//设置字体为蓝色 LCD_ShowString(60,150,200,16,16,“DAC VAL:”); LCD_ShowString(60,170,200,16,16,“DAC VOL:0.000V”); LCD_ShowString(60,190,200,16,16,“ADC VOL:0.000V”); DAC_SetChannel1Data(DAC_Align_12b_R, 0); //初始值为 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== KEY1_PRES) { if(dacval>200)dacval-=200; else dacval=0; DAC_SetChannel1Data(DAC_Align_12b_R, dacval); //设置 DAC 值 } if(t10||keyKEY1_PRES||key==WKUP_PRES) { adcx=DAC_GetDataOutputValue(DAC_Channel_1); //读取前面设置 DAC 的值 LCD_ShowxNum(124,150,adcx,4,16,0); //显示 DAC 寄存器值 temp=(float)adcx(3.3/4096); //得到 DAC 电压值 adcx=temp; LCD_ShowxNum(124,170,temp,1,16,0); //显示电压值整数部分 temp-=adcx; temp*=1000; LCD_ShowxNum(140,170,temp,3,16,0X80); //显示电压值的小数部分 adcx=Get_Adc_Average(ADC_Channel_1,10); //得到 ADC 转换值 temp=(float)adcx*(3.3/4096); //得到 ADC 电压值 adcx=temp; LCD_ShowxNum(124,190,temp,1,16,0); //显示电压值整数部分 temp-=adcx; temp*=1000; LCD_ShowxNum(140,190,temp,3,16,0X80); //显示电压值的小数部分 LED0=!LED0; t=0; } delay_ms(10); } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
641浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 14:23 , Processed in 0.821584 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号