STM32 电压采集上位机 C#

工具箱中添加progressBar

 添加一个事件函数,用于串口接收数据,并显示电压值。

 private void PortDataReceivedEvent(object sender, SerialDataReceivedEventArgs args)                         //串口数据接收
        {
           // string str = Convert.ToString(serialPort1.ReadByte());
           string Data = serialPort1.ReadExisting();
            int tempdata = Convert.ToInt32(Data);
           progressBar1.Value= tempdata;
            Int32 num = tempdata, numint = num / 1000, numf = num - numint * 1000;
            
            label3.Text = Convert.ToString(numint)+"."+Convert.ToString(numf);
        }

事件函数需要在窗口函数中添加注册,这样窗口加载后就可以直接进行数据接收

    private void Form1_Load(object sender, EventArgs e)
        {
            SearchAndAddSerialToComboBox(serialPort1, comboBox1);
            //for (int i=1;i<21;i++)
            //{
            //    comboBox1.Items.Add("COM" + i.ToString());
            //}
            //comboBox1.Text = "COM4";
            comboBox2.Text = "115200";
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(PortDataReceivedEvent);
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

        }

由于C#中数据类型转换比较繁琐,所以这里采集到的电压值进行小数点分开赋值给labei3,

当处于3.3V,0V,以及浮空状态时候结果如下:

这里STM32部分采用ADC进行扫描,其中主函数和ADC函数如下:

#include "main.h"

 int main(void)
 {
	 u16 i=1,voltage;	 
  u16 adcx;
	float temp;
	delay_init();	    	 //延时函数初始化	  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
 	LED_Init();			     //LED端口初始化
	LCD_Init();			 	
 	Adc_Init();		  		//ADC初始化
KEY_Init();
	POINT_COLOR=RED;//设置字体为红色 
	
	POINT_COLOR=BLUE;//设置字体为蓝色
	LCD_ShowString(60,130,200,16,16,"ADC_CH0_VAL:");	      
	LCD_ShowString(60,150,200,16,16,"ADC_CH0_VOL:0.000V");	


	while(1)
	{
		adcx=Get_Adc_Average(ADC_Channel_1,10);
		LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值
		temp=(float)adcx*(3.3/4096);
		adcx=temp;
		LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值
		temp-=adcx;
		temp*=1000;
		LCD_ShowxNum(172,170,temp,3,16,0X80);//    小数部分
		LED0=!LED0;
		delay_ms(250);	
		int
		voltage=1000*adcx+temp;
		printf("%d\r\n",voltage);
		
//		for(  i=0;i<100;i++)
//		{
//		printf("%d",i);
//			delay_ms(1000);
//		}
	//	printf("1");
	}
 }

 ADC的采样函数:

u16 Get_Adc_Average(u8 ch,u8 times)
{
	u32 temp_val=0;
	u8 t;
	for(t=0;t<times;t++)
	{
		temp_val+=Get_Adc(ch);
		delay_ms(5);
	}
	return temp_val/times;
} 	

STM32F103带有三路ADC通道,其中CH是采样通道,times是采样时间。

原工程文件放在这里

有需要可以自取。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值