1回答

1收藏

STM32F412应用开发——与远红外炭氢传感器通讯

STMCU STMCU 2677 人阅读 | 1 人回复 | 2017-08-04

远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,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引脚,我们给他们起一个我们自己认为好辨认的名字,然后保存更新源码:



配置完成在源码中如下:
  1. huart2.Instance = USART2;
  2. huart2.Init.BaudRate = 2400;
  3. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  4. huart2.Init.StopBits = UART_STOPBITS_1;
  5. huart2.Init.Parity = UART_PARITY_EVEN;
  6. huart2.Init.Mode = UART_MODE_TX_RX;
  7. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  8. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  9. huart6.Instance = USART6;
  10. huart6.Init.BaudRate = 2400;
  11. huart6.Init.WordLength = UART_WORDLENGTH_8B;
  12. huart6.Init.StopBits = UART_STOPBITS_1;
  13. huart6.Init.Parity = UART_PARITY_EVEN;
  14. huart6.Init.Mode = UART_MODE_TX_RX;
  15. huart6.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  16. huart6.Init.OverSampling = UART_OVERSAMPLING_16;

  17. //配置好后开始编写元红外传感器的通讯函数,该通讯数据描述如下:
  18. //0x00C0        Modbus_address  模块当前Modbus地址    可读写
  19. //0x0080到0x0083 DeviceType      设备的型号   可读写
  20. //0x0084到0x0085 SoftwareVersion 软件版本    只读
  21. //0x0086到0x0089 Internal device number  设备序列号   只读
  22. //0x0005        MOD 气体浓度设置值 只读
  23. //0x000A        Concentration   气体浓度    只读
  24. //0x0003        T_module (0.1x°C)       传感器内部温度 只读
  25. //0x0045        Alarm_Level     主报警限值   可读写
  26. //0x0044        Warn_Level      预报警限值   可读写
  27. //0x0047        IR_4tagneu      零点的强度测量 可读写
  28. //0x0009        Statusflags     状态信息    只读
  29.       //Flag 0 Testflag value ?1“ with device test
  30.       //值“1”表示仪器处于测试状态
  31.       //Flag 1 Warmup value ?1“ approx. 10s after start
  32.       //值“1”表示启动后大约10秒预热
  33.       //Flag 2 Syserr value ?1“ System Error
  34.       //值“1”表示系统错误
  35.       //Flag 3 Alarm value ?1“ if main gas alarm warning
  36.       //值“1”表示气体主报警开始工作
  37.       //Flag 4 Warn value ?1“ if gas pre-alarm warning
  38.       //气体预报警开始工作
  39.       //Flag 5 Startup value ?1“ in the start-up phase (less than 90sec)
  40.       //值“1”表示处于启动阶段(至少90秒)
  41.       //Flag 6 Korr value ?1“ if S-MODULE is temperature-compensated
  42.       //值“1”表示S-MODULE提供温度补偿功能
  43.       //Flag 7 mw_ok value ?1“ if zero point was set
  44.       //值“1”表示零点已设定

复制代码
根据上述描述我哦们便写相关函数,由于元吗较多再次不做过多描述,编完调试改错,最后运行成功。如下是调试运行界面。


再来一张在终端中显示数据结果的截图:


转自博客园,博主昵称foxclever
关注下面的标签,发现更多相似文章
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

糯米团

发表于 2017-8-16 08:53:46 | 只看该作者

很好的分享,谢谢楼主!学习中。。。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条