177 lines
11 KiB
C
177 lines
11 KiB
C
/******************************************************************************
|
||
* @file board_pin.h
|
||
* @brief CBR3 温湿度风扇板级引脚、电平与时序(换板只改本文件)
|
||
* @author cyWu <1917507415@qq.com>
|
||
* @date 2026.08.29
|
||
* @version V1.0.0,首次发布(P0 Bring-up)
|
||
*
|
||
* @note 产品 GPIO 全部集中到本文件;板级 board_jl701n_demo_cfg.h 只保留
|
||
* UART0_TX=PG6 一项改动。CT1642 用 PG0(CLK)/PG1(DATA),AHT20 用
|
||
* PC4(SCL)/PC5(SDA),两路 IO 独立、无总线共享(2026-08-29 改板飞线分离,
|
||
* 原 PC4/PC5 共线 + bsp_bus 分时机制整体删除)。
|
||
******************************************************************************/
|
||
|
||
#ifndef __BOARD_PIN_H__
|
||
#define __BOARD_PIN_H__
|
||
|
||
#include "asm/gpio.h"
|
||
|
||
/*============================================================================*/
|
||
/* 功能开关:某路硬件异常时可单独关掉,不影响配网 */
|
||
/* 0 时对应模块 init/run 直接 return,GPIO 不配,日志打一次 xxx disabled */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_LED_ENABLE 1 /**< 1=状态 LED PC2(低亮) */
|
||
#define BOARD_KEY_ENABLE 1 /**< 1=按键 PB1(低按下) */
|
||
#define BOARD_FAN_ENABLE 1 /**< 1=风扇 MCPWM PC3(高导通) */
|
||
#define BOARD_DISP_ENABLE 1 /**< 1=CT1642 数码管(PG0/PG1 独立) */
|
||
#define BOARD_TH_ENABLE 1 /**< 1=AHT20 温湿度(PC4/PC5 独立) */
|
||
#define BOARD_MODE_ENABLE 1 /* 通风/强力状态机;P1 开 */
|
||
#define BOARD_LINKAGE_ENABLE 1 /* 联动引擎(替换原 7 组条件);P2 开 */
|
||
#define BOARD_TIMER_ENABLE 1 /* 定时引擎;P2 开 */
|
||
#define BOARD_RUNREC_ENABLE 1 /* 31 天运行记录;P2 开 */
|
||
#define BOARD_NVM_ENABLE 1 /* VM 持久化;P1 开 */
|
||
|
||
/*============================================================================*/
|
||
/* GPIO */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_UART_TX_PIN IO_PORTG_06 /**< 调试 UART TX(只发不占 PC5) */
|
||
#define BOARD_DISP_CLK_PIN IO_PORTG_00 /**< CT1642 CLK(独立,飞线 G0) */
|
||
#define BOARD_DISP_DATA_PIN IO_PORTG_01 /**< CT1642 DATA(独立,飞线 G1) */
|
||
#define BOARD_TH_SCL_PIN IO_PORTC_04 /**< AHT20 SCLK(独立,推挽驱动) */
|
||
#define BOARD_TH_SDA_PIN IO_PORTC_05 /**< AHT20 SDA(开漏+内部上拉,外部 4.7~10k 双保险) */
|
||
#define BOARD_FAN_PIN IO_PORTC_03 /**< 风扇 PWM,高电平导通,MCPWM */
|
||
#define BOARD_LED_PIN IO_PORTC_02 /**< 状态 LED,低电平亮 */
|
||
#define BOARD_KEY_PIN IO_PORTB_01 /**< 按键,低电平按下 */
|
||
|
||
#define BOARD_LED_ON_LEVEL 0 /**< LED 点亮电平:0=低亮 */
|
||
#define BOARD_FAN_ON_LEVEL 1 /**< 风扇有效电平:1=高导通 */
|
||
#define BOARD_KEY_ACTIVE_LEVEL 0 /**< 按键有效电平:0=按下为低 */
|
||
|
||
/*============================================================================*/
|
||
/* 按键 / 开机 */
|
||
/*============================================================================*/
|
||
|
||
/**
|
||
* 直接作为 key.c 状态机的 keyLongTime/keyLastTime 使用:
|
||
* 松手时刻 <BOARD_KEY_PAIR_MS → SHORT_Event,切档(见 5.3)
|
||
* 按住满 BOARD_KEY_PAIR_MS → LONG_Event(仍按住),切配对提示灯
|
||
* 按住满 BOARD_KEY_OTA_MS → LAST_Event(仍按住,到点即触发),进 OTA
|
||
* 按满 5s~12s 后松手 → RELEASE_Event,提交配对
|
||
*/
|
||
#define BOARD_KEY_PAIR_MS 5000 /**< keyLongTime:满 5s 挂配对提示灯 */
|
||
#define BOARD_KEY_OTA_MS 12000 /**< keyLastTime:满 12s 到点直接进 OTA */
|
||
#define BOARD_KEY_DEBOUNCE_MS 20 /**< 按键消抖 */
|
||
#define BOARD_PAIR_TIMEOUT_MS (120u * 1000u) /**< 配对超时 120s,失败后保持开机 */
|
||
|
||
/*============================================================================*/
|
||
/* LED(单灯 PC2,事件表见 led_manager.c) */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_LED_FAST_ON_MS 100 /**< 配对快闪:亮 */
|
||
#define BOARD_LED_FAST_OFF_MS 100 /**< 配对快闪:灭 */
|
||
#define BOARD_LED_OTA_ON_MS 200 /**< OTA 闪:亮 */
|
||
#define BOARD_LED_OTA_OFF_MS 200 /**< OTA 闪:灭 */
|
||
#define BOARD_LED_PAIR_OK_MS 3000 /**< 配对成功常亮时长(允许直接常亮) */
|
||
#define BOARD_LED_PAIR_FAIL_MS 3000 /**< 配对失败 200ms 闪提示时长 */
|
||
#define BOARD_LED_STANDBY_ON 1 /**< 1=开机常亮 */
|
||
|
||
/*============================================================================*/
|
||
/* 风扇 PWM */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_FAN_PWM_HZ 20000 /**< MCPWM 频率(Hz),20k 避开可听啸叫 */
|
||
#define BOARD_FAN_DUTY_GEAR0 0 /**< 0% */
|
||
#define BOARD_FAN_DUTY_GEAR1 5000 /**< 50%(用户拍板,2026-08-31) */
|
||
#define BOARD_FAN_DUTY_GEAR2 7500 /**< 75%(用户拍板,2026-08-31) */
|
||
#define BOARD_FAN_DUTY_GEAR3 10000 /**< 100% */
|
||
|
||
/*============================================================================*/
|
||
/* 显示(CT1642) */
|
||
/*============================================================================*/
|
||
|
||
/**
|
||
* CT1642 动态扫描节拍(ms)。
|
||
* ⚠ CT1642 内部只有单个 12 位锁存器(4 位选 + 8 段码),无按位显示 RAM、不自动扫描,
|
||
* 一次只点亮当前锁存的那 1 位。必须 MCU 持续轮询 4 位才能 4 位同亮、不闪。
|
||
* 本节拍每 BOARD_DISP_SCAN_MS 点亮 1 位、4 位轮询 → 每位 4*BOARD_DISP_SCAN_MS 一轮。
|
||
* 4ms:每位 16ms/62.5Hz、25% 占空,均匀不闪,且不饿死 priority=1 扫描中断里的
|
||
* 主循环喂狗(实测 2ms 节拍会导致上电硬复位,禁止)。
|
||
* 注:SCAN_TEST=1 段扫描用"值变化才刷"机制,本节拍不敏感;正常显示(0)与
|
||
* 位选验证(2)用分时轮询,必须 ≤4ms 否则肉眼可见闪烁。
|
||
*/
|
||
#define BOARD_DISP_SCAN_MS 4
|
||
|
||
#define BOARD_DISP_BLINK_MS 500 /**< 告警闪烁半周期(P1 用) */
|
||
|
||
/**
|
||
* 告警闪烁调试宏(P1 台上验证用,正常固件保持 0):
|
||
* 0 = 关:闪烁由 app_disp_set_temp/humi_alarm 驱动(app_linkage 按 8.2 喂)
|
||
* 1 = 强制温度管闪(模拟温度超 [min,max])
|
||
* 2 = 强制湿度管闪(模拟湿度超 [min,max])
|
||
*/
|
||
#define BOARD_DISP_ALARM_TEST 0
|
||
|
||
/**
|
||
* CT1642 协议(18bit/帧,CLK 上升沿采样,DATA 仅在 CLK=低时改变):
|
||
* [0:3] C1-C4 位选(低有效,入参 com 取反后先发 C1)
|
||
* [4:9] 6 位保留位(固定填 1)
|
||
* [10:17] Q2-Q9 段码(LSB 先,seg 的 bit0 → Q2 引脚)
|
||
* 发完 18bit:CLK=高 时 DATA 0→1 = 锁存;CLK=低 时 DATA 0→1 = 输出刷新。
|
||
* 刷新一位数码管 = 发一帧;4 位连发 4 帧(每帧仅一个 Cx 位选生效)。
|
||
*
|
||
* ⚠ P0 扫段:段码/位选与硬件物理映射为"待实测"值,台上用 SCAN_TEST 扫清后修正。
|
||
* seg_tbl 段码位定义:bit7=DP bit6=G bit5=F bit4=E bit3=D bit2=C bit1=B bit0=A
|
||
* (bit0 先发 → 落到 Q2 引脚;PCB 上 Q2 接哪段即"软件 A 段"对应的物理段)
|
||
* COM 位选 → 物理管位映射(2026-08-29 SCAN_TEST=2 实测定型):
|
||
* C1=湿度十位 C2=湿度个位 C3=温度十位 C4=温度个位(默认假定温/湿相反,已对调)
|
||
*/
|
||
#define BOARD_DISP_COM_TEMP_TEN 0x04 /**< C3 = 温度十位(实测定型) */
|
||
#define BOARD_DISP_COM_TEMP_ONE 0x08 /**< C4 = 温度个位(实测定型) */
|
||
#define BOARD_DISP_COM_HUMI_TEN 0x01 /**< C1 = 湿度十位(实测定型) */
|
||
#define BOARD_DISP_COM_HUMI_ONE 0x02 /**< C2 = 湿度个位(实测定型) */
|
||
|
||
/**
|
||
* 扫段调试模式(P0 台上定型用,2026-08-29 已全部定型,正常固件保持 0):
|
||
* 0 = 正常:无采样时写死 25/60(分时轮询 + 提速移位)
|
||
* 1 = 段扫描:4 位同显一段,值变化才刷(无鬼影);段序已实测确认 A..G 顺序正确
|
||
* 2 = 位扫描:4 位分显 1/2/3/4(分时轮询);位序已实测确认 C1=湿十/C2=湿个/C3=温十/C4=温个
|
||
*/
|
||
#define BOARD_DISP_SCAN_TEST 0
|
||
|
||
/*============================================================================*/
|
||
/* 传感器(AHT20) */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_TH_PERIOD_MS 2000 /**< 采集周期 2s(手册要求 >1s,规格书第 2.3/18 章) */
|
||
#define BOARD_TH_FAIL_MAX 3 /**< 连续失败 3 次判传感器故障 */
|
||
#define BOARD_TH_HUMI_PUB_DELTA 2 /**< 对外湿度:相对上次 |ΔH|>=2% 才更新显示/上报 */
|
||
#define BOARD_TH_TEMP_PUB_DELTA_X10 5 /**< 对外温度:相对上次 |ΔT|>=0.5℃ 才更新显示/上报 */
|
||
#define BOARD_AHT20_WAIT_MS 80 /**< 测量等待时长 */
|
||
#define BOARD_AHT20_I2C_HZ 100000 /**< 软件 I2C 时钟 */
|
||
|
||
/*============================================================================*/
|
||
/* 模式(P1 起用,P0 关闭) */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_MODE_VENT_ON_MS (25u * 60u * 1000u) /**< 通风开段 25min */
|
||
#define BOARD_MODE_VENT_OFF_MS (5u * 60u * 1000u) /**< 通风停段 5min */
|
||
#define BOARD_MODE_POWER_ON_MS (15u * 60u * 1000u) /**< 强力一轮 15min */
|
||
|
||
/*============================================================================*/
|
||
/* 联动(第 10 章:1 条 20B 配置,回差开 1 档 / 关 0 档,不改 mode) */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_LINKAGE_CFG_LEN 20 /**< DP6 linkage_config 长度(Byte) */
|
||
#define BOARD_LINKAGE_OPEN_GEAR 1 /**< 联动开风扇时写的档位(第 10.3 节) */
|
||
|
||
/*============================================================================*/
|
||
/* 运行记录(第 13.1 节:31 天 × uint32 秒) */
|
||
/*============================================================================*/
|
||
|
||
#define BOARD_RUN_RECORD_DAYS 31 /**< 记录天数 */
|
||
#define BOARD_RUN_RECORD_SAVE_SEC 900 /**< 累计运行 15 分钟写一次 VM */
|
||
|
||
#endif /* __BOARD_PIN_H__ */
|