欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32F103ZET6控制MH-Z14A二氧化碳传感器

程序员文章站 2024-02-27 12:27:57
...

一、环境描述

        主控:STM32F103ZET6

        传感器:MH-Z14A

        编译环境:keil5

        通信方式:串口2通信

二、传感器描述

        STM32F103ZET6控制MH-Z14A二氧化碳传感器

        输出信号方式:

        STM32F103ZET6控制MH-Z14A二氧化碳传感器

STM32F103ZET6控制MH-Z14A二氧化碳传感器

默认的二氧化碳量程为0~5000ppm。

串口输出需将波特率设置为9600,数据位为8,停止位为1,无奇偶校验。

STM32F103ZET6控制MH-Z14A二氧化碳传感器

STM32F103ZET6控制MH-Z14A二氧化碳传感器

没有标准的二氧化碳浓度环境校零,可以选择连续运行24小时自动校准的方式进行校准。

STM32F103ZET6控制MH-Z14A二氧化碳传感器

三、关键代码

//发送读取指令
uint16_t  CO2TxBuffer[9]={0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};

void CO2_Tx()
{
	int i;
  for(i = 0; i < 9; i++) 
   { 
			USART_ClearFlag(USART2,USART_FLAG_TC);
			USART_SendData(USART2,CO2TxBuffer[i]);  
			while(USART_GetFlagStatus(USART2, USART_FLAG_TC)==RESET);  
   } 

 }

检验校验和

void CheckSum()
 {
	 char i,checksum=0;
		 for( i = 1; i < 8; i++)  
			{  
				checksum += USART_RX_BUF_2[i];  
			 } 
 			checksum = 0xff - checksum;  
			checksum += 1; 
						  
			
				if(checksum == USART_RX_BUF_2[8])
				{
						CO2Data = USART_RX_BUF_2[2] * 256 + USART_RX_BUF_2[3]; 
						printf("CO2=%d ppm \n",CO2Data);
				}
				else
					printf("CO2 error");
}

串口接收中断程序

void USART2_IRQHandler(void)                
{  
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 
        {  	
						USART_ClearFlag(USART2,USART_FLAG_RXNE);
       					USART_RX_BUF_2[USART2Count++] = USART2->DR;
				}
								if(USART2Count>=9)//传输完一组数据
				{
					USART2Count=0;
					
				}