Files
JBao_Temp_Humi_Fan_FW/apps/usr_periph/board_pin.h
T
wuchuyuan e324ebd99b 精简 usr_app 架构:去掉关机/休眠死代码,按键复用 key.c 状态机,ISR 重活统一延后到任务上下文
Type-C 长供电、上电即工作、无软关机,删除 app_boot/app_power 及 DP0 开关相关逻辑,
去掉空占位 app_fan_run 和无效的 usr_timer_pick_mode/rearm(数码管 4ms 扫描已 priority=1,
系统本来就不会进低功耗)。按键 5s 配对 / 12s OTA 改走 key.c 长按分级,去掉自计时与 1~5s 死区。
新增 app_defer,NVM/配对/OTA 只在 ISR 置位、在 500ms 任务上下文落地,避免再在 usr_timer 里写 flash。
规格书与注释同步精简。
2026-08-31 17:57:52 +08:00

160 lines
9.8 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_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 直接 returnGPIO 不配,日志打一次 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_COND_ENABLE 1 /* 条件引擎;P2 开 */
#define BOARD_TIMER_ENABLE 1 /* 定时引擎;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 驱动(P2 条件引擎喂)
* 1 = 强制温度管闪(模拟温度比较成立)
* 2 = 强制湿度管闪(模拟湿度比较成立)
*/
#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 引脚)
* 发完 18bitCLK=高 时 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_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 */
#endif /* __BOARD_PIN_H__ */