总结——调试STM32F103ZET6及外围传感器_MAQ400空气质量(异味)数显模块
2016-11-12 21:35
375 查看
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及外围传感器_MH-Z14A二氧化碳传感器
- 总结——调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器
- 总结——调试STM32F103ZET6及外围传感器_PM2.5传感器
- 总结——调试STM32F103ZET6及外围传感器_氧气传感器
- 总结——调试STM32F103ZET6及外围传感器_电路图设计问题+SHT10温湿度传感器
- stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
- Arduino 各种模块篇 粉尘传感器 dust sensor 空气质量检测
- STM32控制TM1638模块——基于正点原子精英STM32F103ZET6开发板
- DM9000A网卡模块调试总结
- STM32F103ZET6学习总结……
- 高通平台串口调试 AP与模块串口通讯调试总结
- STM32F103 bootloader下载调试过程总结
- 模块[LCD]_LCD 调试总结
- 图像传感器调试经验总结
- GPRS 模块调试总结
- STM32F103程序调试过程问题总结
- 可装载模块调试的总结
- stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
- 高通平台串口调试 AP与模块串口通讯调试总结
- 高通平台串口调试 AP与模块串口通讯调试总结