一款串口超声波模块使用心得——附带32程序

前段时间在某宝上看到一款串口超声波模块,感觉很新奇,看看介绍更是激动人心。随即买了四个。但是商家没有附带调试例程,收货后便搁置了。 如下便是该模块的渲染图与实物图。 嗯…不得不说渲染的挺好的… 下面是模块的一些介绍 工作原理 本超声波测距模块可提供0mm–2000mm的非接触式距离感测功能,包括超声波发射器、接收器与控制电路。其基本工作原理为此超声波测距模块连接电源后,模块本身每18ms进行一次测距,完成测距后,以串口(TTL电平,用USB转串口线可以直接连接本模块到PC,PC上程序读取串口数据就可以了,非常容易)的形式输出距离值。

数据格式 模块每次输出4个字节(有数据才输出),格式为:0XFF+H_DATA+L_DATA+SUM

  1. 0XFF: 为一组开始数据,用于判断。
  2. H_DATA:距离数据的高8位。
  3. L_DATA:距离数据的低8位。
  4. SUM: 数据和,用于效验。其0XFF+H_DATA+L_DATA=SUM(仅低8位)

注:H_DATA与L_DATA合成16位数据,即以毫米为单位的距离值。 H_DATA * 256 +L_DATA 电气参数: 电气参数 超声波模块 工作电压 DC 3.0-5.5V 工作电流 8mA 工作频率 40KHz 测距范围 0mm- 2000mm 分辨率 1mm 测量角度 与距离相关,下见角度图 串口波特率 9600,8,n,1 响应周期 18ms 规格尺寸 331715mm(超微型) 还有一些看上去超NB的有板有眼的“科学分析”说这个模块怎么怎么好这里就不一一列举了下面直接上程序 32的串口接收程序:

void USART1_IRQHandler(void)
{
	static uint8_t i=0,rebuf[4]={0};
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//判断接收标志
	{
		rebuf[i++]=USART_ReceiveData(USART1);//读取串口数据,同时清接收标志
		USART_SendData(USART1 ,rebuf[i-1] ); 
		if (rebuf[0]!=0xFF)//帧头不对
			 i=0;					          
		if(i==4)//i等于4时,接收完毕
		{		
			GPIO_SetBits(GPIOA,GPIO_Pin_1);	 //PA8 输出高
			memcpy(distance_data,rebuf,4);//拷贝接收到的数据
			Receive_ok=1;//接收完成标志	
			i=0;//缓存清0
		}
	}
		
}
int main(void)
 {	 
		u8 i;
		u16 distance=0;
		RCC_Configuration(); 			//时钟设置 
		NVIC_Configuration(); 	  //设置NVIC中断分组2:2位抢占优先级,2位响应优先级		
		LED_Init();	 
		Lcd_Init();	 //1.8寸液晶屏--初始化配置
		Lcd_Clear(BLACK);//清屏	
		Usart_Int(9600);
		Gui_DrawFont_GBK24(0,2,BLUE,BLACK,"串口超声波"); 
	 while(1)
	 {
	  GPIO_ResetBits(GPIOA,GPIO_Pin_1);
		while(!Receive_ok && i<22)
			{
				i++;
				delay_us(1000);
			}	
     Receive_ok=0;
		if(distance_data[1]==0xaa && distance_data[2]==0xaa)	
		{
			Gui_DrawFont_GBK16(10,30,BLUE,BLACK,"F");	//千
		  Gui_DrawFont_GBK16(22,30,BLUE,BLACK,"F");//百
		  Gui_DrawFont_GBK16(34,30,BLUE,BLACK,"F");//十
		  Gui_DrawFont_GBK16(54,30,BLUE,BLACK,"F");//个
		}
		else 
		{
			distance=distance_data[1]*256+distance_data[2]+8;
		 Gui_DrawFont_Num16(10,30,BLUE,BLACK,distance/1000);	//千
		 Gui_DrawFont_Num16(22,30,BLUE,BLACK,distance%1000/100);//百
		 Gui_DrawFont_Num16(34,30,BLUE,BLACK,distance%100/10);//十
		 Gui_DrawFont_GBK16(44,30,BLUE,BLACK,"."); 
		 Gui_DrawFont_Num16(54,30,BLUE,BLACK,distance%10);//个
		 Gui_DrawFont_GBK16(66,30,BLUE,BLACK,"CM"); 
		}			
		 delay_ms(100);			
	 } 		 
}
经验分享 程序员 微信小程序 职场和发展