STM32F412应用开发笔记之四:与远红外炭氢传感器通讯
远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,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应用开发笔记之四:与远红外炭氢传感器通讯的更多相关文章
- STM32F412应用开发笔记之十:多组分气体分析仪设计验证
本次将NUCLEO-F412ZG应用于我们的多组分气体分析仪的实现试验,从整体上测试实际项目的应用情况. 一.项目概述 多组分气体分析仪是我公司近期研发的三个主要产品之一.采用模块化设计,可增减配置, ...
- STM32F412应用开发笔记之九:移植FreeRTOS到F412ZG平台
在开发实际应用系统时,我们经常需要考虑数据的实时性和多任务,嵌入式实时操作系统的出现为实现这一目的提供了很好的助力.FreeRTOS是近年来比较流行的嵌入式实时操作系统,而且是开源免费的,STM32C ...
- STM32F412应用开发笔记之一:初识NUCLEO-F412ZG
今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛! 近几年来基本都是在STM32平台上做一些设计开发工作.STM32F103.STM32F107.STM32F429等都应用过,但 ...
- STM32F412应用开发笔记之五:结合W5500实现以太网通讯
因实际使用需求我们测试一下网络通讯,在NUCLEO-F412ZG测试板上没有以太网部分,我们选择外接一个W5500的实验板.W5500支持SPI接口通讯,DC3.3V供源.而NUCLEO-F412ZG ...
- STM32F412应用开发笔记之三:SPI总线通讯与AD采集
本次我们在NUCLEO-F412ZG试验模拟量输入采集.我们的模拟量输入采用ADI公司的AD7705,是一片16位两路差分输入的AD采集芯片.具有SPI接口,我们将采用SPI接口与AD7705通讯.两 ...
- STM32F412应用开发笔记之二:基本GPIO控制
NUCLEO-F412ZG板子上的元器件并没有完全焊接,除去ST-LINK部分和电源部分后,还有用一个USB主机接口,三个LED灯和两个按钮,不过很多功能引脚都已经引到了插针.查看原理图可发现,由原理 ...
- Modbus库开发笔记之四:Modbus TCP Client开发
这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...
- LwIP应用开发笔记之四:LwIP无操作系统TFTP服务器
前面我们已经实现了UDP的回环客户端和回环服务器的简单应用,接下来我们实现一个基于UDP的简单文件传输协议TFTP. 1.TFTP协议简介 TFTP是TCP/IP协议族中的一个用来在客户机与服务器之间 ...
- STM32F412应用开发笔记之六:使用片上Flash存储参数
我们的项目中需要保存一些系统配置参数,这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能.这就需要考虑这些参数保存的问题.将这类数据存在指定 ...
随机推荐
- vi学习总结
1.模式 命令行模式:光标的移动.内容删除移动复制操作 插入模式:文字输入,即编辑状态 底行模式:文件保存或退出vi,设置编辑环境 2.基本操作 vi myfile,输入vi 文件名,,则进入vi. ...
- win7下安装mysql后修改密码
mysql的安装教程网上很多,此处不过多介绍,个人觉得下面这篇教程是比较好的,一步到位.MySQL 5.7.9 ZIP 免安装版本配置过程_百度经验 http://jingyan.baidu.com ...
- 去掉Win7快捷方式小箭头(win10通用)
我是一个有强迫症的优化控 , 因为近视的缘故 , 喜欢将桌面图标放大 , 但是win7快捷方式的小箭头 , 确实不好看 . 用win7魔方之类的软件 , 可以解决这个问题 , 但是有时候重启 , ...
- Linux哲学思想--基本法则
1.一切皆文件: 2.单一目的的小程序: 3.组合小程序完成复杂任务: 4.文本文件保存配置信息: 5.尽量避免捕获用户接口: 6.提供机制,而非策略. 自从Linux一诞生就注定了其成为经典的命运. ...
- C内嵌汇编-格式
C内嵌汇编-格式: __asm__(汇编语句部分:输出部分:输入部分破坏描述部分);C内嵌汇编以关键字"__asm__"或"asm"开始, 下辖四个部分, 各部 ...
- BootLoader的架构设计
@注:黄色部分代表根据不同的开发板进行处理.
- Delphi 获取时间的年月日
procedure TFrmLltj.FormActivate(Sender: TObject); var Present: TDateTime; Year, Month, Day, Hour ...
- 博文Contents<1--到200—>
====================-------------- 前言:博客中的随笔文章.并非都是笔者的原创文章.有些是听别人说的.有些是书上摘录的.有些是百度的.有些是别人博客的文章.有些是自己 ...
- JS数组经典冒泡排序
将8,4,3,1,4,6,等数字按照从小到大的顺序依次输出: var arr=new Array(); arr.push(8); arr.push(4); arr.push(3); arr.push( ...
- python api
import requests #查询手机好归属地API def phone(tel): url = 'http://op.juhe.cn/onebox/phone/query' appkey = ' ...