查看: 129|回复: 1

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

[复制链接]

146

主题

0

好友

2686

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    开心
    2014-4-21 09:44
  • 签到天数: 26 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-8-4 15:44:36 |显示全部楼层
    远红外炭氢传感器是在多组分气体传感器中用来检测甲烷和丙烷浓度的,采用单总线串行通讯,TTL电平。所以我们需要用到UART口来实现与远红外炭氢传感器的通讯。
    远红外传感器就是这个样子的:
    TIM截图20170804152710.png


    再来一张进气和出气口的照片:
    TIM截图20170804152721.png
    我们设计的是使用USART1和USART3,但由于NUCLEO-F412ZG试验板上USART1的引脚PA9和PA10已经用于USB端口,USART3的引脚PD8和PD9也已经用于连接ST-LINK的串行通讯,所以我们使用了USART2和USART6。

    564295-20161224121858120-859928235.png


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


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


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

    TIM截图20170804152906.png


    配置完成在源码中如下:
    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”表示零点已设定

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


    再来一张在终端中显示数据结果的截图:
    564295-20161224122004573-1075094540.png


    转自博客园,博主昵称foxclever
    回复

    使用道具 举报

    0

    主题

    0

    好友

    41

    积分

    白丁

    Rank: 1

  • TA的每日心情
    擦汗
    2017-8-16 08:36
  • 签到天数: 2 天

    连续签到: 2 天

    [LV.1]初来乍到

    发表于 2017-8-16 08:53:46 |显示全部楼层
    很好的分享,谢谢楼主!学习中。。。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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

    手机版|爱板网 |网站地图  

    GMT+8, 2017-8-24 14:35 , Processed in 0.206649 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部