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

来源:互联网 发布:淘宝刚开店卖什么好呢 编辑:程序博客网 时间:2024/04/20 03:09

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);//读取起始位0xFFif(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资料








0 0
原创粉丝点击