PM2.5/PM10传感器是串口接口,接口简单,通信协议处理也相对简单。协议处理如下图所示,传感器0.8~1.2s之间会主动发送7个字节数据,数据格式为:0xAA(头),PM2.5H,PM2.5L,PM10H,PM10L,checkdata,oxff(尾)。不需要主机去获取,传感器有个使能接口,高电平使能,低电平关闭。
void HLPM025K3_Init(void){
uint32_t Fdiv;
LPC_SC->PCONP|=(1<<24);//打开串口2功率外设
LPC_PINCON->PINSEL0 |= (1<<20); //设置P0.10 串口功能管脚
LPC_PINCON->PINSEL0 |= (1<<22); //设置P0.11 串口功能管脚
LPC_UART2->LCR = 0x83; // 8 bits, 无校验, 1 个停止位
Fdiv = (25000000/16)/ 9600 ; // 设置波特, Fpclk: 18MHz
LPC_UART2->DLM = Fdiv/256;
LPC_UART2->DLL = (Fdiv%256)+1;
LPC_UART2->LCR = 0x03; // 锁定波特率
LPC_UART2->FCR = 0x07; //使能TX与 RX 并初始化FIFO. */
LPC_UART2->IER = 0x01; //使能接收中断
NVIC_EnableIRQ(UART2_IRQn);//使能中断
}
//协议数据处理
void get_data(void){
uint16_t PM25=0,PM10=0;
if(data_length>6){
if((rx_buffer[0] == 0xAA)&&(rx_buffer[6] == 0xFF))//判断头和尾是否为0XAA,0XFF
{
//判断校验值 checkdata=PM2.5H+PM2.5L+PM10H+PM10L
if(rx_buffer[5] == ((rx_buffer[1] + rx_buffer[2] + rx_buffer[3] + rx_buffer[4])&0xFF))
{
PM25=((rx_buffer[1]<<8) | rx_buffer[2]);
PM10=((rx_buffer[3]<<8) | rx_buffer[4]);
PM25_show(PM25,PM10);
Clear();//清空缓冲
}
}
}
}
实验例程
【12】LPC1768_PM2_5PM10显示.rar
(112.24 KB, 下载次数: 6)
此内容由EEWORLD论坛网友加勒比海盗原创,如需转载或用于商业用途需征得作者同意并注明出处