STM32F103ZET6控制MH-Z14A二氧化碳传感器
程序员文章站
2024-02-27 12:27:57
...
一、环境描述
主控: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;
}