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

xiaoxiao2021-02-28  50

一、环境描述

        主控:STM32F103ZET6

        传感器:MH-Z14A

        编译环境:keil5

        通信方式:串口2通信

二、传感器描述

        

        输出信号方式:

        

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

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

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

三、关键代码

//发送读取指令 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; }

转载请注明原文地址: https://www.6miu.com/read-2098943.html

最新回复(0)