標籤:ever amp stm32f4 arm stat int 資料 length 新源
遠紅外炭氫感應器是在多組分氣體感應器中用來檢測甲烷和丙烷濃度的,採用單匯流排串列通訊,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應用開發筆記之四:與遠紅外炭氫感應器通訊