STM32使用串口控制DAC输出

通过串口向单片机发送DAC值,使单片机输出对应的电压,并显示在LCD屏幕上

                      我使用的是原子的mini stm32 开发板
 /*这个函数的作用-------输入DAC值  例:0xaa 0x** 0x** 0xab 0x0d 0x0a   ,
 单片机PA4 输出相应电压,显示再LCD屏上。 版本1        */

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才能正确显示

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值