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