总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块

1.概述

模块型号为MAQ400系列,UART输出,使用USART1,上电后需要预热60s后输出数据才稳定。

2.接线

正极(引脚2)接5V,负极(引脚1)接GND,TXD接STM32的RXD(PA10)。

3.调试关键问题

(1)波特率9600,数据位8位,停止位1位,校验位无。

(2)通信为主动上传式每间隔1s发送一次浓度值,命令行格式:

起始位(0xFF)  起始位(0xFF)  地址位(0x01)  气体名称(0x27)  气体浓度高位  气体浓度低位  小数点位  单位  校验位

(3)举例:FF FF 01 1B 00 BB 02 05 DE

气体浓度值=0x00*256+0xBB = 187,小数点为2 位,则实际浓度为1.87mg/m3

(4)校验和计算:(uint8_t)( buff[2] + buff[3] + buff[4] + buff[5] + buff[6] + buff[7])

(5)STM32的USART在接收期间,数据的最低有效位首先从RX脚移进接收移位寄存器,当接收到8位数据后,移位寄存器的值赋给接收数据寄存器(RDR),读数据寄存器中的数据USART_DR本质就是读USART内部的RDR寄存器,当移位寄存器的内容被转移到RDR中后RXNE被置位,此时如果USART_CR1寄存器中的RXNEIE为1,则产生中断,软件中读USART_DR寄存器完成对RXNE位的清除。

(6)串口1中断处理函数,返回气体浓度值:

//空气质量传感器上传数据时就会触发串口1中断
void USART1_IRQHandler(void)                	//串口1中断服务程序
{
	//串口收到的9位数据:起始位(0xFF) 起始位(0xFF) 地址位(0x01) 气体名称(0x27) 气体浓度高位 气体浓度低位 小数点位 单位 校验位
	u8 checksum = 0;//校验和
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
		{
		//(USART1->DR);	//读取接收到的数据

				USART_RX_BUF_1[i++]  = USART_ReceiveData(USART1);//读取起始位0xFF
			if(i == 9)
				i = 0;//当接收到第9个字符后,从数组USART_RX_BUF_1的开头开始写
			checksum = USART_RX_BUF_1[2] + USART_RX_BUF_1[3] + USART_RX_BUF_1[4] 
								 + USART_RX_BUF_1[5] + USART_RX_BUF_1[6] + USART_RX_BUF_1[7];//校验和
			if(checksum == USART_RX_BUF_1[8])//证明接收到的数据是正确的
				gasData = (USART_RX_BUF_1[4] * 256 + USART_RX_BUF_1[5]) / pow(10, USART_RX_BUF_1[6]);
				
     } 

} 

(7)代码地址

4.附:MAQ400资料

总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块_第1张图片
 

 

总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块_第2张图片

 

总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块_第3张图片

 

总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块_第4张图片

有需要请加QQ:1447491726,进行详细的技术交流,共同进步。

你可能感兴趣的:(STM32F103ZET6,温湿度传感器,STM32F103)