同上篇关于STM32串口接收激光粉尘传感器的博文差不多,因为该传感器提供了串口输出数据,其他配置可以和粉尘传感器一样不变,主要修改串口中断函数即可
void USART2_IRQHandler(void) //串口2中断服务程序(氨气浓度测量)
{
u8 Res;
static char i=0, start=0;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
{
Res =USART_ReceiveData(USART2); //读取接收到的数据
if(Res == 0xFF) //如果接收的第一位数据是0XFF(这个是查看传感器的手册得知的)
{
USART_RX_STA = 0; //让数组索引值从0开始
start = 1; //这个变量是来确定第二位是否接收到了0X86(查看手册)
}
if(start == 1)
{
USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的数据存到数组里面
USART_RX_STA++;
if(USART_RX_STA >= 9 && (USART_RX_BUF[1]==0x86))
{
printf("氨气浓度:%dn",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
start = 0;
USART_RX_STA=0;//重新开始接收
USART_RX_BUF[0] = 0;
}
}
}
}
同上篇关于STM32串口接收激光粉尘传感器的博文差不多,因为该传感器提供了串口输出数据,其他配置可以和粉尘传感器一样不变,主要修改串口中断函数即可
void USART2_IRQHandler(void) //串口2中断服务程序(氨气浓度测量)
{
u8 Res;
static char i=0, start=0;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
{
Res =USART_ReceiveData(USART2); //读取接收到的数据
if(Res == 0xFF) //如果接收的第一位数据是0XFF(这个是查看传感器的手册得知的)
{
USART_RX_STA = 0; //让数组索引值从0开始
start = 1; //这个变量是来确定第二位是否接收到了0X86(查看手册)
}
if(start == 1)
{
USART_RX_BUF[USART_RX_STA] = Res ; //把接收到的数据存到数组里面
USART_RX_STA++;
if(USART_RX_STA >= 9 && (USART_RX_BUF[1]==0x86))
{
printf("氨气浓度:%dn",USART_RX_BUF[2]*256+USART_RX_BUF[3]);
start = 0;
USART_RX_STA=0;//重新开始接收
USART_RX_BUF[0] = 0;
}
}
}
}
举报