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

227 lines
15 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 "lcds.h"
#include "menu.h"
#include "leds.h"
#include "rtc_rx8010.h"
#include "eeprom_m95.h"
#include "eeprom_fm24.h"
#include "eeprom_lc02b.h"
#include "ntc_3950.h"
#include "sht40.h"
#include "dac161p997.h"
#define LCD_SPI SPI2
#define HART_UART1 USART1
#define HART_UART2 UART5
#define HART_UART1_BAUDRATE (1200U)
#define HART_UART2_BAUDRATE (115200U)
#define APP_PRELOAD_AREA 0x10007FF0 ///< 预加载区域
#define VREF_VALUE (CPU_VREF * 1000) ///< 参考电压mV
#define TASK_TIM TIM6 ///< 任务定时器
#define MODE_TIM TIM7 ///< 模式定时器
#define MODE_GATHE_TIM TIM17 ///< 模式采集定时器
#define HART_TIM TIM16 ///< HART定时器
#define HART_OUT_TIM TIM3 ///< HART输出定时器
#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() (GPIO_READ(LCD_EXTCOMIN_GPIO_Port, LCD_EXTCOMIN_Pin) == SET) ///< 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 SWO1_TOGGLE() GPIO_TOGGLE(SWO1_GPIO_Port, SWO1_Pin) ///< SWO1 翻转
#define SWO1_IS_OPEN() (GPIO_READ(SWO1_GPIO_Port, SWO1_Pin) == SET)
#define SWO2_OPEN() GPIO_SET(SWO2_GPIO_Port, SWO2_Pin) ///< SWO2 开
#define SWO2_CLOSE() GPIO_RESET(SWO2_GPIO_Port, SWO2_Pin) ///< SWO2 关
#define SWO2_TOGGLE() GPIO_TOGGLE(SWO2_GPIO_Port, SWO2_Pin) ///< SWO2 翻转
#define SWO2_IS_OPEN() (GPIO_READ(SWO2_GPIO_Port, SWO2_Pin) == SET)
typedef enum
{
FILTER_AVERAGE = 1,
FILTER_MEDIAN,
FILTER_MEDIAN_AVERAGE,
} 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 = 0xd501,
///< 更新完成立即跳转到bootload
APP_PRELOAD_BOOTLOAD_JUMP_IMMEDIATELY = 0xc802,
} app_preload_bootload_jump_e; ///< 预加载BOOTLOAD跳转标志
typedef struct
{
uint16_t app_preload_flag; ///< 预加载标志
uint8_t app_preload_language_flag; ///< 语言标志
uint32_t app_preload_cupid_encrypt; ///< 加密后的CPUID
} board_data_t;
extern board_data_t board_data; ///< 板卡数据
extern lcd_t *lcd; ///< LCD句柄
extern __IO uint16_t dbg_assert_line;
extern __IO uint16_t app_preload_bootload_flag; ///< 触发BOOTLOAD启动标志(在用户代码中接受代码文件)
extern __IO uint16_t app_preload_bootload_jump_flag; ///< 触发BOOTLOAD跳转标志(在用户代码中接受代码文件)
extern void board_init(void); ///< 板卡初始化
extern void board_dinit(void); ///< 板卡反初始化
extern void board_srand(void); ///< 板卡随机数种子
extern void board_work_stop_or_run(void); ///< 板卡工作停止或运行
extern uint16_t board_cache_get(board_cache_e index); ///< 板卡缓存获取
extern void driver_init(void); ///< 功耗引脚初始化
extern void driver_dinit(void); ///< 功耗引脚反初始化
extern BOOL is_lcd_ext_board(void); ///< 是否接入了LCD扩展板
extern void lcd_init(void); ///< LCD初始化
extern void lcd_dinit(void); ///< LCD反初始化
extern void system_clock_config_low(void); ///< 系统时钟配置低频
extern void system_clock_config_high(void); ///< 系统时钟配置高频
extern BOOL gui_can_work(void); ///< GUI是否可以工作
extern BOOL gui_is_idle(void); ///< GUI是否空闲
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 BOOL flash_read(uint32_t address, uint8_t *data, uint16_t length); ///< 读取Flash
extern BOOL flash_write(uint32_t address, const uint8_t *data, uint16_t length); ///< 写入Flash
extern BOOL flash_erase_page(uint32_t page); ///< 擦除Flash页
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(void); ///< 获取当前实际行程ADC值
extern float32 get_actual_travel(filter_e filter); ///< 获取当前实际行程
extern float32 get_current_by_resistance(void); ///< 通过电阻测算获取当前回路电流
extern float32 get_current(filter_e filter); ///< 获取当前回路电流
extern float32 get_current_deal(float32 current); ///< 电流数据处理
extern float32 get_temperature(void); ///< 获取当前温度值
extern float32 get_pressure(pressure_type_e id); ///< 获取当前压力
extern float32 get_dead_zone(void); ///< 获取死区
extern float32 get_flow(void); ///< 获取当前流量
extern BOOL update_real_time(date_time_t *real_time); ///< 更新实时时间
extern BOOL get_timestamp(date_time_t *time); ///< 获取时间戳
extern BOOL get_real_time(uint8_t *year, uint8_t *month, uint8_t *day, uint8_t *hour, uint8_t *min, uint8_t *sec); ///< 获取实时时间
extern float32 get_cpu_temperature(void); ///< 获取CPU温度
extern float32 get_cpu_volt(void); ///< 获取CPU电压
extern float32 get_board_current(void); ///< 获取板卡电流
extern uint32_t get_seed(void); ///< 获取随机种子
extern BOOL uart1_get_idel_status(void); ///< 获取UART1空闲状态
extern uint32_t rt_data_time_timestamp(void); ///< 获取实时时间戳
extern BOOL rtc_get_datetime(rtc_date_t *const date, rtc_time_t *const time); ///< 获取RTC时间
extern BOOL set_real_time(uint8_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t min, uint8_t sec);
extern uint8_t get_language(void); ///< 获取语言
extern uint8_t get_work_page_index(void); ///< 获取工作菜单索引
extern uint16_t get_app_preload_bootload_flag(void); ///< 获取预加载BOOTLOAD标志位
extern uint8_t get_app_preload_language_flag(void); ///< 获取预加载语言标志位
extern app_preload_bootload_jump_e get_app_preload_bootload_jump_flag(void); ///< 获取预加载BOOTLOAD跳转标志
extern void set_loop_4ma(void); ///< 设置回路电流4mA
extern void set_loop_20ma(void); ///< 设置回路电流20mA
extern void set_pressure_min(uint8_t unit, float32 set_value, pressure_type_e index); ///< 设置最小压力
extern void set_pressure_max(uint8_t unit, float32 set_value, pressure_type_e index); ///< 设置最大压力
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_language(uint8_t language); ///< 设置语言
extern void set_work_page_index(uint8_t index); ///< 设置工作菜单索引
extern void set_app_preload_bootload_flag(uint16_t flag); ///< 设置预加载BOOTLOAD标志位
extern void set_app_preload_bootload_jump_flag(app_preload_bootload_jump_e flag); ///< 设置预加载BOOTLOAD标志位
extern void uart1_set_idel_handle_1_sec(void); ///< 设置UART1空闲处理,1秒执行一次
extern void uart1_set_idel_status(BOOL idel); ///< 设置UART1空闲状态
/************************************** 通过电阻测算,只在测试程序中使用 **************************************/
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 float32 pressure_adc2kpa(uint16_t adc); ///< 压力ADC值转换
extern void pwm_duty2current(float32 cur_ma); ///< PWM输出电流值转换
#endif ///< __BOARD_H__