This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/board/inc/board.h

183 lines
11 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file board.h
* @author xxx
* @date 2023-08-30 14:05:55
* @brief 头文件 board.h
* @copyright Copyright (c) 2023 by xxx, All Rights Reserved.
*/
#ifndef __BOARD_H__
#define __BOARD_H__
#include "main.h"
#include "bsp.h"
#include "tim.h"
#include "menu.h"
#include "rtc_rx8010.h"
#include "eeprom_m95.h"
#include "eeprom_fm24.h"
#include "eeprom_lc02b.h"
#include "ntc_3950.h"
#include "leds.h"
#define APP_PRELOAD_AREA 0x10007FF0 ///< 预加载区域
#define VREF_VALUE 3000 ///< 参考电压mV
#define FONT_TYPE FONT_0816 ///< 字体类型
#ifndef ADC_MAX
#define ADC_MAX 4095 //< ADC最大
#endif
#ifndef DAC_MAX
#define DAC_MAX 4095 //< DAC最大
#endif
#define BLE_EN_ENABLE() GPIO_SET(BLE_PWR_GPIO_Port, BLE_PWR_Pin) ///< 蓝牙使能
#define BLE_EN_DISABLE() GPIO_RESET(BLE_PWR_GPIO_Port, BLE_PWR_Pin) ///< 蓝牙禁用
#define BLE_IS_ENABLE() (GPIO_READ(BLE_PWR_GPIO_Port, BLE_PWR_Pin) == SET) ///< 蓝牙使能状态
#define LCD_DMA DMA1 ///< LCD DMA
#define LCD_DMA_TX_CHANNEL LL_DMA_CHANNEL_5 ///< LCD DMA发送通道
#define LCD_POWER_ON() GPIO_SET(LCD_PWR_GPIO_Port, LCD_PWR_Pin) ///< LCD电源使能
#define LCD_POWER_OFF() GPIO_RESET(LCD_PWR_GPIO_Port, LCD_PWR_Pin) ///< LCD电源禁用
#define LCD_IS_POWER_ON() (GPIO_READ(LCD_PWR_GPIO_Port, LCD_PWR_Pin) == SET) ///< LCD电源使能状态
#define LCD_DETECT() (0) ///< LCD检测高电平没有接入低电平接入
#define BP_S_POWER_ON() GPIO_SET(BP_S_PWR_GPIO_Port, BP_S_PWR_Pin)
#define BP_S_POWER_OFF() GPIO_RESET(BP_S_PWR_GPIO_Port, BP_S_PWR_Pin)
#define BP_S_IS_POWER_ON() (GPIO_READ(BP_S_PWR_GPIO_Port, BP_S_PWR_Pin) == SET)
#define BP_A_POWER_ON() GPIO_SET(BP_A_PWR_GPIO_Port, BP_A_PWR_Pin)
#define BP_A_POWER_OFF() GPIO_RESET(BP_A_PWR_GPIO_Port, BP_A_PWR_Pin)
#define BP_A_IS_POWER_ON() (GPIO_READ(BP_A_PWR_GPIO_Port, BP_A_PWR_Pin) == SET)
#define BP_B_POWER_ON() GPIO_SET(BP_B_PWR_GPIO_Port, BP_B_PWR_Pin)
#define BP_B_POWER_OFF() GPIO_RESET(BP_B_PWR_GPIO_Port, BP_B_PWR_Pin)
#define BP_B_IS_POWER_ON() (GPIO_READ(BP_B_PWR_GPIO_Port, BP_B_PWR_Pin) == SET)
/// 禁用 I/P 电流输出 0-6.2V
#define VIP_H_EN_DISABLE() \
do \
{ \
GPIO_RESET(IP_H_PWR_GPIO_Port, IP_H_PWR_Pin); \
GPIO_SET_ANALOG(IP_H_PWR_GPIO_Port, IP_H_PWR_Pin); \
} while (0)
/// 使能 I/P 电流输出 0-6.2V
#define VIP_H_EN_ENABLE() \
do \
{ \
GPIO_SET_OUTPUT(IP_H_PWR_GPIO_Port, IP_H_PWR_Pin); \
GPIO_SET(IP_H_PWR_GPIO_Port, IP_H_PWR_Pin); \
} while (0)
// PWM对外输出
#define PWM_CTRL_OUTPUT(out) PWM_SET_DUTY(TIM3, 3, out)
/* HART */
#define HART_EN_ENABLE() GPIO_SET(HART_PWR_GPIO_Port, HART_PWR_Pin) ///< HART使能
#define HART_EN_DISABLE() GPIO_RESET(HART_PWR_GPIO_Port, HART_PWR_Pin) ///< HART禁用
#define HART_IS_ENABLE() (GPIO_READ(HART_PWR_GPIO_Port, HART_PWR_Pin) == SET) ///< HART使能状态
#define HART_RST_ON() GPIO_SET(HART_RST_GPIO_Port, HART_RST_Pin)
#define HART_RST_OFF() GPIO_RESET(HART_RST_GPIO_Port, HART_RST_Pin)
#define HART_RTS_ON() GPIO_SET(HART_RTS_GPIO_Port, HART_RTS_Pin)
#define HART_RTS_OFF() GPIO_RESET(HART_RTS_GPIO_Port, HART_RTS_Pin)
/* HART */
/* SWO */
#define SWO1_OPEN() GPIO_SET(SWO1_GPIO_Port, SWO1_Pin) ///< SWO1 开
#define SWO1_CLOSE() GPIO_RESET(SWO1_GPIO_Port, SWO1_Pin) ///< SWO1 关
#define SWO2_OPEN() GPIO_SET(SWO2_GPIO_Port, SWO2_Pin) ///< SWO2 开
#define SWO2_CLOSE() GPIO_RESET(SWO2_GPIO_Port, SWO2_Pin) ///< SWO2 关
typedef enum
{
FILTER_AVERAGE = 1,
FILTER_MEDIAN,
} filter_e;
typedef enum
{
BOARD_CACHE_1 = 0,
BOARD_CACHE_2,
BOARD_CACHE_MAX,
} board_cache_e;
typedef enum
{
// 不需要跳转到bootload
APP_PRELOAD_BOOTLOAD_JUMP_NONE = 0,
// 更新完成等待用户通知跳转到bootload
APP_PRELOAD_BOOTLOAD_JUMP_WAIT = 1,
// 更新完成立即跳转到bootload
APP_PRELOAD_BOOTLOAD_JUMP_IMMEDIATELY,
} app_preload_bootload_jump_e; ///< 预加载BOOTLOAD跳转标志
extern const uint32_t NTC_100K_B3950_List[];
extern __IO uint8_t app_preload_flag; ///< 预加载标志位
extern __IO uint8_t app_preload_language_flag; ///< 语言标志位
extern __IO uint8_t app_preload_bootload_flag; ///< 触发BOOTLOAD启动标志(在用户代码中接受代码文件)
extern __IO uint8_t app_preload_bootload_jump_flag; ///< 触发BOOTLOAD跳转标志(在用户代码中接受代码文件)
extern __IO uint32_t app_preload_cupid_encrypt; ///< CPU加密值
extern void board_init(void); ///< 板卡初始化
extern void board_dinit(void); ///< 板卡反初始化
extern void board_work_stop_or_run(void); ///< 板卡工作停止或运行
extern void board_cache_reset(void); ///< 板卡缓存复位
extern uint16_t board_cache_get(board_cache_e index); ///< 板卡缓存获取
extern void driver_init(void); ///< 功耗引脚初始化
extern void driver_dinit(void); ///< 功耗引脚反初始化
extern void lcd_init(void); ///< LCD初始化
extern void lcd_dinit(void); ///< LCD反初始化
extern void system_clock_config_set_flag(BOOL flag); ///< 设置系统时钟配置标志
extern void system_clock_config_low(void); ///< 系统时钟配置低频
extern void system_clock_config_hight(void); ///< 系统时钟配置高频
extern void gui_flush(void); ///< LCD刷新
extern void gui_flush_Clear(void); ///< LCD刷新并清屏
extern void gui_clr(void); ///< 清屏
extern void gui_full(void); ///< 全屏黑色
extern void gui_open(void); ///< 打开GUI
extern void gui_close(void); ///< 关闭GUI
extern void gui_set_scandir(uint8_t dir); ///< 设置扫描方向
extern void gui_set_clear_flag(void); ///< 设置清屏标志
extern BOOL gui_get_clear_flag(void); ///< 获取清屏标志
extern uint16_t get_dac(float32 output); ///< 根据目标行程计算DAC输出理论值
extern void pwm_output_position(float32 position_per); ///< PWM输出阀位百分比
extern void calib_loop(void); ///< 校准回路电流
extern void calib_kpa(void); ///< 校准压力
extern void calib_pwm_out(void); ///< 校准PWM输出
extern void calib_parapos_perent(void); ///< 校准阀门位置参数
extern uint16_t get_actual_travel_adc_average(void); ///< 获取当前实际行程ADC值
extern uint16_t get_actual_travel_adc(void); ///< 获取当前实际行程ADC值
extern float32 get_actual_travel(filter_e filter); ///< 获取当前实际行程
extern float32 get_actual_travel_2(filter_e filter); ///< 获取当前实际行程
extern float32 get_current(void); ///< 获取当前回路电流
extern float32 get_current_deal(float32 current); ///< 获取当前回路电流
extern float32 get_temperature(void); ///< 获取当前温度值
extern float32 get_pressure(pressure_index_e id); ///< 获取当前压力
extern float32 get_flow(void); ///< 获取当前流量
extern void get_timestamp(uDateTime_TypeDef *time); ///< 获取时间戳
extern void get_real_time(uint8_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *min, uint8_t *sec); ///< 获取实时时间
extern void set_real_time(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec);
extern BOOL get_app_preload_bootload_flag(void); ///< 获取预加载BOOTLOAD标志位
extern app_preload_bootload_jump_e get_app_preload_bootload_jump_flag(void); ///< 获取预加载BOOTLOAD跳转标志
extern void set_pwm_calib_current(void); ///< 设置输出PWM校准电流
extern void set_loop_4ma(void); ///< 设置回路电流4mA
extern void set_loop_20ma(void); ///< 设置回路电流20mA
extern void set_200kpa(void); ///< 设置200kpa
extern void set_400kpa(void); ///< 设置400kpa
extern void set_output_4ma_pwm(uint16_t value); ///< 设置输出4mA时的PWM值
extern void set_output_20ma_pwm(uint16_t value); ///< 设置输出20mA时的PWM值
extern void set_app_preload_language_flag(uint8_t language); ///< 设置预加载语言标志位
extern void set_app_preload_bootload_flag(uint8_t flag); ///< 设置预加载BOOTLOAD标志位
extern void set_app_preload_bootload_jump_flag(app_preload_bootload_jump_e flag); ///< 设置预加载BOOTLOAD标志位
/************************************** 通过电阻测算,只在测试程序中使用 **************************************/
extern float32 actual_adc_convert_percent(uint16_t adc); ///< 实际行程ADC值转换为百分比
extern float32 loop_current_convert(uint16_t adc); ///< 回路电流检测转换
extern float32 ip_dac2current(uint16_t dac); ///< DAC:IP输出电流值转换
extern float32 ip2current(void); ///< IP输出电流值转换
extern void pwm_duty2current(float32 cur_ma); ///< PWM输出电流值转换
#endif // __BOARD_H__