完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
通过串口向单片机发送DAC值,使单片机输出对应的电压,并显示在LCD屏幕上 我使用的是原子的mini stm32 开发板 /*这个函数的作用-------输入DAC值 例:0xaa 0x** 0x** 0xab 0x0d 0x0a , 单片机PA4 输出相应电压,显示再LCD屏上。 版本1 */ 1 2 3 main函数 // int main(void) { u16 vol; u16 adcx; float temp; u8 t=0; u16 dacval=0; // //u8 key; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2 delay_init(); //延时函数初始化 uart_init(9600); //串口初始化为9600 LED_Init(); //初始化与LED连接的硬件接口 LCD_Init(); //初始化LCD // KEY_Init(); //按键初始化 Adc_Init(); //ADC初始化 Dac1_Init(); //DAC通道1初始化 POINT_COLOR=RED;//设置字体为红色 //LCD_ShowString(60,50,200,16,16,"Mini STM32"); //LCD_ShowString(60,70,200,16,16,"DAC TEST"); //LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK"); //LCD_ShowString(60,110,200,16,16,"2014/3/9"); //LCD_ShowString(60,130,200,16,16,"WK_UP:+ KEY0:-"); //显示提示信息 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) { if(USART_RX_BUF[0]==0xAA) { if( USART_RX_BUF[3]==0xAB) { if(USART_RX_BUF[1]==0x00) { dacval=USART_RX_BUF[2]; } //如果收到 00 00 ~00 ff之间的数,就是用上面的算法 else if(USART_RX_BUF[1] != 0x00) { vol=USART_RX_BUF[1]<<8; vol=vol | USART_RX_BUF[2]; dacval=vol; //如果收到的01 00~ff ff之间的数,就把收到的数合并成一个数给vol } DAC_SetChannel1Data(DAC_Align_12b_R, dacval);//设置DAC的输出值 } } 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; //*********************************************************************** USART_RX_STA=0; //<-----------USART_RX_STA用完了之后,要清零。 //********************************************************************** delay_ms(10); } } 其他什么也没有修改 比如想要输出2.00V电压 DAC=(2*4096)/3.3 =2482(去除小数点) 2482的十六进制是09B2 在串口助手以16进制发送 aa 09 b2 ab 0d 0a 即可在PA4上测量到19999V电压 另外,ADC是PA1,要将PA1于PA4连接起来,ADC才能正确显示 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 14:07 , Processed in 0.896855 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号