配置完成在源码中如下:
huart2.Instance = USART2;
huart2.Init.BaudRate = 2400;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_EVEN;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
huart6.Instance = USART6;
huart6.Init.BaudRate = 2400;
huart6.Init.WordLength = UART_WORDLENGTH_8B;
huart6.Init.StopBits = UART_STOPBITS_1;
huart6.Init.Parity = UART_PARITY_EVEN;
huart6.Init.Mode = UART_MODE_TX_RX;
huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart6.Init.OverSampling = UART_OVERSAMPLING_16;
配置好后开始编写元红外传感器的通讯函数,该通讯数据描述如下:
//0x00C0 Modbus_address 模块当前Modbus地址 可读写
//0x0080到0x0083 DeviceType 设备的型号 可读写
//0x0084到0x0085 SoftwareVersion 软件版本 只读
//0x0086到0x0089 Internal device number 设备序列号 只读
//0x0005 MOD 气体浓度设置值 只读
//0x000A Concentration 气体浓度 只读
//0x0003 T_module (0.1x°C) 传感器内部温度 只读
//0x0045 Alarm_Level 主报警限值 可读写
//0x0044 Warn_Level 预报警限值 可读写
//0x0047 IR_4tagneu 零点的强度测量 可读写
//0x0009 Statusflags 状态信息 只读
//Flag 0 Testflag value ?1“ with device test
//值“1”表示仪器处于测试状态
//Flag 1 Warmup value ?1“ approx. 10s after start
//值“1”表示启动后大约10秒预热
//Flag 2 Syserr value ?1“ System Error
//值“1”表示系统错误
//Flag 3 Alarm value ?1“ if main gas alarm warning
//值“1”表示气体主报警开始工作
//Flag 4 Warn value ?1“ if gas pre-alarm warning
//气体预报警开始工作
//Flag 5 Startup value ?1“ in the start-up phase (less than 90sec)
//值“1”表示处于启动阶段(至少90秒)
//Flag 6 Korr value ?1“ if S-MODULE is temperature-compensated
//值“1”表示S-MODULE提供温度补偿功能
//Flag 7 mw_ok value ?1“ if zero point was set
//值“1”表示零点已设定
根据上述描述我哦们便写相关函数,由于元吗较多再次不做过多描述,编完调试改错,最后运行成功。如下是调试运行界面。
再来一张在终端中显示数据结果的截图:
由于传感器是暴露在空气中试验,也没有添加校准过程,所以显示数据接近于0值。