远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,TTL电平。所以我们需要用到UART口来实现与远红外炭氢传感器的通讯。

远红外传感器就是这个样子的:

再来一张进气和出气口的照片:

我们设计的是使用USART1和USART3,但由于NUCLEO-F412ZG试验板上USART1的引脚PA9和PA10已经用于USB端口,USART3的引脚PD8和PD9也已经用于连接ST-LINK的串行通讯,所以我们使用了USART2和USART6。

查看NUCLEO-F412ZG原理图后我们发现USART2和USART6也正好引到CN7和CN9方便接线。USART2所使用的引脚为PD5(CN9_6)和PD6(CN9_4),USART6所使用的引脚为PC6(CN7_1)和PC7(CN7_11)。如下图红框部分:

在STM32CubeMX中配置好后,首先配置串口通讯的参数,远红外炭氢传感器要求波特率2400,8位数据位,偶校验,1位停止位,配置为输入输出双向。配置界面如下:

然后可以配置一下GPIO引脚,我们给他们起一个我们自己认为好辨认的名字,然后保存更新源码:

配置完成在源码中如下:

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值。

STM32F412应用开发笔记之四:与远红外炭氢传感器通讯的更多相关文章

  1. STM32F412应用开发笔记之十:多组分气体分析仪设计验证

    本次将NUCLEO-F412ZG应用于我们的多组分气体分析仪的实现试验,从整体上测试实际项目的应用情况. 一.项目概述 多组分气体分析仪是我公司近期研发的三个主要产品之一.采用模块化设计,可增减配置, ...

  2. STM32F412应用开发笔记之九:移植FreeRTOS到F412ZG平台

    在开发实际应用系统时,我们经常需要考虑数据的实时性和多任务,嵌入式实时操作系统的出现为实现这一目的提供了很好的助力.FreeRTOS是近年来比较流行的嵌入式实时操作系统,而且是开源免费的,STM32C ...

  3. STM32F412应用开发笔记之一:初识NUCLEO-F412ZG

    今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛! 近几年来基本都是在STM32平台上做一些设计开发工作.STM32F103.STM32F107.STM32F429等都应用过,但 ...

  4. STM32F412应用开发笔记之五:结合W5500实现以太网通讯

    因实际使用需求我们测试一下网络通讯,在NUCLEO-F412ZG测试板上没有以太网部分,我们选择外接一个W5500的实验板.W5500支持SPI接口通讯,DC3.3V供源.而NUCLEO-F412ZG ...

  5. STM32F412应用开发笔记之三:SPI总线通讯与AD采集

    本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两 ...

  6. STM32F412应用开发笔记之二:基本GPIO控制

    NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...

  7. Modbus库开发笔记之四:Modbus TCP Client开发

    这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...

  8. LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器

    前面我们已经实现了UDP的回环客户端和回环服务器的简单应用,接下来我们实现一个基于UDP的简单文件传输协议TFTP. 1.TFTP协议简介 TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间 ...

  9. STM32F412应用开发笔记之六:使用片上Flash存储参数

    我们的项目中需要保存一些系统配置参数,这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.这就需要考虑这些参数保存的问题.将这类数据存在指定 ...

随机推荐

  1. cocoapods安装

    什么是cocoapods CocoaPods是一个用来帮助我们管理第三方依赖库的工具.它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我 ...

  2. 一个将 footer 保持在底部的最好方法

    原文: Quick Tip: The Best Way To Make Sticky Footers 当你在布局网页时,有可能会遇到类似下面的这种情况 导致这一问题的原因是页面内容太少,无法将内容区域 ...

  3. favicon.ico 404的问题(title栏前面的图标)

    1.页面中自定义图标 去  http://www.bitbug.net/   定制图片,有32*32,16*16等样式可供选择 2.在页面中引入定义的图片 <link rel="sho ...

  4. struts-hibernate-ajax完成区县和街道级联下拉框功能(二补充使用json解析list结果集,ajax循环json层级处理)

    针对<struts-hibernate-ajax完成区县和街道级联下拉框功能>进行补充,上一篇中,要在action中拼接JSON格式字符串,很容易手抖.直接用json处理一下转成json格 ...

  5. Android自定义属性简单使用说明

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_attrs.html 本文从实用角度说明Android自定义属性的基本使用流程,清晰 ...

  6. Python_猜大小

    # 需要在python3上执行 import random def game (capital = 1000): point1 = random.randrange(1,7) point2 = ran ...

  7. Nginx 颁发自签证书

    首先,确保安装了OpenSSL库,并且安装Nginx时使用了–with-http_ssl_module参数. 1:进入生成证书的目录 cd /usr/local/nginx/conf 2:使用open ...

  8. UI

    http://semantic-ui.com/introduction/getting-started.html

  9. 推荐几款我一直在用的chrome插件(上)

    我用的chrome插件挺多的,所谓工欲善其事必先利其器,我热衷于搜寻好用的工具来让我平时的工作事半功倍.下面介绍几款我正在用的感觉还不错的插件,如果大家还有其它好用的(肯定有,chrome插件库太庞大 ...

  10. WebClient 实现多文件/文本同时上传

    public class CreateBytes { Encoding encoding = Encoding.UTF8; /**/ /// <summary> /// 拼接所有的二进制数 ...