105 lines
2.7 KiB
C
105 lines
2.7 KiB
C
/* USER CODE BEGIN Header */
|
||
/**
|
||
******************************************************************************
|
||
* @file : o2_sensor.h
|
||
* @brief : 氧浓度传感器头文件
|
||
* @version : 1.0
|
||
* @changelog : version 1.0 初始版本 2025.11.13
|
||
******************************************************************************
|
||
* @attention
|
||
*
|
||
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
|
||
* THIS SOFTWARE is licensed under the Mulan PSL v1.
|
||
* can use this software according to the terms and conditions of the Mulan PSL v1.
|
||
* You may obtain a copy of Mulan PSL v1 at:
|
||
* http://license.coscl.org.cn/MulanPSL
|
||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||
* PURPOSE.
|
||
* See the Mulan PSL v1 for more details.
|
||
*
|
||
******************************************************************************
|
||
*/
|
||
/* USER CODE END Header */
|
||
|
||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||
#ifndef __O2_SENSOR_H
|
||
#define __O2_SENSOR_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include <stdint.h>
|
||
#include "fm33lg0xx_fl.h"
|
||
#include "fm33lg0xx_queue.h"
|
||
#include "fm33lg0xx_event.h"
|
||
|
||
|
||
/* 对硬件使用进行配置 */
|
||
#define O2_SENSOR_USED_UART_NUM UART5
|
||
|
||
|
||
#define CHECK_TRANS_DONE while(FL_UART_IsActiveFlag_TXShiftBuffEmpty(O2_SENSOR_USED_UART_NUM) != FL_SET){};
|
||
#define OXG_UART_TRANS_BYTE(x) FL_UART_WriteTXBuff(O2_SENSOR_USED_UART_NUM, x);CHECK_TRANS_DONE;
|
||
|
||
|
||
// 状态机的状态定义(内部使用)
|
||
typedef enum
|
||
{
|
||
O2_STATE_WAIT_HEADER1, // 等待帧头第1字节:0x16
|
||
O2_STATE_WAIT_HEADER2, // 等待帧头第2字节:0x09
|
||
O2_STATE_WAIT_HEADER3, // 等待帧头第3字节:0x01
|
||
O2_STATE_RECV_DATA, // 接收后续数据字节
|
||
O2_STATE_CHECK_FRAME // 校验帧完整性
|
||
} RecvState;
|
||
|
||
|
||
// 先定义协议中涉及的枚举/类型
|
||
typedef enum
|
||
{
|
||
O2_FRAME_IDLE = 0, // 空闲状态
|
||
O2_FRAME_RECEIVING, // 接收中
|
||
O2_FRAME_COMPLETE, // 接收完成(可解析)
|
||
O2_FRAME_ERROR // 帧错误
|
||
} O2FrameState;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
struct{
|
||
|
||
uint8_t DF[8];
|
||
uint8_t CheckSum;
|
||
|
||
}O2_raw_data;
|
||
|
||
uint16_t o2_concentration; // 等于真实值乘以10
|
||
uint16_t o2_flow; // 等于真实值乘以10 单位L/min
|
||
uint16_t o2_temperature;
|
||
|
||
RecvState receive_state;
|
||
O2FrameState frame_state;
|
||
|
||
uint32_t fault_count;
|
||
|
||
}O2SensorData;
|
||
|
||
|
||
|
||
|
||
/************************** 对外导出的API函数 *************************/
|
||
void oxg_sensor_init(void);
|
||
void oxg_sensor_task(void);
|
||
void UART5_IRQHandler(void);
|
||
|
||
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* __O2_SENSOR_H */
|
||
|
||
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/
|