241 lines
15 KiB
C
241 lines
15 KiB
C
/**
|
||
* @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 "entity.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
|
||
|
||
// eeprom_lc02b 地址定义
|
||
#define PRRESSURE_CALIBRATION_ADDRESS 0x00 ///< 压力校准地址
|
||
|
||
#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 TIME_1US TIM1 ///< 1us定时器
|
||
#define TASK_TIM TIM6 ///< 任务定时器
|
||
#define MODE_TIM TIM7 ///< 模式定时器
|
||
#define MODE_GATHE_TIM TIM17 ///< 模式采集定时器
|
||
#define HART_TIM TIM16 ///< HART定时器
|
||
|
||
#define HART_OUT_TIM TIM3 ///< HART输出定时器
|
||
#define HART_OUT_TIM_CHANNEL LL_TIM_CHANNEL_CH2 ///< 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)
|
||
|
||
/* 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
|
||
{
|
||
uint32_t app_preload_version;
|
||
uint8_t app_preload_language_flag; ///< 语言标志
|
||
uint16_t app_preload_first_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 void timer_cycle_update(void); ///< 板卡定时器周期更新
|
||
extern void dbg_assert_cb(uint16_t line); ///< 板卡断言回调
|
||
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 void calib_pressure(pressure_type_e index); ///< 校准阀门位置参数
|
||
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 void rtc_get_datetime_ram(rtc_date_t *const date, rtc_time_t *const time); ///< 从实时数据结构中获取日期和时间
|
||
|
||
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_tim_hart_out(uint32_t sysclk); ///< 设置定时器心跳输出
|
||
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输出电流值转换
|
||
|
||
extern void update_device_temp_min_max(float32 temperature); ///< 更新设备最小、最大温度
|
||
extern BOOL wireless_can_work(float32 loop_current); ///< 无线模块是否可以工作
|
||
extern BOOL is_run_max_time(void); ///< 是否运行最大时间
|
||
#endif ///< __BOARD_H__
|