#ifndef __D9V2FR_DP2006V1000_h__ #define __D9V2FR_DP2006V1000_h__ //File Start-------------------------------------------------------------------- #if (DP2006_VM1000) //************************************************************************** // for flow compute //============================================================================== #define LED_PIN GPIO_PIN_5 #define LED_PIN_PINPOS GPIO_PinPos_5 #define LED_PIN_GPIO GPIO0 #define LED_PIN_OUT() EnableOutput(LED_PIN_GPIO, LED_PIN) #define SET_LED_PIN() SET_PIN(LED_PIN_GPIO,LED_PIN) #define CLR_LED_PIN() CLR_PIN(LED_PIN_GPIO,LED_PIN) //============================================================================== //// key_pin select pin // 引脚定义 #define KEY1_PIN GPIO_PIN_1 // PA0:一键开关机检测脚 #define KEY1_PORT pGPIO1 #define POWER_CTRL_PIN GPIO_PIN_0 // PA1:电源控制脚 #define POWER_CTRL_PORT pGPIO1 #define UnitKEY_PIN GPIO_PIN_0 // 单位切换脚 #define UnitKEY_PORT pGPIO0 //------------------------------------------------------------------------------ // OLED I2C接口演示例程 #define I2C_SDA GPIO_PIN_4 #define I2C_SDA_PINPOS GPIO_PinPos_4 #define I2C_SDA_GPIO GPIO1 #define I2C_SCL GPIO_PIN_0 #define I2C_SCL_PINPOS GPIO_PinPos_0 #define I2C_SCL_GPIO GPIO2 #define I2C_RES GPIO_PIN_6 #define I2C_RES_PINPOS GPIO_PinPos_1 #define I2C_RES_GPIO GPIO1 //------------------------------------------------------------------------------ // for eeprom #define EEPROM_WP_PIN GPIO_PIN_5 #define EEPROM_WP_PINPOS GPIO_PinPos_5 #define EEPROM_WP_GPIO GPIO1 #define PARA_EEPROM BIT1 #define DATA_EEPROM BIT2 #define FROCK_EEPROM BIT1+BIT2+BIT3 //------------------------------------------------------------------------------ // for BLE #define BLE_CTS_PIN GPIO_PIN_3 #define BLE_CTS_GPIO pGPIO0 #define BLE_RST_PIN GPIO_PIN_4 #define BLE_RST_GPIO pGPIO0 //------------------------------------------------------------------------------ // for SPI //#define SCLK_PIN GPIO_PIN_5 //#define SCLK_PINPOS GPIO_PinPos_5 //#define SCLK_PIN_SOURCE GPIO_PinSource5 //#define SCLK_PIN_CONFIG GPIO1_5_AF_SCLK //#define SCLK_GPIO GPIO1 //#define SOMI_PIN GPIO_PIN_4 //#define SOMI_PINPOS GPIO_PinPos_4 //#define SOMI_PIN_SOURCE GPIO_PinSource4 //#define SOMI_PIN_CONFIG GPIO1_4_AF_MISO //#define SOMI_GPIO GPIO1 //#define SIMO_PIN GPIO_PIN_6 //#define SIMO_PINPOS GPIO_PinPos_6 //#define SIMO_PIN_SOURCE GPIO_PinSource6 //#define SIMO_PIN_CONFIG GPIO1_6_AF_MOSI //#define SIMO_GPIO GPIO1 ////------------------------------------------------------------------------------ //#define EXT_CALIB_PIN GPIO_PIN_7 //#define EXT_CALIB_PINPOS GPIO_PinPos_7 //#define EXT_CALIB_GPIO GPIO1 //#define RS485DE_PIN GPIO_PIN_1 //#define RS485DE_PINPOS GPIO_PinPos_1 //#define RS485DE_GPIO GPIO1 //#define RS485DE_OUTPUT() EnableOutput(RS485DE_GPIO, RS485DE_PINPOS) //#define ENABLE_TXD() SET_PIN(RS485DE_GPIO, RS485DE_PIN) //#define ENABLE_RXD() CLR_PIN(RS485DE_GPIO, RS485DE_PIN) // ***************************************************************************** // 'X' 后缀代表内码 // ***************************************************************************** #define CTYPE_FR CURVE_1ST #define ATYPE_VH CURVE_2ND #define MICRO_FR CURVE_3RD #define FRIDX CTYPE_FR // 0 #define RGIDX ATYPE_VH // 1 #define GAINX MICRO_FR // 2 #define VDUX 3 // #define VDUGX 4 // #define RIDX 5 // #define NIDX 6 // NORMAL_VL - LOW_VL (TD INDEX) #define TPCB 7 // PCB temperature #define TGAS 8 // GAS temperature #define TRH 9 // RH temperature #define BATT 10 // Battery volatge #define IVHDX 11 // IRH CODE test VHH By TD Control #define VRHX 12 // VRH CODE #define IVHUX 13 // IRH CODE test VHH By TU Control #define VRRX 14 // VRR CODE #define RHVOL 15 // RH VOLATAGE #define RRVOL 16 // RR VOLATAGE #define RHRES 17 // RH resistance #define RRRES 18 // RR resistance #define PORH 19 // RH Power #define PDRH 20 // RH current Power #define CVHHX 21 // #define DVHHX 22 // #define VHPA 23 // #define RATO 24 // RR:RH #define SDT 25 // ATYPE OFFSET #define DIVHX 26 // IVHH(TD) - IVHH(TU) #define TCOE 27 // #define TVDUX 28 // #define TVDUGX 29 // #define FR_H 30 // #define FR_L 31 // #define ANX 32 // #define ANX_MASK (ANX-1) //------------------------------------------------------------------------------ #define NRH RRRES #define NVHH IVHDX #define CVHH CVHHX // #define DVHH DVHHX // #define NVDU VDUX #define LRH RHRES #define LVOL RHVOL #define LVHH IVHDX //------------------------------------------------------------------------------ #define GCFX NVDU // #define GIDX LCDE // #define FIDX FRIDX #define RAOOM RATO #define ATYPE_FR CURVE_2ND #define REG_INDEX RGIDX //------------------------------------------------------------------------------ #define CODE1 FR_H // 8300 FIDX #define CODE2 FR_L // 8301 FIDX #define CODE3 FRIDX // 8302 FIDX #define CODE4 NIDX // 8303 #define CODE5 VRHX // 8304 #define CODE6 IVHDX // 8305 #define CODE7 RHVOL // 8306 #define CODE8 VDUGX // 8307 #define CODE9 TPCB // 8308 #define CODE10 RHVOL // 8309 #define CODE11 VDUX // 830A #define CODE12 VDUGX // 830B #define CODE13 NIDX // 830C #define CODE14 BATT // 830D #define CODE15 IVHDX // 830E #define CODE16 VRHX // 830F // ***************************************************************************** // 1S = 16384 // Circuit preparation process #define START_SAMPLING_STAGE_0 0 #define START_SAMPLING_STAGE_1 1 #define START_SAMPLING_STAGE_2 2 #define START_SAMPLING_STAGE_3 3 //------------------------------------------------------------------------------ #define FR_UPDATE 0x0A #define FR_UPDATE_PULSE_TIME 16 // 1ms //------------------------------------------------------------------------------ #define CIRCUIT_SETUP_TIME 82 // 5ms //------------------------------------------------------------------------------ #define SET_UP_TIME_FROM_DETECT_TO_1ST_STAGE 1638 // 100ms //------------------------------------------------------------------------------ //加热流程: //------------------------------------------------------------------------------ #define COUNT_VALUE_PER_MS 16 //10 #define SET_UP_TIME_OF_DETECT_STAGE (20 * COUNT_VALUE_PER_MS) ///20ms #define SAMPLING_TIMES_IN_DETECT_STAGE 16 // #define SHIFT_IN_DETECT_STAGE 4 // // #define SET_UP_TIME_OF_1ST_STAGE (40 * COUNT_VALUE_PER_MS) //40ms 对应稍微大于ADC 977SRS DMA采样32次时间 #define PRESAMPLING_TIMES_IN_1ST_STAGE 32 // #define SHIFT_IN_PRESAMPLING_1ST_STAGE 5 // // #define SAMPLING_TIME_OF_1ST_STAGE (70 * COUNT_VALUE_PER_MS) //70ms 对应稍微大于ADC 977SRS DMA采样64次时间 #define SAMPLING_TIMES_IN_1ST_STAGE 64 // #define SHIFT_IN_1ST_STAGE 6 // //****************************************************************************** #define STATIC_HIGH_CODE 50 #define STATIC_LOW_CODE 50 // ***************************************************************************** //#define VHH_GAIN GAIN16 #define NIDX_GAIN GAIN32 #define GIDX_GAIN GAIN128 //GAIN_64 #define GIDX_SHIFT 4 //#define VRR_GAIN GAIN16 //#define VRH_GAIN GAIN1 #define SAMPLE_NORMOL_MODE 0 #define SAMPLE_TRACK_ZERO_MODE 1 #define SAMPLE_FAST_MODE 2 #define SAMPLE_MODE_MAX SAMPLE_TRACK_ZERO_MODE //SAMPLE_VDU_VRH_MODE #define SAMPLE_DEFAULT_MODE SAMPLE_NORMOL_MODE //SAMPLE_VDU_VRR_MODE //测试流程 每个4位 #define SAMPLE_VDU 0 #define SAMPLE_GVDU 1 #define SAMPLE_VRH 0 #define SAMPLE_IRH 1 #define SWITCH_GAIN_THRESHOLD 0x36768 #define CAL_VDUX CTYPE_FR #define CAL_ATYPE ATYPE_VH #define CAL_VDUGX MICRO_FR // ***************************************************************************** #if (DP2006_VM1000) //--------------------------------------------------------------------------------- #define VCOM 0.0 #define VREF_PER_CODE (ADC_VREF/32768) #define VRR_BRIDGE_VOL (ADC_VREF - VCOM) #define VRR_RA 33000.0 #define VRR_RB 2800.0 #define VRR_RDC (VRR_RB/(VRR_RA + VRR_RB)) #define VRR_VDC (VRR_BRIDGE_VOL*VRR_RDC) #define VRR_ADC_GAIN 16.0 #define VRR_VREF ( VREF_PER_CODE/VRR_ADC_GAIN ) #define VRR_PER_CODE ( ADC_VREF/((ADC_VREF-VCOM)*GAIN*32768)) #define SampingADCInit() ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_1P25V) #define SetupRHChannle() ADC_Init(ADC_0, SPS_977, GAIN1,ADC0_AIN3,ADC0_AVSS) //VRH #define SetupIRHypeChannle() ADC_Init(ADC_1, SPS_977, GAIN1,ADC1_AIN0,ADC1_AVSS)//IRH #define SetupBLChannle() ADC_Init(ADC_0, SPS_977, GAIN1,ADC0_AIN7,ADC0_AVSS)//电池电量 #define SetupRDChannle() ADC_Init(ADC_1, SPS_977, GAIN1,ADC1_AIN2,ADC1_AVSS)//VRU #endif //--------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------- #define StartSamplingADC() { \ ADC_SyncCmd(ENABLE); \ DMA_ADC_Init(ADC_0, sampleProcess.ADC0Buffer, sampleProcess.CounterMax); \ DMA_ADC_Init(ADC_1, sampleProcess.ADC1Buffer, sampleProcess.CounterMax); \ DMA_StartADC(ADC_0); \ DMA_StartADC(ADC_1); \ } #define StopSamplingADC() { \ DMA_StopADC(ADC_0); \ DMA_StopADC(ADC_1); \ } //--------------------------------------------------------------------------------------- #define sampleCTypeValue sampleProcess.ADC0Result #define sampleATypeValue sampleProcess.ADC1Result #define sampleRTypeValue sampleProcess.ADC1Result #define ReadADCData() //--------------------------------------------------------------------------------------- // 125ms/250ms/500ms/1000ms/2000ms/4000ms 周期定时 uploadCounter: 计数值(>32.768),需要换算成期望周期 计数值=(32768/1000)*t t(ms)为期望时间 //#define USE_LPTIMER0 #define PrimaryTimer LPTIM1 #define StartPrimaryTimer( uploadCounter ) StartLPTimer1( uploadCounter ) #define ResetPrimaryTimer( uploadCounter ) ResetLPTimer1( uploadCounter ) #define EnablePrimaryTimerInterrupt() EnableLPTimer1Interrupt() #define DisablePrimaryTimerInterrupt() DisableTimer1Interrupt() #define StopPrimaryTimer() StopLPTimer1() //#define PrimaryTimer_IRQ_Callback PrimaryTimer_IRQ_Callback// ManagePrimaryTimeInterval //--------------------------------------------------------------------------------------- // 1ms基准定时 uploadCounter: 期望的周期,单位:毫秒 范围:(1~4000) //#define USE_TIMER2 #define ProcessTimer TIM1 #define ProcessTimerIT TIM_IT_CC1 #define StartProcessTimer(uploadCounter) StartTimer1_CC1(uploadCounter) #define ResetProcessTimer(uploadCounter) ResetTimer1_CC1(uploadCounter) #define StopProcessTimer() StopTimer1() #define EnableProcessTimerInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer2Interrupt() #define DisableProcessTimerInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer2Interrupt() //#define Timer2InterruptCallBack() //#define ProcessTimer_IRQ_Callback ProcessTimerInterruptCallBack //--------------------------------------------------------------------------------------- //比较定时 uploadCounter: 计数值(1~65535),需要换算成期望周期 计数值=(65535/4000)*t t(ms)为期望时间 //#define USE_TIMER1 //#define SamplingTimer TIM1 //#define StartSamplingTimer(uploadCounter) StartTimer1_CC1(uploadCounter) //#define ResetSamplingTimer(uploadCounter) ResetTimer1_CC1(uploadCounter) //#define StopSamplingTimer() StopTimer1() //#define EnableSamplingInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer1Interrupt() //#define DisableSamplingInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer1Interrupt() //#define SamplingTimer_IRQ_Callback ProcessTimerInterruptCallBack #define TEMP_SENSOR_RESULT RESULT_0_25_BIT // ***************************************************************************** // 从标准单位 到 其他单位 #define ONE_PA_TO_MBAR 0.01f // 1 Pa = 0.01 mbar #define ONE_PA_TO_TORR (1.0f / 133.322f) // 1 Pa = 1 / 133.322 Torr #define ONE_PA_TO_MICRONS (1000.0f / 133.322f) // 1 Pa = 1000 / 133.322 Microns // 从 其他单位 到 标准单位 #define ONE_MBAR_TO_PA 100.0f // 1 mbar = 100 Pa #define ONE_TORR_TO_PA 133.322f // 1 Torr = 133.322 Pa #define ONE_MICRONS_TO_PA (133.322f / 1000.0f) // 1 Microns = 133.322 / 1000 Pa // 压力单位枚举 typedef enum { PRESSURE_UNIT_PA, // 帕斯卡 PRESSURE_UNIT_MICRONS, // 微米汞柱 (μmHg) PRESSURE_UNIT_TORR, // 托 PRESSURE_UNIT_MBAR // 毫巴 } PressureUnitType; // 压力值基准 (现在以 Pa 为单位存储) typedef struct { u16 DisplayZero : 1; // 1 u16 Mode: 2; // 3 u16 CType: 1; // 5 u16 AType: 2; // 7 u16 PreSampling: 1; // 10 u16 AutoDetectOffset: 1; // 11 u16 AutoDetectProcess: 2; // 13 u16 EnableRHTest : 1; // 14 u16 EnableRoughTest: 1; // 15 } __SAMPLE_STATUS_BIT_TypeDef; typedef struct { __SAMPLE_STATUS_BIT_TypeDef State; u16 NextRun; u16 NextTime; u16 Counter; u16 CounterMax; u16 CTypeGain; u32 BLypeResult;//电池电量 u32 RDResult;//VRD u32 RHypeResult;//VRH u32 IRHResult;//IRH u32 ADC0Result; u32 ADC1Result; u32 ADC0Buffer[70]; u32 ADC1Buffer[70]; } TypeSample; typedef struct { unsigned int CalTA; unsigned int Value[3]; unsigned int DeltaVHH; unsigned int TUVHH; unsigned int TDVHH; unsigned int TUIndex; unsigned int TDIndex; } TypeCalibOffset; // ***************************************************************************** extern unsigned short int FRType; //========================================================== // 函数声明 - 核心流程控制 //========================================================== /** * @brief 流量处理与输出子程序 */ void FlowRateDealAndOuputSub(void); /** * @brief 计算流量内码并转换为流量 */ void ComputeFlowRateIndexAndFlowRate(void); /** * @brief 字减法函数 */ u16 WordSubFunction(u16 minuend, u16 subtractor); /** * @brief 采样定时器中断回调 */ void SamplingTimer_IRQ_Callback(void); /** * @brief 启动正常流量测量 (125ms周期) */ void StartNormolFlowMeasurement(void); /** * @brief 设置下一个采样进程 */ static void SetNextProcess(void); /** * @brief 配置ADC采样参数 * @param sampleNum 采样次数 */ void SetSystemForADCSample(u16 sampleNum); /** * @brief 计算采样数据平均值 * @param sampleNum 采样点数 * @param sampleShift 右移位数 (计算平均值用) */ void ComputeSampleData(u16 sampleNum, u16 sampleShift); /** * @brief 关闭模拟电路 */ void TurnOffAnalogCircuit(void); /** * @brief 采样过程管理状态机 */ void FlowProcessManagement(void); //========================================================== // 函数声明 - 系统初始化与中断 //========================================================== /** * @brief 核心硬件初始化 */ void CoreInit(void); /** * @brief 主定时器中断回调 */ void PrimaryTimer_IRQ_Callback(void); /** * @brief Timer2 自定义回调 (关机逻辑/按键) */ void My_Timer2_Callback(void); //========================================================== // 函数声明 - 显示与UI //========================================================== /** * @brief 切换压力单位 */ void SwitchPressureUnit(void); /** * @brief 压力单位转换 * @param value 原始值 * @param targetUnit 目标单位 * @param originalUnit 原始单位 * @return 转换后的值 */ double ConvertPressure(double value, PressureUnitType targetUnit, PressureUnitType originalUnit); /** * @brief 更新压力显示界面 */ void Update_Pressure_Display(void); /** * @brief 绘制矩形边框 (缓存模式) */ void OLED_DrawRect_Cache(u8 x, u8 y, u8 w, u8 h); //========================================================== // 函数声明 - 主循环 //========================================================== /** * @brief 系统轮询主循环 */ void SystemPolling(void); //File End------------------------------------------------------------------ #endif //.h End-------------------------------------------------------------------- #endif